[RESOLU] Double résultats dans une requête AJAX

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Double résultats dans une requête AJAX

Re: Double résultats dans une requête AJAX

par nico44530 » 24 mai 2014, 16:41

Ok ;) merci

Re: Double résultats dans une requête AJAX

par xTG » 24 mai 2014, 16:30

Dans ce cas rajoutes aussi un LIMIT 1 pour ne récupérer qu'un seul résultat. ;)

Re: Double résultats dans une requête AJAX

par nico44530 » 24 mai 2014, 16:00

Ça a l'air de fonctionner si j'ajoute "ORDER BY coms_date DESC" à la fin de la requête :
$resultats = Bdd::connect() -> prepare(SELECT.ALL.USERS_FEED.JOIN.USERSZ_COMS.' ON users_feed.feed_id = users_coms.coms_feed'.JOIN.'users ON users_coms.user_id = users.id');
Je fais des tests, et on verra bien ;)

Re: Double résultats dans une requête AJAX

par nico44530 » 24 mai 2014, 15:24

Merci de ta réponse
Et donc, comment on doit faire pour ne pas quelle renvois toujours le premier ?

Re: Double résultats dans une requête AJAX

par xTG » 24 mai 2014, 15:19

$resultats = Bdd::connect() -> prepare(SELECT.ALL.USERS_FEED.JOIN.USERSZ_COMS.' ON users_feed.feed_id = users_coms.coms_feed'.JOIN.'users ON users_coms.user_id = users.id');
Tu récupères tous les enregistrements, tu n'itères pas dessus donc ta fonction renvoie toujours le premier. ;)

Re: Double résultats dans une requête AJAX

par nico44530 » 24 mai 2014, 12:45

La fonction ci-dessous est exécutée dans la page create.php appelée dans l'ajax
function createCom($user_id,$coms_feed,$coms_text){
	$coms_text = $_POST['coms_text'];
	if(isset($coms_text) && !empty($coms_text)){
		$resultat = Bdd::connect() -> prepare(INSERT.USERSZ_COMS.' (user_id, coms_feed, coms_text, coms_date) VALUES (:user_id, :coms_feed, :coms_text, NOW())');
		$resultat -> execute(array('user_id' => $user_id,'coms_feed' => $coms_feed,'coms_text' => trim(htmlentities($coms_text, ENT_QUOTES, 'UTF-8'))));
		$resultats = Bdd::connect() -> prepare(SELECT.ALL.USERS_FEED.JOIN.USERSZ_COMS.' ON users_feed.feed_id = users_coms.coms_feed'.JOIN.'users ON users_coms.user_id = users.id');
        $resultats -> execute();
		$result = $resultats -> fetch(PDO::FETCH_ASSOC);
		$avatar = $_SERVER['DOCUMENT_ROOT'].'/users/upload/avatars/'.$result['user_id'].'.jpg';
		$avatarDefault = $result['sexe'] == 'homme' ? 'homme.jpg' : 'femme.jpg';
		echo '
									<div class="comsContainer">
										<div class="comBorder"></div>
										<div class="comAvatar"><img src="users/upload/avatars/';if(file_exists($avatar)){echo $result['user_id'].'.jpg';} else {echo $avatarDefault;}echo '" height="34" width="34" alt="" /></div>
										<div class="comContent">
											<a href="'.$result['pseudo'].'" class="comName">'.majuscule($result['prenom']).' '.majuscule($result['nom']).'</a>
											<div class="comText"><i class="arrowCom"></i>'.nl2br($result['coms_text']).'</div>
										</div>
										<a href="#" class="delCom" id="'.$result['coms_id'].'">Supprimer</a>
									</div>';
	} else {
		return false;
	}
}
Le script renvois le message posté, et à chaque posts, les messages s'affichent chacun son tour.

Re: Double résultats dans une requête AJAX

par xTG » 24 mai 2014, 12:31

Code : Tout sélectionner

$this.parents('.statutPost').find('.newsCom').append(data);
Ton script PHP renvoie quoi ? Juste le message posté ou bien tous les messages ? ;)

Double résultats dans une requête AJAX

par nico44530 » 23 mai 2014, 23:56

Bonjour,

Dans mon formulaire de commentaires ajax, j'écris un premier message, et lorsque j'écris un second message, le premier message s'affiche, pareil pour le 3ème etc... .
Il faut que je recharge la page, pour que l'affichage global se fasse correctement.

Je pense que le problème ne vient pas de PHP, parce que l'insertion à la base de données se fait, et ce n'est qu'au rechargement de la page que l'erreur se corrige.

Faite le test en vous connectant sur un compte de test http://www.web-astronomie.fr/login :
- Avec comme email : "[email protected]"
- Mot de passe : "nico181290"
- Cliquez sur "Commenter", écrivez et envoyez avec la touche ENTER
- Si l'erreur ne se produit pas au début, continuez à écrire des commentaires avec des accents, bizarrement ça bug plus souvent avec des accents

Je précise que le submit se fait avec la touche ENTER.

Voici le script Ajax :
[javascript]
$('.text_coms').keyup(function(e){
if(e.keyCode == 13){
e.preventDefault();
var $this = $(this);
var dataString = "user_id="+$this.data('user')+"&coms_feed="+$this.data('feed')+"&coms_text="+encodeURIComponent($this.val());
$.ajax({
type: 'POST',
url: '../users/ajax/comment/create.php',
data: dataString,
success: function(data){
$('input[name=coms_text]').val('');
$this.parents('.statutPost').find('.newsCom').append(data);
$this.parents('.statutPost').find('.comsContainer').addClass('show');
}
});
}
});
[/javascript]
Voici le formulaire des commentaires :
<form method="post" action="home" class="statutCom" onsubmit="return false;">
	<div class="clearfix">
		<a href="#" class="postLink postComments"><i id="postComs"></i><span>Commenter</span></a>
		<a href="#" class="postLink postLikes"><i id="postLike"></i><span>J'aime</span></a>
		<span class="postText tooltip_top" title="<?php echo majuscule($feed['feed_acces']); ?>"><i id="post_<?php echo $feed['feed_acces']; ?>"></i></span>
	</div>
	<div class="postContainer">
		<?php echo displayCom($feed['feed_id']); ?> 
		<div class="newsCom"></div>
		<div class="comsComposer showCom">
			<div class="clearfix">
				<div class="avatarCom">
					<img src="users/upload/avatars/<?php echo avatarMembre(); ?>" height="34" width="34" alt="" />
				</div>
				<div class="inputCom">
					<input type="text" data-user="<?php echo infoMembre($id,'id'); ?>" data-feed="<?php echo $feed['feed_id'] ?>" class="text_coms" name="coms_text" placeholder="Écrire un commentaire" value="" />
				</div>
			</div>
		</div>
	</div>
</form>
J'aimerais que les doublons ne se fasse plus, et je ne sais pas comment faire :(
Merci d'avance