我无法通过MYsql显示所选数据。我已将值存储在我的数据库的字段中,当用户单击提交按钮时,所选电影的评论应该填充但不是。
这是我在php中的表单代码。
echo "<tr><td>".$utitle."</td><td>".$ucategory."</td><td>".$ulength."</td><td>Thumbs up</td>t<td></td>";
echo '<form action = "videos.php" method="POST">';
echo "<td><input type='hidden' name='read' value=".$uid."><input type='submit' value='Read the Review' name='read'></td></tr></form>";
单击按钮时,这是我的代码。
if(isset($_POST['read'])){
$readReview = "SELECT Review FROM MyVideos WHERE id='$_POST[read]'";
$read = $con->query($readReview);
if($read->num_rows>0){
while($row=$read->fetch_assoc()){
echo "Review:".$row['Review']."<br/>";
}
}
$read->close();
};
感谢。非常感谢任何帮助。
答案 0 :(得分:4)
将我的评论写回答。
隐藏的输入和提交按钮都具有相同的名称属性。我称之为冲突。另外,它丢弃了第一个属性,即隐藏属性。
此外,您目前的代码向SQL injection开放。使用prepared statements或PDO with prepared statements,它们更安全。
$id = mysqli_real_escape_string($con, $_POST['read']);
$readReview = "SELECT Review FROM MyVideos WHERE id='id'";
$_POST['read']
需要更改为您为隐藏输入提供的名称属性。然而,准备好的陈述是要到这里的方式。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
参考文献:
面向对象的风格
string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )
程序风格
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
答案 1 :(得分:1)
在代码中,这一行:
$readReview = "SELECT Review FROM MyVideos WHERE id='$_POST[read]'";
read
周围缺少单引号。单引号出现在我们期望的位置:
if(isset($_POST['read'])){
^ ^
但除了添加单引号之外,代码易受攻击到 SQL注入。
将预备声明与绑定占位符一起使用。假设id
中的MyVideos
列是字符类型:
if(isset($_POST['read'])){
$readReview = 'SELECT Review FROM MyVideos WHERE id=?';
$sth=$con->prepare($readReview);
$sth->bind_param('s',$_POST['read']);
$sth->execute();
$sth->bind_result($review);
while($sth->fetch()){
echo "Review:".htmlentities($review)."<br/>";
}
$sth->close();
}
为了使模式更清晰,上面的代码示例并未检查prepare
或execute
的返回值。我们真的想检查prepare
的回报是否为假,我们不想在此致电bind_param
或execute
。
如果id
列是整数类型,则将's'
替换为'i'
(作为bind_param
中的第一个参数。
htmlentities
的使用假定Review
列的内容不包含不转义/编码的任何HTML标记。
答案 2 :(得分:0)
提交和隐藏字段相同(不确定通过更改检查)
更改查询: -
$readReview = "SELECT Review FROM MyVideos WHERE id='". $_POST[read] . "'"; // If id is varchar type or
$readReview = "SELECT Review FROM MyVideos WHERE id=$_POST[read]"; // If numric type