与$ mysqli-> real_escape_string合作

时间:2015-08-20 23:37:34

标签: php

嘿,我搜索过但找不到我要找的答案。我的表单不会发布到我的数据库我开始得到sql注入所以我改变我的代码使用$mysqli->real_escape_string但它似乎不想仍然发布所有我得到的是代码中的错误任何帮助将是非常感谢。

<form action="" method="post">
<br/>
<input type="text" name="Key" class="dap_text_box" placeholder="Enter Key"/><br/>
<br/>
<input type="text" name="Name" class="dap_text_box" placeholder="Name"/><br/>
<br/>
<input type="text" name="Email" class="dap_text_box" placeholder="Email"/><br/>
<br/>
<input type="text" name="IP_s_" class="dap_text_box" placeholder="Enter IP"/><br/>
<br/>
<input type="submit" name="submit" value="Key Activation" class="sendbutton"/> </form> <hr/> </body> </html>

<?php

if (isset($_POST['submit'])) { 
     $mysqli = new mysqli("localhost", "root", "rkPJNwe0cI", "key");
     // Check 
     if ($mysqli->connect_error) {
         die("Connection failed: " . $mysqli->connect_error);
     }

     // Set charset for correct escaping
     $mysqli->set_charset('utf8');

     echo $_SERVER["REMOTE_ADDR"]; // mmm?

     $key   = $mysqli->real_escape_string($_POST['Key']);
     $IP    = $mysqli->real_escape_string($_POST['IP']);
     $name  = $mysqli->real_escape_string($_POST['Name']);
     $email = $mysqli->real_escape_string($_POST['Email']);
     $IP_s  = $mysqli->real_escape_string($_POST["IP_s_"]);

     // (ID, Key, Activated, IP, Banned)
     $sql = "INSERT INTO keys (ID, Key, Activated, IP, Banned, Name, Email)  VALUES ('$ID1', '$key', 1, '$IP', 0, '$name', '$email')";
    $sql1 = "SELECT ID, Key, Activated, IP, Name, Email FROM Keys";

    $sql = "UPDATE Keys set IP='$IP_s_', Name='$name', Email='$email', Activated='1' WHERE Key='$key'";
    if ($mysqli->multi_query($sql) === TRUE) {
         echo "Activated";
    } else {
        echo "Error";
     }

     $mysqli->close(); }

1 个答案:

答案 0 :(得分:0)

我看到的东西有很多不妥之处。评论太长了。

您使用multi_query()但只在$sql中定义了一个查询。您的insert语句和select语句似乎没有做任何事情,在调用multi_query()之前覆盖insert语句。

$ID1似乎没有为insert语句定义。

为什么不使用准备好的陈述?比试图逃避每个单独的字符串更容易和有效。