2016-04-24 139 views
0

我正在努力将数据添加到mysqli数据库中。也许我只是把代码放在错误的地方,但没有任何信息添加到我的表单中。如果你能帮助我,那会很棒。谢谢。将php连接到mysqli数据库

PS我已经删除了部分原始代码,如错误消息。

<?php 

    $servername = "A"; 
    $username = "B"; 
    $password = "C"; 
    $dbname = "D"; 

if (isset($_POST["submit"])) { 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    //Check connection 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 

    $query = "INSERT INTO Form (name, email, message)". 
    "VALUES ('" . $name . "', '" . $email . "', '" . $message . "');"; 

    mysqli_query($query); 

    //close connection 
    mysqli_close($conn); 
} 
?> 
+0

你的代码是开放的SQL注入。我建议使用准备好的语句并绑定你的参数,否则黑客可能会像删除所有表一样,和/或检索表中的所有信息。 – Webeng

+1

旁注:前一段时间你已经给了几个答案。只要你把问题标记为已解决,就选择你想要的任何一个。否则,你的问题仍然被认为是开放/未解决的,其他人可能会试图发布更多的答案。以下是http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work然后返回到此处,并使用勾号/复选标记执行相同操作,直至变为绿色。这告诉社区,找到了解决方案。这就是*“Stack roll ...”* ;-)如果它们都不起作用,那么在答案下发表评论并指出任何错误。 –

回答

2

需要mysqli_query连接参数:

mysqli_query($conn, $query); 

此外,还需要使用mysqli_real_escape_string()防止SQL注入:

$name = mysqli_real_escape_string($conn, $_POST['name']); 
$email = mysqli_real_escape_string($conn, $_POST['email']); 
$message = mysqli_real_escape_string($conn, $_POST['message']); 
2

简单,你从来​​没有通过数据库连接到mysqli_query($query);

并确保您的POST数组包含值。

因此,mysqli_query($conn, $query);并检查错误。

咨询手册,请参阅这些以下链接http://php.net/manual/en/mysqli.error.phphttp://php.net/manual/en/function.error-reporting.php和应用,为您的代码。

您现在的代码对SQL injection开放。使用prepared statementsPDOprepared statements

还要确保这个条件语句就火了:

if (isset($_POST["submit"])) {...} 

如果你的提交按钮不成立的submit name属性(和所有其他POST阵列),那么什么都在那里将被执行。

即使:name="submit",name="name",name="email",name="message"并且表单确实使用POST方法。

错误报告将帮助你在这里。

error reporting添加到您的文件的顶部,这将有助于发现错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

旁注:显示错误应该只在分期完成,并且从不生产。

N.B .:你也应该检查空的领域,如果这是一个活的网站或打算上线。

如果用户没有输入任何内容,那么您可能会因此而导致错误/失败。

对这些输入使用条件!empty()

即:

if (isset($_POST["submit"])) { 

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){ 

    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    // Rest of your query here 

    } 

    else{ echo "One of the fields is empty."; exit; } 


} 
else{ echo "Submit is not set."; } 

脚注:

这是不确定你是如何下,如果一个Web服务器/ PHP运行此代码/ MySQL的安装和配置正确。

如果您访问的是file:///file.xxx而不是http://localhost/file.xxx,那么它会失败。

  • 它需要是后者。
+0

我认为你在'if(isset($ _ POST [“submit”])){...} \''' – Panda

+0

@luweiqi'结尾处不小心加了一个反勾。谢谢,我解决了这个问题。还在做一个额外的编辑。 *欢呼* ;-) –

+1

不客气! :) – Panda

0

而且我认为你需要使用`字符表和列名称,如果你没有。 (靠近键盘上的1,也用于简单的在计算器中的代码)。也许你使用了这个字符,但是stackoverflow不显示字符。

+0

蜱只在特殊情况下才需要,在OP的情况下;他们不是必需的。请阅读标识符限定符http://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html - 其他因素是表格/列名称,保留字,连字符等中的空格。 –

+0

但我不能'不执行任何查询而没有勾号。 :) – KamyarM

+0

*嗯... *我不明白你的意思。执行哪些查询*? –