我有一个通过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吗?如果是这样,有人可以帮帮我吗?
答案 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 !!!