2016-04-12 1 views
0

У меня есть био (личное сообщение), которое отображается на странице профиля пользователя. Я добавил BBCodes, которые работают ([b] bold [/ b]), но когда я уйду и вернусь, чтобы изменить био позже, он показывает HTML-теги. Я также хотел бы удалить теги HTML и PHP. На данный момент было бы очень важно, чтобы кто-то мог просто ввести PHP-код в свою биографию и удалить таблицу. Heres мой BBCode/изменение био код:BBCodes для био не работает, как я надеюсь

<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 проанализирован, и, таким образом, что это то, что показано в текстовой области. Вам необходимо обновить таблицу до, вы разобрали BBCodes, а затем проанализируйте их, когда вы представляете био пользователю. Кроме того, у вас также может быть дополнительный столбец в базе данных для источника сообщения.