簡體   English   中英

用戶丟失文本區域的焦點時,如何在mysql中更新表?

[英]update table in mysql when user loses focus of a textarea?

我希望我站點的用戶能夠通過單擊文本區域來更新其個人資料信息。 當他們輸入一些文本並單擊超出文本區域(模糊時)時,我希望它更新數據庫中名為“ bio”的表。

我已經為此工作了好幾天,我感到很to愧,但是我對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>

這是應該工作的url php文件:

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;

            }

我檢查了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查詢有兩個條件,我不理解這部分“ ... AND ptb_profiles.user_id = ptb_users.id”。 您只更新一個表中的一列,唯一需要的是您在第一個where條件中提供的用戶ID。

您的HTML + jQuery代碼看起來不錯,只需通過添加htmlspecialchars使php輸出<?php echo $profile['bio'] ?> ,這將幫助您避免麻煩

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

代碼失敗的原因是SQL查詢。 您正在將bio設置為空文本。 另外,您還具有將user_id與其他表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);

您引用的報價有誤,請嘗試這樣的操作

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

SQL通常使用單引號,PHP兩者都使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM