【问题标题】:Get the wrong response得到错误的回应
【发布时间】:2017-07-14 16:34:13
【问题描述】:

我得到了以下代码,但没有发现错误。 当我执行它时,我总是得到“no_request”。

$username 等于 Reebal,$user 等于 Simon

Ajax/jQuery

$("#cancel_friend").click(function(e){
    var user = "<?php echo $user_username; ?>";
    var type = "cancel_friend"
    $.ajax({
        type: "POST",
        url: "../system/friend_system.php",
        data: {
            user: user,
            type: type
        },
        success: function(data, status){
            if(data == "friend_request_canceled"){
                $("#cancel_friend").css("display", "none");
            }else{
                $(".error_msg_container").html(data);
            }
        },
        error: function(){
            alert(data);
        }

friend_system.php

}else if($_POST['type'] == "cancel_friend"){
    $sql = "SELECT COUNT(id) friends WHERE user1 = '$username' AND user2 = '$user' AND accepted='0' LIMIT 1";
    $result = mysqli_query($conn, $sql);
    $request = mysqli_fetch_row($result);
    if($request[0] > 0){
        $sql = "DELETE FROM friends WHERE user1 = '$username' AND user2 = '$user' AND accepted='0' LIMIT 1";
        $result = mysqli_query($conn, $sql);
        mysqli_close($conn);
        echo "friend_request_canceled";
        exit();
    }else{
        echo "no_request";
        exit();
    }

这里是朋友表:

希望你能帮助我。

【问题讨论】:

  • 你在哪里设置$username?你试过调试你的代码吗?
  • $username 在另一个 php 文件中,我在其中检查当前登录的用户。是的,当我回显 $username 时,我得到 'Reebal'
  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 驱动程序使用带有绑定参数的预处理语句。 This post 有一些很好的例子。
  • 好的,谢谢您的建议。

标签: php jquery ajax mysqli


【解决方案1】:

现在在我的手机上,所以我看不太清楚,你的 SQL 查询不安全。使用 mysqli 或 pdo。 而你忘记了 FROM 你的 sql 查询,这是一个 sql 注入安全代码:

$con = new PDO("mysql:host=localhost;dbname=dbName" , "dbPassword","dbUsername"); // connecting with PDO
$query = $con->prepare("SELECT COUNT(id) FROM friends WHERE user1 = :username AND user2 = :username2 AND accepted = \"0\" LIMIT 1"); // Preparing a query
$query->bindParam(":username" , $username,  PDO::PARAM_STR); // binding parameters in a safe way
$query->bindParam(":username2",$username2,PDO::PARAM_STR); 
$query->execute();
$result = $query->fetchAll(); // fetching the result and putting it in result

记住更改变量并修改连接细节 如果它不起作用,请不要评论此评论

【讨论】:

  • 如果有人可以编辑我的评论让它看起来更好,那就太好了
  • 有效!谢谢先生。
  • 但是我可以使用 mysql_real_escape_string();代替变量?
  • 不,根本没有帮助
  • 真正的转义字符串只是转义字符,并不能保证注入安全
猜你喜欢
  • 2022-07-06
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2017-10-09
  • 2021-06-12
  • 2017-02-26
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多