所以我正在尝试做一个简单的MySQL数据库/表更新,但有些东西不起作用,我无法弄清楚是什么。我会把代码:
morepoints.php(处理点的添加):
<?php
if(!isset($_COOKIE["name"]))
{
echo "<a href='index.php'>Username/points cookie not existent! Please login!</a>";
}
$con=mysql_connect("sqlserverip","name","password");
if(!$con)
{
echo "Error while connecting to the MySQL server: " . mysql_error();
}
mysql_select_db("gendb1",$con);
$name=$_COOKIE["name"];
$pts=$_COOKIE["points"];
mysql_query("UPDATE \"users\" SET \"pts\" =\"" . $pts . "\" WHERE name=\"" . $name . "\"");
echo "<div id='wrapper'>Updated database...checking if values match...</div>";
$result=mysql_query("SELECT * FROM users");
while($row=mysql_fetch_array($result)
{
if($row["name"]==$name)
{
if($row["pts"]==$pts)
{
echo "<a href=\"index.php\">Points awarded! Please login again.</a>";
mysql_close($con);
}
}
}
?>
如果你想要设置cookie的登录页面,这里就是
<?php
$con=mysql_connect("mysqlserverip","name","password");
if(!$con)
{
echo "Connection to the MySQL server failed successfuly! " . mysql_error();
}
mysql_select_db("gendb1",$con);
$result=mysql_query("SELECT * FROM users");
//Getting Login Form Data
$name=$_POST['u'];
$pass=$_POST['p'];
$points;
//$valid=1;
if($name=="" or $pass=="")
{
echo "<div id=\"wrapper\">Name/pass cannot be blank. <a href=\"javascript:history.go(-1)\">Try again</a></div>";
}
while($row=mysql_fetch_array($result))
{
if($row['name']==$name and $row['pass']==$pass)
{
setcookie("name",$row['name'],time()+300);
setcookie("points",$row['pts'],time()+300);
echo "<div id=\"wrapper\">Login successful! <a href=\"user.php\">Go to your page</a></div>";
goto done;
break;
}
}
echo "<script>history.go(-1);</script>";
done:
?>
解决:我得到的是HTTP错误500.0 - 内部服务器错误,错误代码:0x00000000 当我的srcipting中由于某些错误而无法解释(或其他)PHP代码时,我通常会得到它 STILL:数据库/表没有更新(运行脚本时没有错误,但DB似乎没有更新)
答案 0 :(得分:2)
使用反引号(`)代替引号(“)来指定数据库/表/列名称。 我之前在这个帖子中看过这个答案,但它已被删除。虽然这是一个正确的答案。
还要转义输入以防止sql注入。并检查查询是否正常运行。
最后检查查询是否执行正常。
所以改变
mysql_query("UPDATE \"users\" SET \"pts\" =\"" . $pts . "\" WHERE name=\"" . $name . "\"");
进入
mysql_query("UPDATE `users` SET `pts` =\"" . mysql_real_escape_string($pts) . "\" WHERE `name`=\"" . mysql_real_escape_string($name) . "\"")
or die ("Update failed: " . mysql_error() );
如果查询失败,最后一部分将输出错误消息。 (注意我在第一行末尾删除了分号(;),因此“或者死”是同一句话的一部分。
$pts=$_COOKIE["points"];
,而另一个脚本中只是$points;
。不应该在第一个脚本中的某处至少有$pts++;
??? (在设置$ pts之后和运行更新查询之前。)答案 1 :(得分:1)
在第一个脚本中你缺少“)”关闭而句子:
$ result = mysql_query(“SELECT * FROM users”));
而($行= mysql_fetch_array($结果){
答案 2 :(得分:0)
发生了什么错误/问题?在处理MYSQL更新时,尝试回显MYSQL调用总是一个好主意,例如:
$test_call = "UPDATE \"users\" SET \"pts\" =\"" . $pts . "\" WHERE name=\"" . $name . "\"");
echo $test_call;
通过这种方式,您可以准确地看到发送给MYSQL的内容,并可以在phpMyAdmin或MYSQL Query Browser中尝试结果。将有助于缩小问题范围。
此外,您可以使用单引号使相同的更新更容易,例如:
$pts = mysql_real_escape_string($pts);
$name = mysql_real_escape_string($name);
"UPDATE `users` SET `pts` = '$pts' WHERE `name` = '$name'"