使用SQL进行PHP复选框表单验证


PHP Checkbox Form Validation with SQL

我有一个mySQL表,其中包含电影的用户评论行。除"点赞"列外,所有列a都是函数列。"点赞"列是一个布尔值。这个

该表必须显示在我的网站上,将布尔值转换为"是"或"否"。这是表格的代码:

while($review = $reviews->fetch_object("Review")) {
    $liked =  $review->liked;
    $convert = ($liked) ? 'yes' : 'no' ;
    echo "<tr> <td>{$review->reviewer} </td> ";
    echo "<td>{$review->comment} </td>";
    echo "<td> $convert </td></tr>";    

正如您所看到的,转换是有效的。

该页面还包含一个表单,用户可以在其中提交评论。使用复选框,用户可以"检查"他们是否喜欢这部电影,或者如果不喜欢就不检查。

<div class="form-group">
                    <label for="liked" class="col-xs-2 c">Did you like this film?:</label>
                    <div class="col-xs-10">
                    <input name="liked" type="checkbox" value="1" > Tick yes if you did
                    </div>
                </div>

在一个单独的PHP文件中;'流程审查',我使用INSERT查询将新行插入表中。

if(isset($_POST['name']) && isset($_POST['comment']) && isset($_POST['film_id']))
{
$reviewer = $_POST['name'];
$comment = $_POST['comment'];
$film_id = $_POST['film_id'];
    if(isset($_POST['liked']))
    {
    $liked = $_POST['1'];
    }
    else 
    {
    $liked = $_POST['0'];
    }
$db->query("INSERT INTO review (film_id, reviewer, liked, comment) VALUES('$film_id', '$reviewer', '$liked', '$comment')");
header('Location: show-film.php?id='.$film_id);
}
else{       
    $name = null;
    echo "no name supplied";
}

除"点赞"字段外,其他所有字段都有效。正如您所看到的,我曾尝试在初始if语句中使用if语句,如果复选框被选中,则返回"1",如果复选复选框未被选中,返回"0"。然而,当我勾选该框时,该表仍然返回"否"。即使我更改$convert,使两个值都为"yes",它仍然返回no,这就引出了一个问题,即它从哪里得到"no"。

这是一张表格的图像,可以直观地显示我在这里使用的内容

您试图插入不存在的值。

将您的if条件替换为:

if(isset($_POST['liked']) && $_POST['liked'] == 1)
{
$liked = 1;
}
else 
{
$liked = 0;
}

除此之外,你还面临着注射攻击。

你应该使用事先准备好的陈述。

至少运行通过mysqli_real_escape_string传递给数据库的每个变量。