将表单中的数据存储到数据库中

时间:2014-05-11 16:57:21

标签: php mysql sql database forms

运行时没有显示任何错误,但它不会在表客户端上的bookstore_hw3数据库中存储任何内容。

表客户端上还有一列名为client_id并自动递增。这是问题吗?

有人可以查看此代码并提出问题所在吗?

这是HTML表单:

<form  action="clientData.php" method="post">
First Name: <input type='text' id='client_fname' /><br />
Last Name: <input type='text' id='client_lname' /><br />
City: <select id='client_city'>
    <option>Please Choose</option>
    <option>Prishtine</option>
    <option>Mitrovice</option>
    <option>Peje</option>
    <option>Gjakove</option>
        <option>Ferizaj</option>
        <option>Prizren</option>
</select><br />
Gender: <select id='client_sex'>
    <option>Please Choose</option>
    <option>F</option>
    <option>M</option>
</select><br />
Username(3-10 characters): <input type='text' id='client_username' /><br />
Password(3-10 characters): <input type='password' id='client_pass' /><br />
<input type='submit' value='Submit' />
<input type="reset" value="Clear" />
</form>

这是PHP代码:

<?php
include('db_login.php');
// Connect
$connection = mysql_connect($db_host, $db_username, $db_password);
if (!$connection){
  die("Could not connect to the database: <br />". mysql_error( ));
}

// Select the database
$db_select = mysql_select_db($db_database);
if (!$db_select){
  die ("Could not select the database: <br />". mysql_error( ));
}
$fname = isset($_POST['client_fname']);
$lname = isset($_POST['client_lname']);
$city = isset ($_POST['client_city']);
$sex = isset($_POST['client_sex']);
$username = isset ($_POST['client_username']);
$pass = isset($_POST['client_pass']);

$sql = "INSERT INTO clients (client_fname, client_lname, client_city, client_sex, client_username, client_pass) VALUES ('$fname','$lname','$city','$sex','$username','$pass')";

mysql_close();

echo "Data stored on database.";
?>

这是登录代码:

<?php
$db_host='localhost';
$db_database='bookstore_hw3';
$db_username='root';
$db_password='';
?>

4 个答案:

答案 0 :(得分:1)

第一个问题出在HTML代码中。 PHP通过属性name而不是id来识别HTML表单中的数据,因此您应该以这种方式修改HTML标记:

<input type='text' id='client_fname' name='client_fname' />

第二个问题是您的PHP代码。 替换这部分:

$fname = isset($_POST['client_fname']);
$lname = isset($_POST['client_lname']);
$city = isset ($_POST['client_city']);
$sex = isset($_POST['client_sex']);
$username = isset ($_POST['client_username']);
$pass = isset ($_POST['client_pass']);

用这个:

$fname = isset($_POST['client_fname']) ? $_POST['client_fname'] : null;
$lname = isset($_POST['client_lname']) ? $_POST['client_lname'] : null;
$city = isset ($_POST['client_city']) ? $_POST['client_city'] : null;
$sex = isset($_POST['client_sex']) ? $_POST['client_sex'] : null;
$username = isset ($_POST['client_username']) ? $_POST['client_username'] : null;
$pass = isset ($_POST['client_pass']) ? $_POST['client_pass'] : null;

isset()仅检查变量是否存在并返回true / false。在我的代码中,语句isset(foo) ? foo : bar检查变量是否存在,如果是,则返回其内容,如果否,则返回null

第三个问题是您没有在数据库上执行SQL查询。所以在那里添加:

mysql_query($sql);

此外,您的PHP代码容易受到SQL注入攻击,应该修复(您可以在这篇文章中阅读更多相关内容:How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

问题在于:

$fname = isset($_POST['client_fname']);
$lname = isset($_POST['client_lname']);
$city = isset ($_POST['client_city']);
$sex = isset($_POST['client_sex']);
$username = isset($_POST['client_username']);
$pass = isset ($_POST['client_pass']);

所有isset确实返回1(true)或0(false),因此您要将数据值设置为10。所以它应该是这样的:

$fname = isset($_POST['client_fname']) ? $_POST['client_fname'] '';
$lname = isset($_POST['client_lname']) ? $_POST['client_lname'] '';
$city = isset ($_POST['client_city']) ? $_POST['client_city'] '';
$sex = isset($_POST['client_sex']) ? $_POST['client_sex'] '';
$username = isset($_POST['client_username']) ? $_POST['client_username'] '';
$pass = isset($_POST['client_pass']) ? $_POST['client_pass'] '';

请注意isset([something]) ? [something] : '';的格式,它是一个等于[check something] ? [if true do this] : [if false do this]的三元运算符。它基本上是一个简单的if / else位逻辑,但在一个紧凑的行中。

此外,您设置了查询但从未运行它:

$sql = "INSERT INTO clients (client_fname, client_lname, client_city, client_sex, client_username, client_pass) VALUES ('$fname','$lname','$city','$sex','$username','$pass')";

所以应该这样:

$sql = "INSERT INTO clients (client_fname, client_lname, client_city, client_sex, client_username, client_pass) VALUES ('$fname','$lname','$city','$sex','$username','$pass')";
mysql_query($sql, $connection);

答案 2 :(得分:0)

您使用的html属性错误,您应该使用name属性。例如:

<select name='client_city'>

代码

$fname = isset($_POST['client_fname']);

错误是因为函数isset返回true或false如果参数是否为isset。

所以插入的查询是

"INSERT INTO clients (client_fname, client_lname, client_city, client_sex, client_username, client_pass) VALUES ('false','false','false','false','false','false')";

答案 3 :(得分:0)

使用isset函数不正确。

您可以使用如下所示:

    $fname = "";                             // default for var for insert statement    
    if (isset($_POST['client_fname']))       // check if the field if not emprty
    {
        $fname = $_POST['client_fname']      // set the var for insert statement
    }

使用与其他字段相同的方法。 希望能帮助到你。 西蒙