0

ユーザーがテキストエリアにテキストを入力できるようにしようとしています。これにより、データベース「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">
4

3 に答える 3

1

のコンテンツを挿入していますが、コードに配列$message['bio']がありません(また、以下のHTMLの入力にも使用しません)。$message$profile

また、これ以上$content = stripslashes($content);使用しないので無意味です。$content言うまでもなく、コードをチェックインする代わりに、PHPconfigまたは.htaccessを介してmagic_quotes_gpcを無効にする必要があります。

最後に、SQLインジェクション攻撃の可能性があります。

編集:@andrewsiによって発見されたように、あなたの<textarea>要素も欠けnameています。

于 2012-10-24T15:46:14.543 に答える
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">
于 2012-10-24T16:13:12.143 に答える
0

この問題を自分で抱えて、多くのフォーラム投稿からの解決策で問題を修正しようと時間を費やしたとき、私はこの同じ問題を修正することができました。私がチェックしたすべてのフォーラムの中で、問題は、$ _POSTphpスーパーグローバル変数を使用してtextareaからsql'INSERT'ステートメントに文字列値を取得することでした。

実際に機能し、エラーが発生しないことを確認できる唯一の方法は、「INSERT」ステートメントを作成するときに列名を無視することです。その代わりに、次のようにします。

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

単に使用してください:

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

唯一の欠点は、テーブル内のすべての列の値をリストする必要があることですが、textarea値をsql列に取得する問題が修正されます。

これが同じ問題を抱えている他の人に役立つことを願っています

于 2013-05-17T01:49:13.523 に答える