我的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'。
这是表格的图像,可以直观地展示我在这里工作的内容
答案 0 :(得分:1)
您正在尝试插入不存在的值。
将if条件替换为:
if(isset($_POST['liked']) && $_POST['liked'] == 1)
{
$liked = 1;
}
else
{
$liked = 0;
}
除此之外,你还要打开注射攻击。
您应该使用prepared statements。
至少运行您通过mysqli_real_escape_string
传递到数据库的每个变量。