Ich habe dieses Kommentar-System, das nicht gut funktioniert. Er fügt den Kommentar in die Datenbank ein, zeigt ihn jedoch erst nach dem Aktualisieren der Seite an. Ich möchte, dass es sofort nach dem Klicken auf "Senden" -Schaltfläche angezeigt wird und mit einem Gleiteffekt angezeigt wird.Ajax/PHP Kommentar System funktioniert nicht
Ich vermute, die $arr[$k] = mysql_real_escape_string($v);
verursacht das Problem. Ich benutze jetzt PDO, also weiß ich, dass das nicht da sein muss, aber wenn ich es entferne, funktioniert der Code nicht mehr.
Mein Code ist unten.
<?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;
}
}
?>
Und auch meine js-Datei:
<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>
Damit sich das System wie gewünscht verhält, müssen Sie AJAX verwenden und ich sehe nicht, dass Sie es verwenden. – Erick
Thx dafür, obwohl ich nicht viel Erfahrung in Javascript usw. habe, weiß ich, dass es so ohne Ajax arbeitete, änderte ich das ganze System zu PDO und die Hölle brach dann los, irgendwelche Vorschläge? –
Ich habe die Formatierung verbessert und die Anweisungen "Bitte" und "Danke" entfernt, um den Community-Standards zu entsprechen. – CodeMouse92