为什么php脚本在表中添加空白字段?

时间:2015-03-28 05:01:39

标签: php mysql

我有一个通过php连接到我的数据库的表单,当你提交表单时,它会在表中添加一个新条目,但所有字段在phpmyadmin中都是空白的。每次都会发生这种情况这个表格只是一个测试表格。

<form action="demo.php" method="post" />
<p>Name: <input type="text" name="name" /></p>
<p>Comment: <input type="text" name="comment" /></p>
<input type="submit" value="submit" />
</form>

这是php

<?php

define('DB_NAME', 'name');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link) {
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected) {
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$name = $_POST['name'];
$comment = $_POST['comment'];

$sql = "INSERT INTO test (name, comment) VALUES ('$name', '$comment')";

if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
}

mysql_close();
?>

我知道这不安全,但我很久没有完成php了。这可能是问题,它不是SQLi吗?如果是这样,有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

从表面上看,您的代码看起来是正确的,但也有点极少 - 您错过了我在下面添加的一些主要功能:

<form action="demo.php" method="post" enctype="application/x-www-form-urlencoded" />
<p>Name: <input type="text" name="name" /></p>
<p>Comment: <input type="text" name="comment" /></p>
<input type="submit" value="submit" />
</form>

显然,PHP名为demo.php,是吗?

我还改变了你的PHP使用MySQL i ,这是改进

页面顶部的错误报告代码来自 How do I get PHP errors to display?

<?php

   /*** 
    * First some debug output: 
    ***/
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

print "<pre>";
print_r($_POST);
print "</pre>";

define('DB_NAME', 'name');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$link) {
    die("Connection Error (" . mysqli_connect_errno() . ") ". mysqli_connect_error());
}


$name = mysqli_real_escape_string($link, $_POST['name']);
$comment = mysqli_real_escape_string($link, $_POST['comment']);

$sql = "INSERT INTO test (name, comment) VALUES ('$name', '$comment')";

mysqli_query($link, $sql) or die('Error ".__LINE__." : ' . mysqli_error($link));

澄清一些更改:您不需要MySQLi_close,因为连接会在脚本结束时自动关闭(如果这是文件的末尾,您也不需要关闭PHP标记)。

如果MySQL连接没有启动,我也扩展了错误输出。

我已将 real_escape_string 添加到自动转义特殊字符。

在页面顶部,您应该看到$_POST的输出显示传递给MySQL的所有值 - 是否已填充?

我添加了__LINE__魔术变量,该变量显示了行号错误。在更大的页面上使用它在此上下文中非常有用。

如果我现在可以提供反馈吗? ii)如果没有,你从页面得到什么通知?

更新

value元素添加到输入框中。

<form action="demo.php" method="post" enctype="application/x-www-form-urlencoded">
<p>Name: <input type="text" name="name" value="name text"/></p>
<p>Comment: <input type="text" name="comment" value="comment text"/></p>
<input type="submit" value="submit" />
</form>

从表单元素中删除结束斜杠

答案 1 :(得分:0)

如果表格和php代码在demo.php文件中写入 你应该检查$ _POST

否则 加载blog.php文件后,将空数据发送到mysql

真实代码:

if(isset($_POST["name"]) && $_POST["name"]!=""){
    define('DB_NAME', 'gei_demo');
    define('DB_USER', 'gei_ch');
    define('DB_PASSWORD', 'magnolias3');
    define('DB_HOST', 'localhost');

    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    $db_selected = mysql_select_db(DB_NAME, $link);

    if (!$db_selected) {
        die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
    }

    $name = $_POST['name'];
    $comment = $_POST['comment'];

    $sql = "INSERT INTO test (name, comment) VALUES ('$name', '$comment')";

    if (!mysql_query($sql)) {
        die('Error: ' . mysql_error());
    }

    mysql_close();
}

答案 2 :(得分:0)

好吧,我找到了问题的答案。在我将我的PHP更新到@Martin给我的那个之后我还有问题。然后我读了一篇说运行打印脚本的文章。所以这就是我在php文档的最后一行添加的内容:

print("<script> window.location='http://geiaus.net/test-form/'; </script>");

现在它正在将信息正确地添加到表中。我不知道为什么会有所作为,但这是解决方案,以防任何人遇到类似的问题。

再次感谢Martin !!!