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>

这是应该完成工作的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;

            }
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 查询有两个条件,我不明白这部分“...AND ptb_profiles.user_id = ptb_users.id”。您只更新一个表中的一列,您唯一需要的是您在第一个 where 条件中提供的用户 ID。

于 2012-10-31T22:18:02.740 回答
1

您的 HTML + jQuery 代码看起来不错,只需<?php echo $profile['bio'] ?>添加cheng 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 回答