使用文本区域更新SQL表?

时间:2012-10-24 15:43:15

标签: php mysql textarea

我正在努力使用户可以在textarea中键入文本然后更新数据库'ptb_profiles'中的mysql表'bio'。

目前他们的信息被拉到这个文本区域,但我想要它,以便他们输入的内容更新表格。

我正在使用以下代码,但它不起作用?我是php和mysql的新手,所以它一定是错的。

任何帮助都会非常感激。感谢。

<?php 
//We check if the form has been sent
if(isset($_POST['bio']))
{
    $content = $_POST['bio'];
        //We remove slashes depending on the configuration
        if(get_magic_quotes_gpc())
        {
                $content = stripslashes($content);
        }
        //We check if all the fields are filled
        if($_POST['bio']!='')
        {
            $sql = "INSERT INTO ptb_profiles.bio VALUES (NULL, '".$_SESSION['user_id']."', '".$message['bio']."');";
            mysql_query($sql, $connection);

            echo "<div class=\"infobox-message\">Your Profile Information has been updated..</div>";
        }
}

?>

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">

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

     <input type="submit" name="send_button" id="send_button" value="Send">

3 个答案:

答案 0 :(得分:1)

您正在插入$message['bio']的内容,但代码中没有$message数组(您使用$profile填充下面的HTML)。

此外,$content = stripslashes($content);毫无意义,因为您不再使用$content,更不用说您应该通过PHP配置或.htaccess禁用magic_quotes_gpc,而不是检查代码。

最后,您可以接受SQL注入攻击。

编辑:正如@a​​ndrewsi所发现的,您的<textarea>元素也缺少name

答案 1 :(得分:0)

问题在于您的文本区域没有name =“bio”属性。还可以使用nl2br和htmlentities然后保存在数据库中。当它回来时,让真正的实体回来。

     <?php 
//We check if the form has been sent
if(isset($_POST['bio']))
{
        echo $content = htmlentities(nl2br($_POST['bio']));
        //We remove slashes depending on the configuration


        //We check if all the fields are filled

            $sql = "INSERT INTO ptb_profiles.bio VALUES (NULL, '".$_SESSION['user_id']."', '".$content."');";
            mysql_query($sql, $connection);

            echo "<div class=\"infobox-message\">Your Profile Information has been updated..</div>";
            //exit;

}


 $sql = "Select bio from ptb_profiles.bio WHERE user_id =  '".$_SESSION['user_id']."'";
 $res = mysql_query($sql, $connection);
 $profile = mysql_fetch_array($res);

 $nl = str_replace("<br />", "\n", $profile['bio']);
?>

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">

<textarea id="bio" name="bio" rows="10" style="width: 456px; 
    margin-top:3px;
    text-align:left;
    margin-left:-2px;
    height: 122px;
    resize: none; 
    border: hidden;"><?php echo $nl; ?> </textarea>

     <input type="submit" name="send_button" id="send_button" value="Send">

答案 2 :(得分:0)

一旦遇到这个问题并花费一些时间试图解决许多论坛帖子的解决方案的问题,我设法解决了同样的问题。在我检查的所有论坛中,问题是将textarea中的字符串值转换为sql&#39; INSERT&#39;声明使用$ _POST php超全局变量

我能看到实际工作的唯一方法并没有引发任何错误,就是在编写&#39; INSERT&#39;时忽略列名。陈述而不是:

"INSERT INTO tbl_dbTable ( Colummn1, Colummn2...) VALUES( '$_POST[textarea]', 'Value2'..)"

只需使用:

"INSERT INTO tbl_dbTable VALUES( '$_POST[textarea]', 'Value2'..)"

唯一的缺点是你必须列出表中所有列的值,但它解决了将textarea值转换为sql列的问题。

希望这有助于其他人遇到同样的问题