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


Why php script is adding blank fields in table?

我有一个通过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吗?如果是的话,有人能帮我吗?

if表单和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();
}

从表面上看,您的代码看起来是正确的,但也有点小——您缺少了我在下面添加的一些关键功能:

<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更改为使用MySQLI,这是改进的

页面顶部的错误报告代码来自如何显示PHP错误?

<?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>

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

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

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

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

再次感谢马丁!!!