![](/img/trans.png)
[英]How can I update a mysql field when my user loses connection to my site?
[英]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.