0

我已经制作了一个注册脚本。该表单有 7 个字段。HTML代码如下,

<input type="text" id="user_name" />
<input type="password" id="user_password" />  
<input type="text" id="user_surname" />
<input type="email" id="user_email" />               
<input type="text" id="user_phone" />
<input type="text" id="user_address" />
<input type="text" id="user_pin" />
<input type="submit" value="Submit" />

相应的 PHP 代码 insert into 语句是

$query="INSERT INTO register 
VALUES      (

         user_name = '$user_name', 
         user_password = '$pass', 
         user_surname = '$surname', 
         user_email = '$email', 
         user_phone = '$phone', 
         user_address = '$address', 
         user_pin = '$pin') ";

$result = mysql_query($query,$con);
 if($result)
 {
 echo "Details updated successfully";
 }

查询工作正常。运行查询后,我收到了成功更新详细信息的消息。但是在我的 TABLE 中没有正确更新。在我的表中的所有列中只更新了 1(数字 1)。请帮我解决这个问题。提前致谢。

4

5 回答 5

5

您需要为您的 html 元素提供 name 属性。如果没有 name 属性,表单提交后将不会发布任何值。所以请尝试以下操作。记住,无论您提供什么作为 name 属性,它都将是 $_POST 数组的键。所以在表单提交后您的 php 尝试以下操作以查看通过您的表单提交的值是什么。然后在必要的编码后插入查询。

echo '<pre>';
print_r($_POST);
die();
<form method="post" action="">
<div class="line"><label for="user_name">Username *: </label><input type="text" id="user_name" name="user_name" /></div>
        <div class="line"><label for="user_password">Password *: </label><input type="password" id="user_password" name="user_password" /></div>  
        <div class="line"><label for="user_surname">Surname *: </label><input type="text" id="user_surname" /></div>
        <div class="line"><label for="user_email">Email *: </label><input type="email" id="user_email" name="user_email" /></div>               
        <div class="line"><label for="user_phone">Telephone: </label><input type="text" id="user_phone" name="user_phone" /></div>
        <div class="line"><label for="user_address">Address *: </label><input type="text" id="user_address" name="user_address" /></div>
        <div class="line"><label for="user_pin">Post Code *: </label><input type="text" id="user_pin" name="user_pin"/></div> <br>
        <div style="margin-left:50px;"><input type="submit" value="Submit" /></div>
   </form>

于 2013-10-28T10:34:58.753 回答
2

使用以下

<?php

$user_name = $_POST['user_name'];
$pass = $_POST['user_password'];
$surname = $_POST['user_surname'];
$email = $_POST['user_email'];
$phone = $_POST['user_phone'];
$address = $_POST['user_address'];
$pin = $_POST['user_pin'];


$query="INSERT INTO register 
         (`user_name`,`user_password`,`user_surname`,`user_email`,`user_phone`,`user_address`,`user_pin`) values ('".$user_name."','".$pass."','".$surname."','".$email."','".$phone."','".$address."','".$pin."')";

$result = mysql_query($query,$con);
 if($result)
 {
 echo "Details updated successfully";
 }
于 2013-10-28T10:47:31.603 回答
1

对于您的变量:您必须给输入元素一个名称属性,否则它将在 PHP 中不可用。在 PHP 方面,它们不会神奇地显示为变量(希望它们已register_globals启用并且存在巨大的安全风险),它们将显示在$_GETor$_POST中,具体取决于您的形式。

对于您的 SQL:您正在混合两种语法,请使用以下任一语法:

INSERT INTO register (user_name,user_password,user_surname,user_email,user_phone,user_address,user_pin) VALUES ('$user_name','$pass','$surname','$email','$phone','$address','$pin')

或者

INSERT INTO register SET user_name='$user_name',user_password='$pass',user_surname='$surname',user_email='$email',user_phone='$phone',user_address='$address',user_pin='$pin'

注意:我不知道 DEFAULT 应该做什么/是什么。mysql_*功能正在被弃用,使用mysqli_*或 PDO 代替。查看准备好的语句以防止 MYSQL 注入。

于 2013-10-28T10:38:45.970 回答
0

如前所述,您的问题是您没有name为输入设置属性,这意味着没有任何内容从您的表单发布到服务器。一旦你修复了这个问题,你还应该修改你的后端 mysql 代码以使用 mysqli 和准备好的语句来提高安全性,因为 mysql_ 函数已被弃用。这是您当前查询的示例:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_database');

$stmt = $mysqli->prepare("INSERT INTO register 
(user_name,user_password,user_surname,user_email,user_phone,user_address,user_pin) 
VALUES (?,?,?,?,?,?,?)");

$stmt->bind_param('sssssss', 
    $post_user_name,$post_user_password,$post_user_surname,$post_user_email,
    $post_user_phone,$post_user_address,$post_user_pin);

// Quick and easy way to get all of your POST array values 
    // set to prefixed variables:
extract($_POST, EXTR_PREFIX_ALL, "post");

// you can overwrite any of the variables before running the query, like:

$post_user_password = password_hash($post_user_password, PASSWORD_DEFAULT);

$stmt->execute();

if( $stmt->affected_rows ) {
    echo "Details updated successfully";
}
于 2013-10-28T11:38:58.857 回答
0

尝试这个。

<?php
$con=mysql_connect("db_server","$db_user","$db_pass");//Establishing Database connection
mysql_select_db("$db_name",$con);//Selecting required database
$user_name = $_POST['user_name'];
$pass = $_POST['user_password'];
$surname = $_POST['user_surname'];
$email = $_POST['user_email'];
$phone = $_POST['user_phone'];
$address = $_POST['user_address'];
$pin = $_POST['user_pin'];


$query="INSERT INTO register 
         (`user_name`,`user_password`,`user_surname`,`user_email`,`user_phone`,`user_address`,`user_pin`) values ('".$user_name."','".$pass."','".$surname."','".$email."','".$phone."','".$address."','".$pin."')";

$result = mysql_query($query);
 if($result)
 {
 echo "Record is inserted successfully!!";
 }
else
{
echo "Record insertion failed";
}
?>
于 2013-10-28T12:08:39.250 回答