PHP/SQL脚本增加一个记录字段的值不更新记录
<form>
<input type="radio" name="grade" value=95 /> A<br />
<input type="radio" name="grade" value=85 /> B<br />
<input type="radio" name="grade" value=75 /> C<br />
<input type="radio" name="grade" value=65 /> D<br />
<input type="radio" name="grade" value=50 /> F
</form>
PHP:
if (isset($_POST['grade'])) {
$name = $_POST['name'];
$grade = $_POST['grade'];
$sql = "UPDATE grade SET
total=total+'$grade',
numvotes=numvotes+1 WHERE
name='$name'";
大家好......我工作的一个项目,在菜单上添加与名称关联的等级。我的等级径向菜单的HTML代码位于上方,我的相关SQL也会显示出来。我想从等级中添加一个NUMBER VALUE到我的SQL数据库中的“total”,并将投票数增加1.我不确定我的语法是否正确,因为数据库没有得到其投票或成绩的增加总。 谢谢!
编辑:为什么我感到困惑,这不起作用的部分原因是b/c当我进入mySQL控制台时,我可以做一个几乎相同的命令(其中'$ grade'是一个数字),它的工作原理。至少我应该得到一个错误,或者numvotes应该增加,但没有。
编辑2:信贷给拉杜捕捉此。我的名字菜单无法正常工作。在我的SQL语句后使用$ die之后,我发现从下拉菜单中选择的名称被解释为整数,而不是名称。它将由数据库中的SQL名称填充。这是我的代码。
<?php
$query = mysql_query("SELECT name, id FROM grade");
echo "<select name='name'>";
while ($temp = mysql_fetch_assoc($query)) {
echo "<option value='".$temp['name']."'>".$temp['name']." </option>";
}
echo "</select>";
?>
EDIT3:改变$temp['id']
到$temp['name']
后,我发现我现在die($sql)
读取:
UPDATE grade SET total=total+'95', numvotes=numvotes+1 WHERE name='charlie'
所以名字进去,但它仍然不会得到更新。想法?
您在SQL查询中使用名称作为字符串。所以改变如下:
echo "<option value='".$temp['id']."'>".$temp['name']."</option>";
到:
echo "<option>".htmlspecialchars($temp['name'])."</option>";
对于当前的一些项目,总是使用htmlspecialchars()
当echo()
荷兰国际集团的东西到浏览器,并总是使用mysql_real_escape_string()
构成从用户的SQL查询时输入。
例如,在一个实时项目中,您应始终使用$name = mysql_real_escape_string($_POST['name'])
而不是简单的$name = $_POST['name']
。
USERS
-----
id AUTO_INCREMENT
name
VOTES
-----
id AUTO_INCREMENT
user_id
grade
INSERT INTO votes (user_id, grade) VALUES (1, 95);
INSERT INTO votes (user_id, grade) VALUES (1, 85);
INSERT INTO votes (user_id, grade) VALUES (2, 75);
然后让计票的第一个用户:
SELECT count(*) total_votes FROM votes WHERE user_id = 1;
而得到的分数:
SELECT sum(grade) total_score FROM votes WHERE user_id = 1;
这是未经测试的,但应该让你在正确的轨道上。
很可能就是你的榜样监督,但标签应该是
<form method="post">
否则这种情况将永远不会触发,如表单默认使用GET方法
if (isset($_POST['grade'])) {
你的类将有直接与该代码的A。 – 2011-06-07 19:37:29
为什么不保存每个提交的名称和分数,然后您可以计算按名称提交的分数以及用一个简单的查询计算总分数。 – NightHawk 2011-06-07 19:41:41
小调 - 应该引用''标记中的值属性。实际上,所有的HTML属性都会得到引号。 – 2011-06-07 19:42:46