Aller au contenu

recharger une partie de la page uniquement


Sujets conseillés

Posté

Bonjour à tous,

Je viens de finir mon premier site. Sur mon site des internautes viennent poster des messages. Ensuite j'ai installé un système de vote de ce type:

bien (34) pas bien(23)

les gens cliquent sur bien ou pas bien et le chiffre entre parenthèse s'incrémente de 1. Le problème c'est qu'il s'incrémente de 1 uniquement après un rechargement de la page et si on recharge la page à l'aide du navigateur ça renvoi un vote.

Alors ma question est comment faire pour que lorsque l'internaute clique sur le vote de son choix, il voit apparaitre de suite le chiffre entre parenthèse incrémenté de 1 sans qu'il est besoin de recharger la page ?

voici mon code du système de vote :

<?php
if (isset($_GET['id']) AND isset($_GET['pasbien']))
{
$id=$_GET['id'];
if(true){//true c-à-d si le formulaire est validé
echo "<script language='Javascript'>

<!--

alert('Votre vote a été pris en compte ! Merci !');

// -->

</SCRIPT>";}
mysql_query("UPDATE message SET pasbien=pasbien+1 WHERE id='$id'");
}
?>

Merci d'avance pour votre aide.

Posté

Salut,

C'est un joyeux bordel il me semble ...

Essaye le code suivant :

<?php
if (isset($_GET['id']) AND isset($_GET['pasbien']))
{
$id = $_GET['id'];
if(true)
{//true c-à-d si le formulaire est validé
mysql_query("UPDATE message SET pasbien=pasbien+1 WHERE id='$id'");
?>
<script language='Javascript'>
window.reload();
alert('Votre vote a été pris en compte ! Merci !');
</script>
<?php
}
}
?>

C'est pas très propre mais ça devrait fonctionner ...

Tu devrais valider tes données avant de faire ton update.

Tu devrais ajouter un LIMIT dans ta clause

@+

Posté

Merci beaucoup de ton aide mais la solution que tu me propose ne fonctionne pas ou sinon c'est moi qui m'en sert mal.

Je me dis aussi que c'est peut-etre à cause de l'adresse de mes lien de vote

voici le lien :

<a href="index.php?page =<?php echo "$page" ?>&votebien=r&categorie=<?php echo "$categorie" ?>&souscategorie=<?php echo "$souscategorie" ?> &id=<?php echo $donnees['id']; ?>" class="lienvote">

est-ce qu'il n'y aurait pas possibilité d'incrémenter la base sql directement à partir du lien. Je dis peut-être n'importe quoi...

Posté

Tu le fais à partir d'un lien, ok ... je n'avais capté ça comme ça ;)

Le hic, c'est que c'est tout à fait normal que la page soit rechargée puisque tu envoies tes données par la query string (en GET via ton lien)

Pour que ton affichage soit correct après le clic sur le lien, il faut que l'UPDATE précède le SELECT dans l'ordre du code ... c'est tout ...

@+

Posté

Tu pourrais enregistrer le vote dans la base et mettre à jour l'affichage directement sans aucun rechargement de page, mais il faut utiliser Javascript et AJAX pour la mise à jour de la base.

Sans rechargement de page c'est impossible en PHP seul, car il est exécuté sur le serveur et après on ne sait pas ce qui se passe sur le navigateur...

Posté (modifié)
Merci beaucoup de ton aide mais la solution que tu me propose ne fonctionne pas ou sinon c'est moi qui m'en sert mal.

Je me dis aussi que c'est peut-etre à cause de l'adresse de mes lien de vote

voici le lien :

<a href="index.php?page =<?php echo "$page" ?>&votebien=r&categorie=<?php echo "$categorie" ?>&souscategorie=<?php echo "$souscategorie" ?> &id=<?php echo $donnees['id']; ?>" class="lienvote">

est-ce qu'il n'y aurait pas possibilité d'incrémenter la base sql directement à partir du lien. Je dis peut-être n'importe quoi...

Euh bon si j'ai bien compris.

Quand tu clique sur un de tes liens, ça appelle la même page en passant les paramètres. Un script traite tout ça (avec l'incrémentassions de la base de données).

et ensuite on fait un header('/tapage.php'); exit(); pour rediriger ton visiteur.

Voila en gros le principe :

<?php
//Si on a cliqué sur ton lien
if(!empty($_GET)) {

//Champ = champ à incrémenter
$sql = 'UPDATE table SET champ = champ + 1 WHERE cat = '.$_GET['cat'];
mysql_query($sql) exit(mysql_error());

header('la-meme-page.php'); //On redirige vers la même page sans paramètres cette fois
exit();

}
?>

je sais pas si ça va t'aider :(

Sinon il reste l'AJAX, pour recharger qu'une div par exemple.

Modifié par Reise
Posté

Merci à tous pour votre aide et grâce à vous ça fonctionne très bien désormais. Il m'a fallut tout simplement de mettre mon update avant le select. Voilà et encore une fois merci à tous !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...