2016-04-12 27 views
0

Kullanıcının profil sayfasında görüntülenen bir biyo (kişisel mesaj) var. Çalıştığım BBCodes'ları ekledim ([b] bold [/ b]), ama gittiğimde ve biyografiyi değiştirmek için geri döndüğümde, HTML etiketlerini gösterir. HTML ve PHP etiketlerini de kaldırmak istiyorum. Şu andan itibaren, birisi PHP kodlarını biyografisine yazıp tabloyu silebilirse çok önemli olacaktır. heres my BBCode/değişim biyo kodu:BBCodes için biyo işe yaramıyor umarım

<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 ... Diğer '/' 'den kaçmayı unutmuşsunuzdur. Bunu '\/'ile yapmalısınız. –

+0

nereye işaret ediyorsun? bb kodları kendiliğinden çalışır, ancak imgindir çünkü html ve php etiketlerine izin verilir. Bu, insanları veritabanımı ve benzerlerini siler. – Martin

+0

tamam, php'ye izin vermez ama html etiketlerini görüntülemesini istemiyorum ve eğer bunları sadece bbcodes ile değiştirebilir ve html'ye izin veremez – Martin

cevap

0

programı ayrıştırılan BBCode'lar, yayını depolamak ve dolayısıyla bu metin alanında görüntülenir budur.'dan önce tablosunu güncellemeniz gerekir, BBCodes'ı ayrıştırdınız ve biyografiyi bir kullanıcıya sunduğunuzda bunları ayrıştırmalısınız. Alternatif olarak, posta kaynağının kaynağı için veritabanında fazladan bir sütun da olabilir.

İlgili konular