【问题标题】:PHP isset function is not checking properlyPHP isset 函数未正确检查
【发布时间】:2019-05-01 21:00:22
【问题描述】:

单击按钮时。我想使用 register_button 从表单中获取值。但是,它不会进入 if 子句。

我无法检查在 if 语句中输入的任何内容。 是否有任何其他选项可以让我从表单中检索数据,或者我是否犯了一些错误?

var_dump($_POST) 返回

array(6) { 
    ["reg_fname"]=> string(1) "a" 
    ["reg_lname"]=> string(3) "asd" 
    ["reg_email"]=> string(5) "ad@ad" 
    ["reg_pass"]=> string(4) "dasd" 
    ["reg_pass2"]=> string(5) "sadsa" 
    ["register_button"]=> string(8) "Register" 

} 

Invalid format 

代码:

$fname = "";
$lname = "";
$em = "";
$em2 = "";
$password = "";
$password2 = "";
$date = "";
$error_array = "";

if (isset($_POST['register_button'])) {

    $fname = strip_tags($_POST['reg_fname']);
    $fname = str_replace(' ', ' ', $fname);
    $lname = $_POST['reg_lname'];
    $lname = str_replace(' ', ' ', $lname);

    $em = $_POST['reg_email'];
    $em = str_replace(' ', ' ', $em);

    $password = strip_tags($_POST['reg_pass']);
    $password2 = strip_tags($_POST['reg_pass2']);

    $date = date("Y-m-d");

    if(filter_var($em, FILTER_VALIDATE_EMAIL)){
        $em = filter_var($em, FILTER_VALIDATE_EMAIL);

        $e_check = mysqli_query($con, "SELECT email FROM users WHERE email='$em");

        $num_rows = mysqli_num_rows($e_check);

        if(num_rows > 0){
            echo "Email already in use";
        }
    }else {
        echo "Invalid format";
    }

    if(strlen(fname)>25 || strlen(fname)<2 ){
        echo "Your fi";
    }
}

<form method="post" action="index.php">

<input type = "text" name="reg_fname" placeholder="First Name"       required>
<br>
<input type = "text" name="reg_lname" placeholder="Last Name" required>
<br>
<input type = "email" name="reg_email" placeholder="Email" required>
<br>
<input type = "password" name="reg_pass" placeholder="Password" required>
<br>
<input type = "password" name="reg_pass2" placeholder="Confirm Password" required>
<br>
<input type = "submit" name="register_button" value="Register">

</form>

【问题讨论】:

  • 这些是否在&lt;form&gt; 元素中? var_dump($_POST) 告诉你什么?
  • 是的,它们在
    元素中。 var_dump($_POST) 返回数组 (6) { ["reg_fname"]=> string(1) "a" ["reg_lname"]=> string(3) "asd" ["reg_email"]=> string(5) "ad@ad" ["reg_pass"]=> string(4) "dasd" ["reg_pass2"]=> string(5) "sadsa" ["register_button"]=> string(8) "Register" } 无效格式
  • 编辑您的问题以包含此信息
  • 另外你不应该默默地改变用户的密码。如果我想将my&lt;pass&gt;word 作为密码,我应该可以,不是吗?最后但同样重要的是,您应该使用prepared statements 进行数据库访问。
  • 请勿更改或过滤密码。这是不合理的,你让他们变得脆弱。使用 Password Hashing API 来散列和验证密码。

标签: php html post isset


【解决方案1】:

它进入了第一个if 语句。您可以知道,因为当您 var_dump($_POST) 时,您在转储输出后收到“无效格式”文本。这意味着它会进入页面下方的else 语句,那里有echo "Invalid format";。所以实际上是你的 filter_var if 声明失败了。

【讨论】:

  • 由于拼写错误导致的问题(例如缺少或多余的})不是 SO 的主题。不要回答,而是将要结束的问题标记为离题。
  • 这不是拼写错误的结果。他的代码运行良好。
【解决方案2】:

为什么使用“register_button”作为支票?为什么不是你需要的领域之一?

【讨论】:

    【解决方案3】:

    请不要在有人回答后编辑您的问题 您不检查查询是否成功。 您使用 if 过滤变量最好是直接制作 您忘记在字符串后的查询中添加逗号。

    请尝试以下

    <?php
    $fname = "";
    $lname = "";
    $em = "";
    $em2 = "";
    $password = "";
    $password2 = "";
    $date = "";
    $error_array = "";
    if (isset($_POST['register_button'])) {
        $fname = strip_tags($_POST['reg_fname']);
        $fname = str_replace(' ', ' ', $fname);
        $lname = $_POST['reg_lname'];
        $lname = str_replace(' ', ' ', $lname);
    
        $em = $_POST['reg_email'];
        $em = str_replace(' ', ' ', $em);
    
        $password = strip_tags($_POST['reg_pass']);
        $password2 = strip_tags($_POST['reg_pass2']);
    
        $date = date("Y-m-d");
        // No need to use if
        $em = filter_var($em, FILTER_VALIDATE_EMAIL);
        /// $con = mysqli_connect("localhost", "user", "pass", "dbname");
        /// using if to be sure query success
        if ($e_check= mysqli_query($con, "SELECT email FROM users WHERE email='$em'")) {
    
            $num_rows= mysqli_num_rows($e_check);
            if ($num_rows> 0) {
                echo "Email already in use";
            } else {
                /// here your insert query
    
            }
        }
        else
        {
            echo "No query ";
        } 
        if(strlen($fname) >25 || strlen($fname)< 2 )
        { 
            echo "Your first name must be at least 2 char and maximum 25 char "; 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 1970-01-01
      • 2010-10-10
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2017-10-09
      • 1970-01-01
      相关资源
      最近更新 更多