为什么我的php表单在mysql中不断产生空行?

时间:2013-05-13 09:52:20

标签: php mysql sql

所以我正在尝试创建一个将数据放入表中的表单,然后让它工作,但当它转到表时,它只是创建空行。这是我的代码,请帮帮我。

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);

?>

6 个答案:

答案 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()函数对数据进行整理。