Php表单不向数据库发送输入而不显示print_r

时间:2016-07-16 10:35:58

标签: php mysql

所以我有这个代码,它应该将名称和电子邮件地址发送到数据库。它不仅没有这样做,而且在我的第二行代码中,我想要print_r无论输入什么,我仍然得到一个空白屏幕。是否有设置显示我的代码中发生的错误,我已关闭或此代码是错误的?

//Only process the form if $_POST isn't empty
if(! empty($_POST)){
    print_r($_POST); exit;


//Connect to MYSQL
    $mysqli = new mysqli('localhost', 'root','','snippets');

//Check connection
    if($mysqli ->connect_error){
        die('Connect Error: '. $mysqli->connect_errno . ': ' . $mysqli->connect_error);
    }

//Insert data
    $sql = "INSERT INTO user(name, email) VALUES ('{$mysqli->real_escape_string($_POST['name'])}','{$mysqli->real_escape_string($_POST['email'])}' )";
    $insert = $mysqli->query($sql);

//Print reponse from MySQL
    if($insert){
        echo "Success! Row ID: {$mysqli->insert_id}";
    }else{
        die("Error: {$mysqli->errno}:{$mysqli->error}");
    }

//Close connection
    $mysqli ->close();
}
?>
<form method="post" action="">
    <input name="name" type="text">
    <input name="email" type="email">
    <input type="submit" value="Submit Form">
</form>

3 个答案:

答案 0 :(得分:1)

POST请求中未填充

$_POST。最可能的原因是您的PHP设置为不创建超级全局($_POST$_GET ...)。

修复程序可能位于php.ini文件中。打开该文件,然后查找设置variables_orderSee the docs)。我怀疑在配置文件中已经注释掉了(或者不存在)。将其设置为:

variables_order = "EGPCS"

如果您不确定活动php.ini的位置,请将您的PHP文件更改为以下代码:

<?php
phpinfo(); exit;

将显示有关您的安装的大量信息。 Loaded Configuration File的值将告诉您要编辑哪个文件来更改PHP设置。

如果其他所有方法都失败,您可以自行提取提交的值;它非常简单:

$args = []; //will hold the submitted arguments
parse_str(file_get_contents('php://input'),$args);

从那里开始,只需使用$args,就像使用$_POST一样。它包含您的表单输入。请注意,它还包含您在$_GET中通常会看到的输入,当&#34; GET&#34;请求

答案 1 :(得分:0)

原来我的WAMP服务器和Phpstorm提供的内置服务器之间存在冲突,这是我正在使用的IDE。因为@Beetlejuice怀疑我的php.ini文件中也存在问题。这应该是未启用的,并设置为On:; enable_post_data_reading = Off

感谢所有帮助过的人。

答案 2 :(得分:-1)

  

&#34; INSERT INTO用户(姓名,电子邮件)VALUES(&#39; {$ mysqli-&gt; real_escape_string($ _ POST [&#39; name&#39;])}&#39;,&# 39; {$ mysqli-&gt; real_escape_string($ _ POST [&#39; email&#39;])}&#39;)&#34;

尝试使用反斜杠&#34; name&#34;和&#34;电子邮件&#34;属性。这将减少报价中的歧义。大多数时候,这就是问题所在。

所以,它看起来像这样:

"INSERT INTO user(name, email) VALUES ('{$mysqli-
>real_escape_string($_POST[\'name\'])}','{$mysqli->real_escape_string($_POST[\'email\'])}' )"

但是,我认为最佳做法是使用&#34; real_escape_string&#34;在此查询之前。通常,在查询字符串中使用时不会运行php。所以,保存

$ mysqli-&gt; real_escape_string($ _ POST [&#39; name&#39;]在一个变量中 AND

$ mysqli-&gt; real_escape_string($ _ POST [&#39; email&#39;]在另一个变量然后,

将其添加到查询