2016-04-12 8 views
0

私はユーザーのプロフィールページに表示されるバイオ(個人的なメッセージ)を持っています。私はBBCodeを追加しましたが([b]太字[/ b])、後でバイオを変更するために戻ってくるとHTMLタグが表示されます。また、HTMLタグとPHPタグを削除したいと思います。現時点では、誰かが自分のバイオにPHPコードを入力してテーブルを削除することができれば、それは重要です。 HERESに私のBBコード/変更のバイオコード:私は希望通りにバイオのBBCodeが動作しません

<div class="fl"> 
     <!--BB-codes--> 
    <?php 
    $db = mysqli_connect("localhost", "root", "password", "table") or die ("Could not connect to database"); 

     if(isset($_POST['submit'])) { 

     if(isset($_POST['bio_message'])) 
     { 
       $text = $_POST['bio_message']; 
       $text = stripslashes($text); 
       $text = htmlspecialchars($text); 
       $text = nl2br($text); 

       $text = preg_replace('#\[b\](.+)\[/b\]#isU', '<b>$1</b>', $text); 
       $text = preg_replace('#\[i\](.+)\[/i\]#isU', '<i>$1</i>', $text); 
       $text = preg_replace('#\[u\](.+)\[/u\]#isU', '<u>$1</u>', $text); 

       $text = preg_replace('#\[img\](.+)\[/img\]#isU', '<img src="$1" />', $text); 
     } 

      $id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8'); 

      $sql = "UPDATE users SET bio = '$text' WHERE id = '$id'"; 
      $db->query($sql); 
     }else{} 
    ?> 
</div> 
      <div class="title-wrapper" style="margin:auto; width:60%;"> 
       <h3 class="widget-title"><i class="fa fa-pencil"></i> Change Bio</h3> 
       <div class="title-content"> 
        <form method="post" action="/settings/change-bio"> 
         <div class="fl">Bio :</div><a href="" class="a fr" style="font-size:11px; text-decoration:underline;">BB-codes</a><br/> 
         <textarea maxlength="2000" onkeyup="textCounter(this,'counter',2000);" placeholder="User has not set any bio yet..." id="bio_message" name="bio_message" class="textarea" style="max-width:100%; max-height:160px; width:100%; height:160px;"><?php 
          $id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8'); 
          $SQL = "SELECT * FROM users WHERE id = '$id'"; 


          $result = $db->query($SQL); 

          /* numeric array */ 

          /* associative array */ 
          $row = $result->fetch_array(MYSQLI_ASSOC); 
          printf ($row["bio"]); 

          $result->free(); 
          ?></textarea> 

         <input type="submit" id="submit" name="submit" class="button" value="Set Bio" /> 
         <input disabled maxlength="3" size="3" value="2000" id="counter"> Characters remaining. 
        </form> 
       </div> 
      </div> 
+0

Er ...他の '/'をエスケープするのを忘れました。あなたは '\ /'でそれを行うべきです。 –

+0

どこを指差していますか? bbコードはそれ自身で動作しますが、htmlやphpタグが許可されるため、怖いです。これは私のデータベースなどを削除する人々を得ることができます。 – Martin

+0

OKだからPHPを許可しませんが、HTMLタグを表示したくない場合や、bbcodesでそれらを置き換えることができ、htmlをまったく許可しない場合 – Martin

答えて

0

プログラムは、解析されたBBCodesでポストを格納ので、それがテキストエリアに示されているものです。の前にテーブルを更新して、BBCodeを解析してから、ユーザーにbioを提示するときに解析する必要があります。また、データベースに投稿のソースとして追加の列を追加することもできます。

関連する問題