0

我正在尝试通过 php 表单插入 mysql 数据库,但我遇到了一个问题,即只输入了第二个表单字段,而不是第一个。

编辑

这是重写后的代码。

HTML

<form action="submit.php" method="post">
First Name: <input name="first_name" type="text" size="20" maxlength="25"><br>
Last Name: <input name="last_name" type="text" size="20" maxlength="25"><br>
</form> 

PHP

$dbhost  = 'xx';
$dbname  = 'xx';
$dbuser  = 'xx';
$dbpass  = 'xx'; 
$con = mysqli_connect($dbhost, $dbuser, $dbpass);


$first_name = mysqli_real_escape_string($con, $_POST['first_name']);
$last_name = mysqli_real_escape_string($con, $_POST['last_name']);


$query = "INSERT INTO tbl_customerinfotest VALUES ('$first_name','$last_name');";
echo $query;

mysqli_close($con)

数据库连接正常..但仍然是同样的问题。名字给出了一个空值。在 $post 上打印给我: Array ( [first_name] => [last_name] => collingwood

编辑我将表单名称更改为没有 _ 的名字,现在它可以工作了吗?

另外,现在它是 sqli 是否更安全?安全的下一步是使用准备好的语句吗?

4

3 回答 3

3

我首先将发布的数据放入变量中,如下所示(我还添加了非常重要的 real_escape_string 函数):

$first_name = mysql_real_escape_string($_POST['first_name']);
$last_name = mysql_real_escape_string($_POST['last_name']);

请注意 $_POST 数组中的单引号

然后尝试查询:

INSERT INTO tbl_customerinfotest (first_name, last_name) VALUES ('$first_name','$last_name')";

最后,你应该使用 mysqli 或 PDO 函数,因为 mysql_* 已被弃用。

如果它仍然不起作用,请添加print_r($_POST);PHP 脚本的开头,以查看发布的数据是否正确并具有正确的名称。

于 2013-05-30T20:53:08.480 回答
1

从我看来它应该可以工作,但我认为有一部分你没有发布的代码把事情搞砸了。

在编写 PHP 代码时,您应该始终启用 PHP 警告!

像其他人提到的那样,您需要在使用数据之前对其进行清理,这意味着您必须测试它是否有任何不需要的输入(这是正则表达式函数非常方便的地方)

您的 HTML 代码也有未封闭的标签!

<input name="first_name" type="text" size="20" maxlength="25"><br>

应该

<input name="first_name" type="text" size="20" maxlength="25" /><br />
于 2013-05-30T22:23:37.053 回答
1

编辑:

作为对OP的编辑的回应,这对我来说很好:

索引.html

<form action="submit.php" method="post">
First Name: <input name="first_name" type="text" size="20" maxlength="25"><br>
Last Name: <input name="last_name" type="text" size="20" maxlength="25"><br>
<input type="submit" value="Submit">
</form>

提交.php

<?php 
    $dbhost  = '';
    $dbname  = '';
    $dbuser  = '';
    $dbpass  = ''; 
    $con = mysqli_connect($dbhost, $dbuser, $dbpass);


    $first_name = mysqli_real_escape_string($con, $_POST['first_name']);
    $last_name = mysqli_real_escape_string($con, $_POST['last_name']);


    $query = "INSERT INTO test.tbl_customerinfotest VALUES ('$first_name','$last_name');";
    echo $query;

    mysqli_query($con, $query);
    echo mysqli_error();

    mysqli_close($con)
?>

现在使用 mysqli 函数而不是已弃用的 mysql_* 函数要好得多。阅读此处的文档http://us2.php.net/manual/en/mysqli.overview.php以更详细地解释为什么应该使用 mysqli_* 而不是 mysql_*。

于 2013-05-30T20:47:41.133 回答