我正在制作一个通过提交表单收集用户评论的网站,然后将它们全部输出到可以从1-10评分的页面上。我在评分系统部分遇到了麻烦。
我有一个带有单选按钮的表单,用于我的评级,它通过'SendRating.php'发送值。我还想发送一个以前使用的变量,它是与特定评论和特定评级相关联的"id"。我试图使用隐藏的输入来做到这一点,但我似乎无法得到语法正确,无论我尝试我似乎得到一个错误。
我将展示我的两个php文件:
<?php
$con=mysqli_connect("host","me","pwd","base");
// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query= "SELECT id, comment, date_made, rating FROM table ORDER BY id DESC LIMIT 15";
$result=mysqli_query($con, $query);
while ($row=mysqli_fetch_array($result))
{
$date=$row['date_made'];
$id=$row['id'];
$num_id=intVal($id);
$current=$row['rating'];
echo '<div id="text" onpaste="return false"; oncut="return false"; readonly>';
echo '<div id="text2">';
echo "Submitted: ";
echo date('l jS F Y H:i:s ',strtotime($date));echo ' '; echo ' ';
echo ' '; echo "No: "; echo $row['id'];
echo '</div>';
echo '<br>';
echo nl2br($row['comment']);
echo '<br>'; echo '<br>';
echo '</a>';
//FOOT
echo '<div >';
echo '<form id="radio" name="input_rating" action="SendRating.php" method="post" >';
echo '<input type="hidden" name="id" value="'$id'" >';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="1">1';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="2">2';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="3">3';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="4">4';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="5">5';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="6">6';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="7">7';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="8">8';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="9">9';
echo '<input id="radio" type="radio" name="rating" onclick="this.form.submit()" value="10">10';
echo ' '; echo ' '; echo ' '; echo "Rating: ";
echo ' ';
echo "$current";
echo '</form>';
echo '</div>';
//END FOOT
echo '</div>';
echo '<p></p>';
}
?>
表单操作由以下操作处理(或者如果一切正常的话):
<?php
$con2=mysqli_connect("host","me","pwd","base");
// Check connection
if (mysqli_connect_errno($con2))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$value=$_POST['rating'];
$id=$_POST['id'];
mysqli_query ($con2, "UPDATE table SET totalraters = totalraters + 1 WHERE id='$id' ");
mysqli_query ($con2, "UPDATE table SET ratingsum = ratingsum + '$value' WHERE id='$id' ");
$query2 = mysqli_query ($con2, "SELECT FROM table ratingsum, totalraters WHERE id = '$id' ");
$result2 = mysqli_query($con2, $query2);
$row2 =mysqli_fetch_array($result2);
$ratingsum=$row2['ratingsum'];
$totalraters=$row2['totalraters'];
$current = $ratingsum/$ratingtotal;
mysqli_query ($con2, "INSERT INTO table rating VALUE '$current' WHERE id='$id' ");
include ('/index.html')
?>
include页应该将用户带回到更新评级的起始页。
ratingsum是给出的评分的总和,totalraters是进行评分的人数。$current应该是给出当前评级的平均值。
我现在遇到的麻烦是
echo '<input type="hidden" name="id" value="'$id'" >';
我似乎无法从一个地方获得id到另一个地方以在进一步的查询中使用。这一行出现了语法错误。感谢收到的帮助,相信我已经尝试了所有正确的解决方案!!请使用过程,因为我是新手,不能理解面向对象的所有…它让我头疼;-)
是这样做的:
echo '<input type="hidden" name="id" value="' . $id . '" >';
看到字符串和变量之间的点了吗,他们说要合并它们。这个是不正确的:
echo '<input type="hidden" name="id" value="$id" >';
因为单引号忽略变量。感谢michi
和lemondrop
的提示!
改进@ivan的答案…是的,他是正确的,但是他给出的无效代码可能会产生意想不到的输出/错误…他:
echo '<input type="hidden" name="id" value="' . $id . '" >';
你可能会遇到一个Notice: Undefined Index $id
,所以最好处理抛出的错误,我能想到的最好的方法是,当你想打印HTML时,退出你的PHP标签:
?>
<input type="hidden" name="id" value="$id" >
<?php
....
但是,处理一个可能的未定义索引(同时仍然超出你的PHP标签)
<input type="hidden" name="id" value="<?php if (isset($id)){ echo $id; } ?>">
这将告诉PHP只在id设置的情况下输出id,这将最小化可能的未定义索引错误。