使用表单将更新的数据添加到MySQLi

时间:2014-01-16 03:36:36

标签: php mysqli

我是PHP的新手,感谢我收到的所有帮助。

好的,所以我现在明白,只需重新提交表单就不会过度写入数据库中之前的任何数据,而是在重新提交for之前结束的内容。

我想知道如何设置它以便数据库更新需要使用新数据进行更新的数据。

我的表格100%罚款,除了我想要解决的一些事情,这是其中之一。我已经浏览了谷歌和一切,但我无法理解我发现的任何事情,因为所有的答案都不同,而且我的问题没有答案。

if(isset($_POST["signupbtn"])) {
    if ($log_username) {
        /// getting data from submitted form into local variables
        $x = preg_replace('#[^a-z 0-9]#i', '', $_POST['xbox']);
        $p  = preg_replace('#[^a-z 0-9]#i', '', $_POST['psn']);
        $s = preg_replace('#[^a-z 0-9]#i', '', $_POST['steam']);
        $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));
        // DUPLICATE DATA CHECKS FOR GAMER PROFILES
        $sqli = "SELECT username FROM player WHERE xbox='$x' LIMIT 1";
        $query = mysqli_query($db_conx, $sqli); 
        $x_check = mysqli_num_rows($query);
        // -------------------------------------------
        if ($x_check > 0){ 
            echo "Xbox Gamer-Tag already linked to a user on this website";
            exit();
        } else if (is_numeric($x[0])) {
            echo 'Xbox Gamer-Tag cannot begin with a number';
            exit();
        }
        $sqli = "SELECT username FROM player WHERE psn='$p' LIMIT 1";
        $query = mysqli_query($db_conx, $sqli); 
        $p_check = mysqli_num_rows($query);
        // -------------------------------------------
         if ($p_check > 0){ 
            echo "PSN User already linked to a user on this website";
            exit();
        } else if (is_numeric($p[0])) {
            echo 'PSN User cannot begin with a number';
            exit();
        }
        $sqli = "SELECT username FROM player WHERE steam='$s' LIMIT 1";
        $query = mysqli_query($db_conx, $sqli); 
        $s_check = mysqli_num_rows($query);
        // FORM DATA ERROR HANDLING
         if ($s_check > 0){ 
            echo "Steam account already linked to a user on this website";
            exit();
        } else if (is_numeric($s[0])) {
            echo 'Steam account cannot begin with a number';
            exit();
        } else  { $sqli = "INSERT INTO player (id, username, xbox, psn, steam, ip, created, lastupdated, notecheck)        
                VALUES ('$id','$log_username','$x','$p','$s','$ip',NOW(),NOW(),NOW())"; 
                $query = mysqli_query($db_conx, $sqli);
                   echo "Gamer Profiles Updated";
                }   

        exit();

            if (!file_exists("p_player/$log_username")) {
                mkdir("p_player/$log_username", 0755);
            } 


     }


}

正如你所看到的,那是我当前的php什么工作正常,除了我无法更新已提交的信息。

感谢您阅读本文,我希望有人能够为我提供完成此任务所需的知识。

再次感谢您抽出时间阅读本文。

2 个答案:

答案 0 :(得分:1)

我不能确定您希望在代码中执行实际更新的“位置”,因为您有多个位置可以检测现有帐户;但是,要实现的总体目标可以通过简单的UPDATE条款来完成。

例如,假设您有要更新的用户id。您的MySQL查询将看起来像UPDATE player SET ... WHERE id = ?。如果我们想用你正在使用的变量将它移植到PHP,你可以使用:

$stmt = $mysqli->prepare('
    UPDATE player
    SET xbox = ?, psn = ?, steam = ?, ip = ?, lastupdated = NOW()
    WHERE id = ?
');
$stmt->bind_param('ssssi', $x, $p, $s, $ip, $id);
$stmt->execute();
$stmt->close();

上面创建了一个准备好的语句并绑定了所有适当的变量。

如果您知道用户的id,但您想要更新他们的信息,例如,他们提交了一个重复的Steam帐户($s),那么您可以使用类似的东西:

$stmt = $mysqli->prepare('
    UPDATE player
    SET xbox = ?, psn = ?, ip = ?, lastupdated = NOW()
    WHERE steam = ?
');
$stmt->bind_param('ssss', $x, $p, $ip, $s);
$stmt->execute();
$stmt->close();

对于xbox和psn的情况,这也是可移植的;但是,我建议创建实际的用户跟踪,以便其他用户不会无意中覆盖不同用户的信息(如果它将是面向公众的,那就是)。

答案 1 :(得分:0)

我从我的一个脚本中获取了这个,基本上完成如下:

$_POST['query_var'];来自您的表单输入,类似于:

<input type="text" name="query_var">

然后,SQL部分:

$con=mysqli_connect("xxx","xxx","xxx","xxx");
$query= mysqli_real_escape_string($con, $_POST['query_var']);
$query_check = $con->query("SELECT * FROM `your_table` WHERE `column_to_check` = '". $query ."' "); 

if (mysqli_num_rows($query_check) > 0) 
{ 
echo "Data is the same";
}

else{
// do something else
}