Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法为用户创建安全的数据更新方式_Php_Database_Mysqli_Login - Fatal编程技术网

Php 无法为用户创建安全的数据更新方式

Php 无法为用户创建安全的数据更新方式,php,database,mysqli,login,Php,Database,Mysqli,Login,我正在为用户提供一种编辑数据的方式。我的第一种方法是有效的,但后来我想起它是非常不安全的,我不应该直接将数据插入数据库;至少有人告诉我了。我试图通过执行值(?,,,,,?,?)的操作使其更安全,这样数据就不会直接进入,这在我的注册页面中似乎工作得很好(如果您愿意,我可以包括该页面) 首先,这里是我的原始更新数据页面,它工作正常,但没有使用(?,,,?,?)方法: 这是我试图做的,以使它更安全,但这似乎不起作用。具体而言,$query=“UPDATE usertable SET usertable

我正在为用户提供一种编辑数据的方式。我的第一种方法是有效的,但后来我想起它是非常不安全的,我不应该直接将数据插入数据库;至少有人告诉我了。我试图通过执行值(?,,,,,?,?)的操作使其更安全,这样数据就不会直接进入,这在我的注册页面中似乎工作得很好(如果您愿意,我可以包括该页面)

首先,这里是我的原始更新数据页面,它工作正常,但没有使用(?,,,?,?)方法:

这是我试图做的,以使它更安全,但这似乎不起作用。具体而言,
$query=“UPDATE usertable SET usertable(SkypeID、Email、Region、CRank、CRank)值(?、、?、?)其中UserID='$UserID'似乎是个问题,尽管语法对我来说很好

if(isset($_POST['submit'])) { 
    $userid=$_SESSION['userid'];
    $skype=$_POST['skype'];
    $email=$_POST['email'];
    $region=$_POST['region'];
    $crank=$_POST['league1'];
    $drank=$_POST['league2'];
        if(empty($skype) || empty($email) || empty($crank) || empty($drank) || empty($region))
        {
            echo "Cannot leave any field blank";
        }       
        else
        {   
            $host= "localhost";
            $dbname = "boost";
            $user = "root";
            $pwd = "";
            $port=3306; 

            try
            {
                $mysqli= new mysqli($host, $user, $pwd, $dbname,$port);
                if ($mysqli->connect_error) {
                die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
            }
            $query = "UPDATE usertable SET usertable(SkypeID,Email,Region,CRank,DRank) VALUES (?,?,?,?,?) WHERE UserID = '$userid'";
            $stmt = $mysqli->prepare($query);
            $stmt->bind_param("sssss",$skype,$email,$region,$crank,$drank); 
            $stmt->execute();
            $iLastInsertId=$mysqli->insert_id; 
            header('Location: http://localhost/Boost/account.php');
            $stmt->close(); 
            $mysqli->close();
        } catch (mysqli_sql_exception $e) { 
        throw $e; 
    } 
  }
}

所以我不确定问题出在哪里。根据我使用PHP的经验,语法应该很好,但我肯定遗漏了一些东西。

事实上,它非常简单,您从

$query = "UPDATE usertable SET SkypeID = '$skype', Email = '$email', Region = '$region', CRank = '$crank', DRank = '$drank' WHERE UserID = '$userid'";

在重写时,您似乎混淆了INSERT语句和UPDATE语句,因此为了修复此问题,只需将旧语句与新样式一起使用即可

$query = "UPDATE usertable SET SkypeID = ?, Email = ?, Region = ?, CRank = ?, DRank = ? WHERE UserID = $userid";

其实很简单,你从

$query = "UPDATE usertable SET SkypeID = '$skype', Email = '$email', Region = '$region', CRank = '$crank', DRank = '$drank' WHERE UserID = '$userid'";

在重写时,您似乎混淆了INSERT语句和UPDATE语句,因此为了修复此问题,只需将旧语句与新样式一起使用即可

$query = "UPDATE usertable SET SkypeID = ?, Email = ?, Region = ?, CRank = ?, DRank = ? WHERE UserID = $userid";

你在使用什么数据库?SQL更新值语法是不寻常的。你确定它有效吗?为什么要改变以前更传统的语法?请尝试更新usertable SET SkypeID=?、Email=?、Region=?、CRank=?、waked=?其中UserID='$UserID'
您是否收到任何错误消息?通常这些都有助于理解错误。@Matt谢谢,这很有效!你在使用什么数据库?SQL更新值语法是不寻常的。你确定它有效吗?为什么要改变以前更传统的语法?请尝试更新usertable SET SkypeID=?、Email=?、Region=?、CRank=?、waked=?其中UserID='$UserID'您是否收到任何错误消息?通常这些都有助于理解错误。@Matt谢谢,这很有效!哦,你说得对。我以为他们会是一样的。我改成那样了。然而,当我更改代码时,我得到了一个错误:未捕获的异常“mysqli\u sql\u exception”带有消息“Duplicate entry”?“对于key”Email“Nevermind,@Matt”的代码工作正常。奇怪的是,我想(')不应该在那里?我甚至不知道还有什么正确的没有引号,我已经编辑了我的答案以反映更新的值(我很抱歉从您的原始脚本中复制粘贴工作)。哦,您的权利。我以为他们会是一样的。我改成那样了。然而,当我更改代码时,我得到了一个错误:未捕获的异常“mysqli\u sql\u exception”带有消息“Duplicate entry”?“对于key”Email“Nevermind,@Matt”的代码工作正常。奇怪的是,我想(')不应该在那里?我甚至不知道还有什么正确的没有引号,我已经编辑了我的答案,以反映更新后的值(黑客复制和粘贴工作从您的原始脚本对我的一部分,我道歉)。