Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
记录字段增量值的PHP/SQL脚本未更新记录_Php_Mysql - Fatal编程技术网

记录字段增量值的PHP/SQL脚本未更新记录

记录字段增量值的PHP/SQL脚本未更新记录,php,mysql,Php,Mysql,HTML: 大家好。。。我正在做一个项目,在菜单上添加与名字相关的分数。上面显示了我的成绩径向菜单的HTML代码,也显示了我的相关SQL。我想在我的SQL数据库中的“总数”中添加一个分数值,并将投票数增加1。我不确定我的语法是否正确,因为数据库既没有增加投票数,也没有增加总分。 谢谢 编辑:我感到困惑的部分原因是b/c,当我进入mySQL控制台时,我可以执行几乎相同的命令(而“$grade”是一个数字),它可以工作。至少我应该得到一个错误,或者numvotes应该增加,但是没有 编辑2:这要归功

HTML:

大家好。。。我正在做一个项目,在菜单上添加与名字相关的分数。上面显示了我的成绩径向菜单的HTML代码,也显示了我的相关SQL。我想在我的SQL数据库中的“总数”中添加一个分数值,并将投票数增加1。我不确定我的语法是否正确,因为数据库既没有增加投票数,也没有增加总分。 谢谢

编辑:我感到困惑的部分原因是b/c,当我进入mySQL控制台时,我可以执行几乎相同的命令(而“$grade”是一个数字),它可以工作。至少我应该得到一个错误,或者numvotes应该增加,但是没有

编辑2:这要归功于拉杜。我的名字菜单不能正常工作。在SQL语句之后使用$die之后,我发现从下拉菜单中选择的名称被解释为整数,而不是名称。它将由数据库中的SQL名称填充。这是我的密码

if (isset($_POST['grade'])) {
                    $name = $_POST['name'];
                    $grade = $_POST['grade'];
                    $sql = "UPDATE grade SET 
                    total=total+'$grade',
                    numvotes=numvotes+1 WHERE
                    name='$name'";

因此,该名称正在输入,但仍没有更新。想法?

删除
之后

UPDATE grade SET total=total+'95', numvotes=numvotes+1 WHERE name='charlie'
在你的询问中

numvotes=numvotes+1
然后,要获取第一个用户的投票计数:

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;

这是未经测试的,但应该会让您走上正确的道路。

您在SQL查询中使用名称作为字符串。因此,请更改以下内容:

SELECT sum(grade) total_score FROM votes WHERE user_id = 1;
echo“$temp['name']”;
致:

echo.htmlspecialchars($temp['name']);
对于实时项目,始终使用when
echo()
ing something to browser,并始终使用when从用户输入编写SQL查询


例如,在一个实时项目中,您应该始终使用
$name=mysql\u real\u escape\u string($\u POST['name'])
而不是简单地使用
$name=$\u POST['name']

在您的示例中,这可能只是一个疏忽,但标记应该是

echo "<option>".htmlspecialchars($temp['name'])."</option>";

您的班级在该代码方面将获得A。为什么不使用名称和分数保存每次提交,然后您可以通过名称计算提交的分数,并通过一个简单的查询计算总分数。一个小提示-您的
标记中的value属性应该被引用。事实上,所有HTML属性都有引号。@ryan:这是一个很好的观点,但是我的数据库中会有很多冗余。随着它的建立,将有数千个等级与同一个名字相关联。@Tory Waterman这不是冗余,而是数据:)这似乎应该起作用,但我仍然得到同样的行为。然而,我已经改变了这一点。谢谢。它基本上存储用户的信息。然后,如果某个用户发生任何变化,例如名称,您的查询仍然有效,并且您将获得该用户的所有投票。它可以防止数据异常。这可能是一种更好的存储数据的方法;不幸的是,它没有解决OP的问题,即他的SQL似乎没有在数据库上执行。@Phoenix是真的,但以这种方式存储它最终会给我他想要的结果。我最初发布的代码是有效的,尽管我使用下拉菜单的方式有缺陷。请看上面。不客气。不要忘了在实时项目中使用
htmlspecialchars()
mysql\u real\u escape\u string()
。这样做只会带来好处。@Tory@Radu:实际上,在实际的、实时的项目中,您根本不应该连接SQL字符串;你应该改用。这样,您就不会不小心忘记转义字符串。
SELECT sum(grade) total_score FROM votes WHERE user_id = 1;
echo "<option value='".$temp['id']."'>".$temp['name']."</option>";
echo "<option>".htmlspecialchars($temp['name'])."</option>";
<form method="post">
if (isset($_POST['grade'])) {