使用SQL进行PHP Checkbox表单验证

时间:2016-01-05 14:35:34

标签: php sql validation sql-insert

我的mySQL表包含多行电影的用户评论。除“喜欢”列外,所有列a都是有效的。 'likes'列是一个布尔值。 这个

该表必须显示在我的网站上,将布尔值转换为“是”或“否”。以下是该表的代码:

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'。

这是表格的图像,可以直观地展示我在这里工作的内容

1 个答案:

答案 0 :(得分:1)

您正在尝试插入不存在的值。

将if条件替换为:

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

除此之外,你还要打开注射攻击。

您应该使用prepared statements

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