0

私のサイトのユーザーがテキストエリアをクリックしてプロフィール情報を更新できるようにしたいと思います。彼らがテキストを入力してテキスト領域の外をクリックすると(ぼかしの場合)、これでデータベース内の「bio」というテーブルが更新されます。

私はこれに数日間取り組んできました、認めるのは恥ずかしいですが、私はphpとsqlに本当に慣れていないので、私は進むにつれて学んでいます。スクリプトの意味を理解しようとしましたが、おそらく完全に間違っています。誰かが私に何をする必要があるか教えてもらえますか?

これが私のコードです:

 <textarea id="bio" style="width: 456px; 
    margin-top:3px;
    text-align:left;
    margin-left:-2px;
    height: 120px;
    resize: none; 
    border: hidden;" textarea name="bio" data-id="bio">
    <?php echo $profile['bio'] ?>
  </textarea>

  <script type="text/javascript">

    $('textarea').on('blur',function () {
        var bioVal = $(this).val(), 
            id = $(this).data('id');        

        $.ajax({
             type: "POST",
             url: "includes/changebio.php",
             data: {bio:bioVal , id:id},
             success: function(msg) {
                 $('#bio-' + id).val(msg);
             }
       })
    });

  </script>

作業を行う必要があるurlphpファイルは次のとおりです。

function update_profilebio() {
            global $connection;
            global $profile_id;
            $query = "UPDATE ptb_profiles
                      SET bio=''
                        WHERE ptb_profiles.user_id = \"$profile_id\"
                        AND ptb_profiles.user_id = ptb_users.id";
            $update_profilebio_set = mysql_query($query, $connection);
            confirm_query($update_profilebio_set);
            return $update_profilebio_set;

            }
4

3 に答える 3

2

HTML + JavaScriptコードを確認しましたが、AJAX POSTリクエストがPHPスクリプトにデータを正しく送信しています(これはChromeデベロッパーツールまたはFirebugアドオンで確認できます)。

このchangebio.phpスクリプトには、このupdate_profilebio()関数の定義しかありませんか?定義だけではこの関数は実行されないので、呼び出す必要があります。

<?php
    update_profilebio(); // tells php to call the function, defined below

    function update_profilebio() {
        global $connection;
        global $profile_id;
        $query = "UPDATE ptb_profiles
                  SET bio=''
                    WHERE ptb_profiles.user_id = \"$profile_id\"
                    AND ptb_profiles.user_id = ptb_users.id";
        $update_profilebio_set = mysql_query($query, $connection);
        confirm_query($update_profilebio_set);
        return $update_profilebio_set;
    } 
?>

また、SQLクエリには2つの条件があり、この部分「... AND ptb_profiles.user_id=ptb_users.id」がわかりません。1つのテーブルの1つの列のみを更新します。必要なのは、最初のwhere条件で指定するユーザーIDだけです。

于 2012-10-31T22:18:02.740 に答える
1

<?php echo $profile['bio'] ?>HTML + jQueryコードは問題ないように見えますが、追加してphpを変更するだけhtmlspecialcharsで、問題を回避できます。

<?php echo htmlspecialchars($profile['bio']); ?>

コードで失敗するのはSQLクエリです。bioを空のテキストに設定しています。また、他のテーブルIDと一致するという条件user_idがありますが、クエリでこのテーブルを結合していません。user_id与えられた整数に等しいことを要求するだけで十分です。また、悪意のあるコードがデータベースに挿入されないように、ユーザー入力を適切にエスケープすることを忘れないでください。

SQLは次のようになります。

$bio = mysql_real_escape_string($_POST['bio']);

$query = "
UPDATE 
   ptb_profiles 
SET 
   bio='{$bio}'
WHERE
   ptb_profiles.user_id = " . intval($profile_id);
于 2012-10-31T22:25:58.570 に答える
0

引用が間違っています。次のようにしてみてください

 $query = "UPDATE ptb_profiles SET bio='".$_REQUEST['bio']."'
           WHERE ptb_profiles.user_id = ".$profile_id;

SQLは通常一重引用符を使用し、PHPは両方を使用します。

于 2012-10-31T22:18:11.457 に答える