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 属性がないと、フォームの送信後に値が投稿されません。次のようにしてみてください。フォーム送信後の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

変数の場合: 入力要素に name 属性を指定する必要があります。そうしないと、PHP で使用できなくなります。PHP 側では、それらは魔法のように変数として表示されることはありません (うまくいけば、それらがregister_globals有効になっており、大きなセキュリティ リスクがある場合)、フォームに応じて$_GETまたはに表示されます。$_POST

SQL の場合: 2 つの構文を混在させている場合は、次のいずれかを使用します。

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 に答える