-5

HTML フォームを生成する PHP があり、データベース内の情報を更新するスクリプトを作成しようとしています。何らかの理由で、一部のフィールドでは機能し、他のフィールドでは機能しません。

動作しないコード:

ユーザーが詳細を変更できる PHP フォーム

echo"<form name='details'>";
echo"<p>Surname: <input type='text'id='surname' value='".$row['Surname']."'/></p>;
<p>Telephone: <input type='text'id='phone' value='".$row['Telephone']."'/></p>;
<p>Postcode: <input type='text' id='postcode' value='".$row['Postcode']."'/></p>;
<p>House/Flat Number: <input type='text' id='number' value='".$row['Number']."'/></p>";

AJAX - クエリ文字列を介してサーバーに変更を送信します

    var sname = document.getElementById('surname').value;
    var tel = document.getElementById('phone').value;
    var num = document.getElementById('number').value;  
    var pcode = document.getElementById('postcode').value;

  var queryString = "?username=" + username +"&email="+email....";
  ajaxRequest.open("GET", "url" + queryString, true);
  ajaxRequest.send(null);

PHP - 更新コマンドを実行

//connect to server
...
//get variables
$sname = $_GET['sname'];
$pcode = $_GET['pcode'];
$tel = $_GET['tel'];
$num=$_GET['num'];

//process update
$update ="UPDATE User SET Surname='$sname',Telephone='$tel',Number='$num',
Postcode='$pcode' WHERE Username='$username'";

//if query, display success
if(mysqli_query($update))
{
echo"success";
}
else
{
echo"error";
}
//else display error

クエリは正常に実行されますが、データベース内に値が表示されません。他の変数 (ユーザー名、パスワードなど) はすべて正常に更新されます。すべてのデータベース フィールドは VARCHAR(80) 型です。

編集:クエリが実行されています。これにより、姓、郵便番号、番号、および電話番号のフィールドは更新されません。

4

1 に答える 1

1

このコードとアプローチに関する他のすべての問題 (SQL インジェクションの問題、GET と POST の問題など) を今のところ無視し、期待どおりに変更されない更新に対処するには、確認すべき点がいくつかあります。

  • ログに更新クエリを出力してみて、実際に期待どおりに見えることを確認してください。ネットワークを介してプッシュすることを意味している値が、クエリに組み込まれていない可能性があります。

  • スタンドアロン SQL クライアント (mysql、squirrel など) で手動でクエリを実行すると、実際にレコードが更新されることを確認します。有効な更新クエリがどのレコードにも一致しない可能性は十分にあります。(探しているユーザー名の値が、データベースにあるものと一致しないとします。

  • インフラストラクチャがわからないので、いくつかの健全性チェックをお勧めします。実際に正しいデータベースを指していますか? ロールバックしているトランザクションにラップされた更新がありますか? など...

その他のヒント:

  • PDO、特にプリペアドステートメントがどのように機能するかを確認することをお勧めします。上で構築している種類のクエリは、すべてのデータまたはさらに悪いことを実行する誰かです。万能薬ではありませんが、準備済みステートメントは確実な最初のステップです。

  • Jquery の Ajax関数を見てみましょう。特に投稿方法。特別な URL 文字列を作成しなくても ajax 呼び出しを行うためのシンプルなインターフェイスを提供します。さらに、POST に切り替えると、Web サーバーのログ ファイルにデータが表示されなくなります。

于 2013-05-03T15:26:19.213 に答える