0

所以我试图做一个简单的 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 我通常会在由于我的脚本中的一些错误而无法解释(或其他)PHP 代码时得到它:数据库/表没有更新(当我运行脚本时没有抛出错误,但数据库似乎没有更新)

4

3 回答 3

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() );

如果查询失败,最后一部分将输出错误消息。(请注意,我删除了第一行末尾的分号 (;),因此“or die”是同一个句子的一部分。

  • 编辑 你真的在提高 $pts / $points 吗?看来你根本不增加它。您所说的只是$pts=$_COOKIE["points"];在一个脚本中,而只是$points;在另一个脚本中。不应该至少$pts++;在第一个脚本中的某个地方吗???(设置 $pts 之后和运行更新查询之前。)
于 2013-04-04T18:28:54.407 回答
1

在第一个脚本中,您缺少 ")" 结束while语句:

$result=mysql_query("SELECT * FROM users"));
而($row=mysql_fetch_array($result){

于 2013-04-04T18:31:00.027 回答
0

发生了什么错误/问题?在处理 MYSQL 更新时,尝试回显 MYSQL 调用总是一个好主意,例如:

$test_call = "UPDATE  \"users\"  SET  \"pts\" =\"" . $pts . "\" WHERE name=\"" . $name . "\"");

echo $test_call;

这样您就可以准确地看到发送到 MYSQL 的内容,并可以在 phpMyAdmin 或 MYSQL 查询浏览器之类的工具中试用结果。将有助于缩小问题范围。

此外,您可以使用单引号使相同的更新更容易一些,如下所示:

$pts = mysql_real_escape_string($pts);
$name = mysql_real_escape_string($name);
"UPDATE `users`  SET  `pts` = '$pts' WHERE `name` = '$name'"
于 2013-04-04T18:21:33.350 回答