Envoyer l'ID d'une page dans la BdD
Posté : 21 août 2012, 15:02
Je viens d'installer un système commentaire. Malheureusement, je ne parviens pas avoir un système multi-pages, c'est-à-dire des commentaires différents sur chaque page (actuellement les mêmes commentaires s'affichent sur toutes les pages).
J'ai crée côté serveur une colonne supplémentaire page_id afin d'attribuer à chaque page un ID et de ne retourner que les commentaires ayant cet ID.
J'ai donc sur chaque page un
La requête d'affichage des commentaire ayant PageID = x fonctionne (si j'attribue manuellement dans la BdD un page_id à un post, celui-ci ne s'affiche que sur la page voulue):
Voici le submit.php (si je rajoute page_id à "mysql_query(" INSERT INTO comments(name,url,email,body)", alors rien n'est envoyé au serveur) :
J'ai crée côté serveur une colonne supplémentaire page_id afin d'attribuer à chaque page un ID et de ne retourner que les commentaires ayant cet ID.
J'ai donc sur chaque page un
$PageID = 1;
avec un chiffre différent pour chaque page.La requête d'affichage des commentaire ayant PageID = x fonctionne (si j'attribue manuellement dans la BdD un page_id à un post, celui-ci ne s'affiche que sur la page voulue):
$result = mysql_query("SELECT * FROM comments WHERE page_id = '$PageID' ORDER BY id ASC");
Ce qui ne fonctionne pas, c'est lorsque l'on envoie un commentaire, le page_id reste désespérément à 0.Voici le submit.php (si je rajoute page_id à "mysql_query(" INSERT INTO comments(name,url,email,body)", alors rien n'est envoyé au serveur) :
<?php
// Error reporting:
error_reporting(E_ALL^E_NOTICE);
include "connect.php";
include "comment.class.php";
/*
/ This array is going to be populated with either
/ the data that was sent to the script, or the
/ error messages.
/*/
$arr = array();
$validates = Comment::validate($arr);
if($validates)
{
/* Everything is OK, insert to database: */
mysql_query(" INSERT INTO comments(name,url,email,body)
VALUES (
'".$arr['name']."',
'".$arr['url']."',
'".$arr['email']."',
'".$arr['body']."'
'".$PageID."'
)");
$arr['dt'] = date('r',time());
$arr['id'] = mysql_insert_id();
/*
/ The data in $arr is escaped for the mysql query,
/ but we need the unescaped variables, so we apply,
/ stripslashes to all the elements in the array:
/*/
$arr = array_map('stripslashes',$arr);
$insertedComment = new Comment($arr);
/* Outputting the markup of the just-inserted comment: */
echo json_encode(array('status'=>1,'html'=>$insertedComment->markup()));
}
else
{
/* Outputtng the error messages */
echo '{"status":0,"errors":'.json_encode($arr).'}';
}
?>
Et enfin le comment.class.php :<?php
class Comment
{
private $data = array();
public function __construct($row)
{
/*
/ The constructor
*/
$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"]).'/img/default_avatar.gif';
return '
<div class="comment">
<div class="avatar">
'.$link_open.'
<img src="http://www.gravatar.com/avatar/'.md5($d['email']).'?size=50&default='.urlencode($url).'" />
'.$link_close.'
</div>
<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)
{
/*
/ Validation des données envoyées en Ajax
*/
$errors = array();
$data = array();
// Using the filter_input function introduced in PHP 5.2.0
if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
{
$errors['email'] = 'Please enter a valid Email.';
}
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'] = 'Please enter a comment body.';
}
if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
{
$errors['name'] = 'Please enter a name.';
}
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;
}
}
?>
Je ne sais pas à quel niveau est l'erreur. J'ai cherché sans succès. Pourriez-vous me donner une piste ou une idée ? Comment faire en sorte que le PageID soit transmis à la BdD ? Merci !