2016-04-10 16 views
0

Bu çalışma sistemi iyi çalışmıyor. Yorumu veritabanına ekler, ancak yalnızca sayfayı yeniledikten sonra gösterir. Gönder düğmesini tıkladıktan hemen sonra gösterilmesini ve kayma efekti ile gösterilmesini istiyorum.ajax/php yorumlama sistemi çalışmıyor

$arr[$k] = mysql_real_escape_string($v); sorunundan şüpheleniyorum. Şimdi PDO kullanıyorum, o yüzden orada olmamam gerektiğini biliyorum, ancak kodu kaldırdığımda çalışmaya devam ediyorum.

Kodum aşağıda. Ayrıca

<?php 
    class Comment{ 
     private $data = array(); 
     public function __construct($row){ 
      $this->data = $row; 
     } 
     public function markup(){ 
      $d = &$this->data; 
      $link_open = ''; 
      $link_close = ''; 
      if($d['url']){ 
       $link_open = '<a href="'.$d['url'].'">'; 
       $link_close = '</a>'; 
      } 
      $d['dt'] = strtotime($d['dt']); 
      $url = 'http://'.dirname($_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]); 
      return ' 
      <div class="comment"> 
       <div class="name">'.$link_open.$d['name'].$link_close.'</div> 
       <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div> 
       <p>'.$d['body'].'</p> 
      </div> 
      '; 
     } 
     public static function validate(&$arr){ 
      $errors = array(); 
      $data = array(); 
      if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL))){ 
       $errors['email'] = '<div>Please insert your email</div>'; 
      } 
      if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL))){ 
       $url = ''; 
      } 
      if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))){ 
       $errors['body'] = '<div>Please type your comment</div>'; 
      } 
      if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))){ 
       $errors['name'] = '<div>Please insert your name</div>'; 
      } 
      if(!empty($errors)){ 
       $arr = $errors; 
       return false; 
      } 
      foreach($data as $k=>$v){ 
       $arr[$k] = mysql_real_escape_string($v); 
      } 
      $arr['email'] = strtolower(trim($arr['email'])); 
      return true; 
     } 
     private static function validate_text($str){ 
      if(mb_strlen($str,'utf8')<1) 
       return false; 
       $str = nl2br(htmlspecialchars($str)); 
       $str = str_replace(array(chr(10),chr(13)),'',$str);  
       return $str; 
     } 
    } 
?> 

Ve js dosyası:

<script>  
    $(document).ready(function(){ 
     var working = false; 
     $('#addCommentForm').submit(function(e){ 
      e.preventDefault(); 
      if(working) return false; 
       working = true; 
       $('#submit').val('working'); 
       $('span.error').remove(); 
      $.post('commenting/submit.php',$(this).serialize(),function(msg){ 
      working = false; 
      $('#submit').val('submit'); 
      if(msg.status){ 
     $(msg.html).hide().insertBefore('#addCommentContainer').slideDown(); 
       $('#body').val(''); 
      }else { 
       $.each(msg.errors,function(k,v){ 
        $('label[for='+k+']').append('<span class="error">'+v+'</span>'); 
        }); 
       } 
      },'json'); 
     }); 
    }); 
</script> 
+0

Sistemin istediği gibi davranması için, AJAX'ı kullanmanız gerekir ve onu kullanmıyorum. – Erick

+0

Bunun için, Javascript'te çok fazla deneyimli olmasam da, ajax olmadan böyle çalıştığını biliyorum, tüm sistemi PDO olarak değiştirdim ve tüm cehennem o zaman gevşek, herhangi bir öneri, kırdı? –

+0

Biçimlendirmeyi geliştirdim ve topluluk standartlarına uymak için "lütfen" ve "teşekkür ederim" ifadelerini kaldırdım. – CodeMouse92

cevap

0

nedir için üst etiket:

<div id="comments"> 
<div class="comment"> 
    <div class="name">'.$link_open.$d['name'].$link_close.'</div> 
    <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div> 
    <p>'.$d['body'].'</p> 
</div> 
</div> 
: Örneğin

<div class="comment"> 
     <div class="name">'.$link_open.$d['name'].$link_close.'</div> 
     <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div> 
     <p>'.$d['body'].'</p> 
    </div> 

Eğer commets etiketinin içine yorumlarınızı gösteriyorsa,

Daha sonra j'lerinizi aşağıdaki gibi düzenleyin:

<script> 
    $(document).ready(function(){ 
     var working = false; 
     $('#addCommentForm').submit(function(e){ 
      e.preventDefault(); 
      if(working) return false; 
      working = true; 
      $('#submit').val('working'); 
      $('span.error').remove(); 
      $.post('commenting/submit.php',$(this).serialize(),function(msg){ 
       working = false; 
       $('#submit').val('submit'); 
       if(msg.status){ 
        $(msg.html).hide().insertBefore('#addCommentContainer').slideDown(); 
        $('.comment').val(''); 
        /// I added below code to show updated comments inside of comments tag 
        $('#comments').html(msg.html+$('#comments').html()); 

       }else { 
        $.each(msg.errors,function(k,v){ 
         $('label[for='+k+']').append('<span class="error">'+v+'</span>'); 
        }); 
       } 
      },'json'); 
     }); 
    }); 
</script> 
+0

thx ama bunu düzeltmedi, hala sorun olduğunu düşünüyorum çıldırtıcı ** mysql_real_escape_string ($ v); **, bunun için herhangi bir öneri? –

+0

@Jman PDO kullanıyorsanız 'mysql_real_escape_string' kullanmayın. PDO'da sql injetionun bir yolu yoktur. Yani 'mysql_real_escape_string' kullanmanız gerekmez. Ama bence sorun bu değil. – mertizci

+0

Bu satırı '$ ('# comments') olarak değiştirebilir misiniz? Html (msg.html + $ ('# comments'). Html());' ile bu 'console.log (msg.html);' ve kontrol edin JS konsolu, baskılara bakın. – mertizci