【问题标题】:PHP Update MySQL DB with AJAX call isn't doing anything使用 AJAX 调用的 PHP 更新 MySQL DB 没有做任何事情
【发布时间】:2013-05-31 00:30:33
【问题描述】:

我正在尝试使用 PHP 和 AJAX 更新我的数据库中的字段

我已经测试并发现正在发送正确的数据,但处理更新的 PHP 工作不正常。

所发生的只是我收到了有条件的else 响应。

我需要根据用户输入的内容更新数据库。

就像我说的,我得到的只是else 响应。

$youruname = $_POST['youruname'];
$selectedplayer = $_POST['selectedplayer'];
$selPlayerUname = $_POST['selPlayerUname'];

$flag = "";
$itStatus = "";

$checkit = mysqli_query($conn,"SELECT it FROM login WHERE uname='$selPlayerUname'");

while($row = mysqli_fetch_array($checkit))
{
    $itStatus = $row["it"];
}

if($itStatus == "not it")
{
    mysqli_query("UPDATE login SET it = CASE WHEN uname = '$youruname' THEN 'not it' ELSE 'it' END WHERE uname IN ('$youruname', '$selPlayerUname')");

    $flag = "success";
}
else if($itStatus == "it")
{
    $flag = "nope";
}
else
{
    $flag = "error";
}
echo json_encode(array("message" => $flag, "tagged" => $selectedplayer));

mysqli_free_result($checkit);
mysqli_close($conn);

【问题讨论】:

  • var_dump($iStatus) 它返回什么
  • 警告:您的查询容易受到 SQL 注入的攻击。请切换到prepared statements
  • 在你的更新查询中你有'SET it = CASE'如果CASE是一个列没有问题,但是,如果不是?此外,您的代码容易受到 sql 注入的影响。了解如何使用准备好的语句。
  • 一旦我开始工作,我将切换到准备好的语句。我已经了解了很多关于注射的知识。我知道我需要,但我只是一次解决一个问题。不过还是谢谢你的关心
  • 另一件事,向您的查询添加错误输出...例如,您可以使用...or die(mysqli_error());。它会告诉您您的查询问题是什么。请不要让安全漏洞留到最后。

标签: php ajax database json sql-update


【解决方案1】:

这里有一些令人困惑的地方。你有一个循环和循环后的条件。您的更新查询不应该在这样的循环中:

while($row = mysqli_fetch_array($checkit))
{
    $itStatus = $row["it"];


    if($itStatus == "not it")
    {
       mysqli_query("UPDATE login SET it = CASE WHEN uname = '$youruname' THEN 'not  it' ELSE 'it' END WHERE uname IN ('$youruname', '$selPlayerUname')");

       $flag = "success";
    }
    else if($itStatus == "it")
    {
       $flag = "nope";
    }
    else
    {
       $flag = "error";
    }
}

您的 $iStatus 从数据库中获取自循环以来的最后一个值,然后您签入条件

如果上述方法没有帮助,请检查您的 $_POST 值,看看它们是否为 blanknull 并在PHPMyAdmin 看看它是否真的返回任何东西。

【讨论】:

  • 我还需要将连接传递给mysqli_query。我没有那样做。但是,您提出了关于循环以及将查询放在何处进行更新的重要观点。因此,我感谢你。
【解决方案2】:

mysqli_query 要求您通过连接。

我没有这样做。

当我直接将值传递给查询时,我想通了。

非常感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2016-10-02
    相关资源
    最近更新 更多