PHP& MySQL更新表不起作用

时间:2013-04-04 18:15:37

标签: php mysql database

所以我正在尝试做一个简单的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似乎没有更新)

3 个答案:

答案 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 / $积分吗?看起来你根本没有增加它。你所说的只是一个脚本中的$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'"