所以我正在尝试创建一个将数据放入表中的表单,然后让它工作,但当它转到表时,它只是创建空行。这是我的代码,请帮帮我。
form.php的
<form action="tableinsert.php" method="post">
First Name:<input type="text" name="fname"> <br/>
Last Name:<input type="text" name="lname"><br/>
Username:<input type="text" name="uname"><br/>
Password:<input type="text" name="password"><br/>
Email:<input type="text" name="email"><br/>
</form>
tableinsert.php
<?php
$sc = mysqli_connect ("localhost" , "dbname" , "password");
if (mysqli_errno($sc))
{
echo "Sorry, I couldn't connect to the database. If you keep getting this error, please email the webmaster at natashaharrell@hotmail.com " . mysql_error;
}
$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('$_POST[fname]' , '$_POST[lname]' , '$_POST[uname]' , '$_POST[password]' , '$_POST[email]' )";
if (!mysqli_query($sc, $si))
{
echo "Sorry there seems to be a problem: " . mysqli_errno($sc) ;
}
else
{
echo "1 record added.";
}
mysqli_close($sc);
?>
答案 0 :(得分:4)
试试
$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('".$_POST["fname"]."' , '".$_POST["lname"]."' , '".$_POST["uname"]."' , '".$_POST["password"]."' , '".$_POST["email"]."' )";
答案 1 :(得分:1)
您可能会获得空行,因为表单填充了空值并且每次加载页面时都会自动提交。你应该使用提交按钮。
答案 2 :(得分:1)
使用mysqli prepare()http://php.net/manual/en/mysqli.prepare.php将数据插入到SQL查询中。 新手可以做出很多简单的错误,使他们的代码对安全问题有所了解,这就是为什么mysql_ *已经被折旧了
<?php
/* create a prepared statement */
if ($stmt = $mysqli->prepare("INSERT INTO sdb_users (fname, lname, uname, password, email) VALUES ( ?, ?, ?, ?, ? )")) {
/* bind parameters for markers */
$stmt->bind_param("s", $_POST["fname"]);
$stmt->bind_param("s", $_POST["lname"]);
$stmt->bind_param("s", $_POST["uname"]);
$stmt->bind_param("s", $_POST["password"]);
$stmt->bind_param("s", $_POST["email"];
/* execute query */
$stmt->execute();
?>
答案 3 :(得分:1)
替换此
$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('$_POST[fname]' , '$_POST[lname]' , '$_POST[uname]' , '$_POST[password]' , '$_POST[email]')";
有了这个:
$si = 'INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ("' . $_POST['fname'] . '", "' . $_POST['lname'] . '" , "' . $_POST['uname'] . '", "' . $_POST['password'] . '", "' . $_POST['email'] . '")';
这解决了你的实际问题,但是另外,在MySQLi的字符串转义函数中包装每个POST值(我是PDO用户,但我相信它是MySQLi :: real_escape_string)。这有助于保护您免受SQL注入。
它不工作的原因是你没有把数组键放在引号中。我从双引号更改为单引号,因为它更容易转义值并保存PHP必须处理魔术引用的字符串。
答案 4 :(得分:1)
首先,将从表单字段获取的值存储到变量中是一种约定。去做。然后,您必须清除从文本字段中获得的值。基本上你必须清除所有意想不到的东西,如SQL注入(复杂的东西)。为此,您必须使用MySQL real escape string。完成后,将变量替换为早期变量的位置,例如$ _POST ['fname']或$ _POST ['lname']。
希望在此之后你会有一个完全有效的脚本。
答案 5 :(得分:0)
您在查询中使用的值不正确。试试这种方式。
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$uname = $_POST['uname'];
$pwd = $_POST['password'];
$email = $_POST['email']
$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('$fname' , '$lname' , '$uname' , '$pwd' , '$email' )";
编辑: 在插入之前使用mysql_real_escape_string()函数对数据进行整理。