PHP if else 语句无法正常工作

标签 php mysql forms

我做了一个 php 评论系统,但代码似乎没问题,而且我也没有收到任何错误消息。

这是我的代码:

 <?php
$con = mysqli_connect("localhost","root","","ecommerce"); 
$errors = array();
if (isset($_POST['submit'])){
    $name = (isset($_POST['name']));
    $email = (isset($_POST['email']));
    $comment = (isset($_POST['comment']));

    if (empty($name)){
        $err['name1'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:30px;float:right;'>Please write down your name!</p>";
    }else{
        $name_length = strlen($name);
        if ($name_length > 2 ){
            if (!empty($email)){
                    $email_verification = test_input($email);
                    if (!filter_var($email_verification, FILTER_VALIDATE_EMAIL)) {
                    $err['email1'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:25px;float:right;'>Your email is not written correctly!</p>"; 
                }else{
                    if (empty($comment)){
                        $err['comment1'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:25px;float:right;'>Please write your comment!</p>"; 
                    }else{
                        $comment_length = strlen($comment);
                        if (($comment_length < 5) || ($comment_length > 100)){
                            $err['comment2'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:25px;float:right;'>Your comment must be between 5 to 100 characters!</p>"; 
                        }else{
                            $que = $con->query("SELECT * FROM product_comments WHERE productcode='%s'", $_SESSION['pro_id']); 
                            if(mysqli_num_rows($que) == 0){
                            $insert_id2 = "insert into product_comments (productcode) values ('$product_id')";
                            $insert_id2 = mysqli_query($con, $insert_id2);
                            }
                        }
                    }
                }
            }else{
                $err['email2'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:25px;float:right;'>Please write your email down!</p>"; 
            }
        }else{
            $err['name2'] = "<p style='color:red;font-family: BCompset, Arial, Helvetica, sans-serif;font-size:30px;float:right;'>Your name must be more than 2 words!</p>";
        }
    }

    //check errors
        if(count($err) == 0)
        {

            $insert_comment = "insert into product_comments (email,name,comment,modified_date, modified_time) values ('$email_verification','$name','$comment',CURDATE(), CURTIME())";
            $insert_comment = mysqli_query($con, $insert_comment);
            $succ = "<script>alert('Your comment is submitted correctly')</script>";
        }
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>
<form action='' method='POST'>
    <span>
        <input type='text' name='name' placeholder='Your Name'/>
        <input type='email' name='email' placeholder='Email Address'/>
    </span>
        <textarea name='' name='comment' placeholder='Comment'></textarea>

        <input name='submit' style='font-family: BJadidBold, Arial, Helvetica, sans-serif;' type='submit' value='Submit' class='btn btn-default pull-right'></input>
</form>
<p><?php if(isset($err['name1'])) echo $err['name1']; ?></p>
<p><?php if(isset($err['name2'])) echo $err['name2']; ?></p>
<p><?php if(isset($err['email1'])) echo $err['email1']; ?></p>
<p><?php if(isset($err['email2'])) echo $err['email2']; ?></p>
<p><?php if(isset($err['comment1'])) echo $err['comment1']; ?></p>
<p><?php if(isset($err['comment2'])) echo $err['comment2']; ?></p>

每次我想提交包含正确信息的表单时,我都会收到此 $err['name2'] 错误消息,

Your name must be more than 2 words

我不知道为什么会发生这种情况,所以如果您知道出了什么问题,请告诉我......谢谢!

最佳答案

这并没有按照您的想法进行:

$name = (isset($_POST['name']));

isset() 返回一个 bool 值。它不会返回正在检查的内容的值。这意味着 $name 不会包含您期望的内容,这会导致此计算结果为 false:

if ($name_length > 2 ){

(我猜测是,$name 当解释为字符串时最终包含 0 或 1,因此 strlen($name) 解析为 1。)

尝试设置值时删除 isset():

$name = $_POST['name'];

关于PHP if else 语句无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788721/

相关文章:

php - 需要连续检索标题、描述和上传的图像并使用 php 显示它们

Php SimpleXML 在父级的任何级别找到特定的子节点

php - 如何通过ajax函数调用获取动态值

php - 在 WooCommerce 中将选定的变体自定义字段显示为 pdf 链接文件

php - 取决于用户 ID

python - 使用 Django Python 创建动态表单并显示在自定义模板表中

php - Laravel 4.2 上传并验证多个图像

c# - 尝试将字段添加到表中时出现 Entity Framework 错误 3004

mysql - 如何在 Laravel 中绑定(bind)参数 sql 查询参数而不使用原始选择?

HTML:跨越多个 td 列的表单