-1

テキストボックスに何かを入力してmysqliに保存すると、完全に機能しますが、同じページに書いたテキストを更新すると、理由もなく消えます。また、そのページに別のテキスト ボックスがあり、完全に正常に動作します。どうすれば修正できますか?バイオ テキスト ボックスは、私が問題を抱えているものです。

    $getpro = mysql_fetch_assoc(mysql_query("SELECT * FROM `profile` WHERE username = '".$user_data['username']."'  "));$pro = $getpro;
$bios = $pro["bios"];
$realtionship = $pro["realtionship"];
$impmessage = $pro["impmessage"];
if ($_POST['bio']){
$bio = $_POST['bio'] ;
$query;
}
if ($_POST['impmessage']){
$impmessage = $_POST['impmessage'] ;
$query;
}
$query = mysql_query("UPDATE `profile` SET  bios ='$bio',  impmessage = '$impmessage' WHERE username = '".$user_data['username']."'");<form name="bio"action="" method="post">
<p>Important Message</p> <textarea   cols="50" style="resize:none" name="bio"  rows="7" ><? echo $bios; ?></textarea><br />
<input type="submit" value="change">
</form><hr /><form name="impmessage"action="" method="post">
<p>Important Message</p> <textarea   cols="50" style="resize:none" name="impmessage"  rows="7" ><? echo $impmessage; ?></textarea><br />
<input type="submit" value="change">
</form>
4

2 に答える 2

1

コードの一部を再配置して削除し、少し整理してみました。

<?php
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) // if form is submitted using POST method
    {
        if ( isset( $_POST['bio'] ) ){
            $bio = mysql_real_escape_string( $_POST['bio'] ); // escape special characters is user input
            $query = mysql_query("UPDATE `profile` SET  bios ='$bio' WHERE username = '".$user_data['username']."'"); //update bios
        }

        if (isset( $_POST['impmessage'] ) ){
            $impmessage = mysql_real_escape_string( $_POST['impmessage'] ); // escape special characters is user input
            $query = mysql_query("UPDATE `profile` SET impmessage = '$impmessage' WHERE username = '".$user_data['username']."'"); //update impmessage
        }
    }

    $pro = mysql_fetch_assoc(mysql_query("SELECT * FROM `profile` WHERE username = '".$user_data['username']."'  "));
?>

<form name="bio" action="" method="post">
    <p>Bios</p>
    <textarea cols="50" style="resize:none" name="bio" id="bio" rows="7" ><?php echo $pro["bios"]; ?></textarea>
    <br />
    <input type="submit" value="change">
</form>
<hr />
<form name="impmessage" action="" method="post">
    <p>Important Message</p>
    <textarea cols="50" style="resize:none" name="impmessage" id="impmessage" rows="7" ><?php echo $pro["impmessage"]; ?></textarea>
    <br />
    <input type="submit" value="change">
</form>

あなたのためのいくつかのメモ:

  • まず第一に、mysql_* 関数を避けてください。代わりに mysqli または PDO を使用してください
  • 私はいつも、ユーザー入力を処理するコードをページの一番最初に書くことを好みます。何かを出力する前に。ユーザー入力が出力に変更を加えた場合、何かを出力する前に処理を行っているため、更新が簡単に表示されるためです。したがって、データベースにクエリを実行すると、更新されたデータがフェッチされます。また、何かを出力する前にヘッダーを常に送信する必要があるため、別のページにリダイレクトしたり、他のヘッダーをブラウザーに送信する必要がある場合は、それを行うことができます。
  • もう 1 つのことは、常にユーザー入力をエスケープすることです。そうしないと、SQL インジェクションが発生しやすくなります。最善の方法は、mysqli および PDO で利用可能な準備済みステートメントを使用することです。
  • HTML 内の要素に名前を付けるときidは、一意であることを確認してください。同じ ID が 2 回出現することはあり得ないためです。ただし、クラス名は何度でも使用できます。
  • また、PHP コードが HTML と混同されないように注意してください。PHP コードを<?php&?>タグで適切に囲みます。私は常に略記を避けたいと思っています。
  • 2 つのフォームを使用しているため、両方の入力がサーバー側に到達しません。1つだけ。両方の入力に同時に到達したい場合は、単一のフォームを使用してください。
  • また、フェッチしたデータから他の変数への不要な割り当て操作を回避しました。
  • また、読みやすくするために、コードを常に適切にインデントする必要があります。

これが役立つことを願っています。幸運を願っています。:)

于 2012-09-02T06:11:24.973 に答える
0

ページが読み込まれるたびに更新クエリを実行しているようです。投稿値が入力されていない状態で更新すると、空の値で更新されます。Ps sberry は、これが製品化される前に修正すべきことが他にもたくさんあります。

于 2012-09-02T05:51:32.523 に答える