Page 1 sur 1

Rechargement en ajax : erreur dans la requête php

Posté : 12 mars 2013, 00:20
par nico44530
Bonjour,

J'ai un div #container :
<div id="container">
	<ul class="user-data" style="margin-bottom: 20px;list-style-type: none;">
<?php
$base = mysql_connect ('*****', '************', '***************');  
mysql_select_db('*************', $base);
$sql = "SELECT * FROM wa_mur, wa_communaute WHERE id_membre=id ORDER BY date DESC;";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 0) { 
   echo '<div style="text-align: center;font-size: 11px;color: #666;">Aucune actualités pour l\'instant</div>';
}
else {
	while ($data = mysql_fetch_array($req)) { ?>
	
		<li class="user-item" style="float: left;padding: 13px 10px 10px;width: 460px;border-top: 1px solid #cecece;word-wrap: break-word;">
			<div class="user-avatar float-l" style="margin-right: 10px;">
				<a href="/<?php echo htmlentities(trim($data['pseudo'])); ?>"><img src="../img/upload/<?php echo htmlentities(trim($data['id'])); ?>-mini.png" width="50" height="50" alt="" /></a>
			</div>
			<div class="user-title" style="margin-bottom: 5px;font-weight: bold;">
				<a href="/<?php echo htmlentities(trim($data['pseudo'])); ?>" style="color: #005B83;"><?php echo htmlentities(trim($data['prenom'])); ?> <?php echo htmlentities(trim($data['nom'])); ?></a>
			</div>
			<div class="user-content" style="margin-left: 60px;">
				<p><?php echo htmlentities(nl2br(trim($data['poster']))); ?></p>
			</div>
			<div class="sub-userContent" style="margin-left: 60px;">
				<div class="sub-userFooter" style="margin-top: 6px;">
					<p class="size11" style="color: #777;"><a href="" class="sub-userFooter-link" style="color: #0D5085;">J'aime</a> - <a href="" class="sub-userFooter-link" style="color: #0D5085;">Commenter</a> - <?php echo getRelativeTime($data['date']); ?></p>
				</div>
				<ul class="sub-userData" style="list-style-type: none;">
					<li>
						<i class="sub-userArrow" style="background: url(../img/top-sub-user.png);background-repeat: no-repeat;height: 5px;display: block;margin-top: 5px;margin-left: 60px;"></i>
					</li>
					<li class="sub-userItem" style="background-color: #B4CBDB;margin: 0;padding: 4px;">
						<img style="margin-bottom: -3px;" src="../img/upload/<?php echo $_SESSION['id']; ?>-mini.png" width="32" height="32" alt="" />
					</li>
				</ul>
			</div>
		</li>
	<?php }
}
mysql_free_result ($req);
mysql_close();
function getRelativeTime($date)
{
	$date_a_comparer = new DateTime($date);
	$date_actuelle = new DateTime("now");

	$intervalle = $date_a_comparer->diff($date_actuelle);

	if ($date_a_comparer > $date_actuelle)
	{
		$prefixe = 'Dans ';
	}
	else
	{
		$prefixe = 'Il y a ';
	}

	$ans = $intervalle->format('%y');
	$mois = $intervalle->format('%m');
	$jours = $intervalle->format('%d');
	$heures = $intervalle->format('%h');
	$minutes = $intervalle->format('%i');
	$secondes = $intervalle->format('%s');

	if ($ans != 0)
	{
		$relative_date = $prefixe . $ans . ' an' . (($ans > 1) ? 's' : '');
		if ($mois >= 6) $relative_date .= ' et demi';
	}
	elseif ($mois != 0)
	{
		$relative_date = $prefixe . $mois . ' mois';
		if ($jours >= 15) $relative_date .= ' et demi';
	}
	elseif ($jours != 0)
	{
		$relative_date = $prefixe . $jours . ' jour' . (($jours > 1) ? 's' : '');
	}
	elseif ($heures != 0)
	{
		$relative_date = $prefixe . $heures . ' heure' . (($heures > 1) ? 's' : '');
	}
	elseif ($minutes != 0)
	{
		$relative_date = $prefixe . $minutes . ' minute' . (($minutes > 1) ? 's' : '');
	}
	else
	{
		$relative_date = $prefixe . ' quelques secondes';
	}

	return $relative_date;
}
?>

	</ul>
</div>
Il est recharger au clic d'un lien, voici le code ajax :

[javascript]
J(".refresh").click(function() {J('.load-refresh').show();setTimeout(function() {;J.ajax({url: "../include/mur.inc.php",success:function(retour){J('#container').html(retour);J('.load-refresh').hide();} }); },1000);});

[/javascript]

Quand je clique sur le lien l'image :

<img style="margin-bottom: -3px;" src="../img/upload/<?php echo $_SESSION['id']; ?>-mini.png" width="32" height="32" alt="" />

ne s'affiche plus, et quand je réactualise la page avec le navigateur, l'image apparaît :shock:

Merci beaucoup si vous trouvez ce problème ;)

Re: Rechargement en ajax : erreur dans la requête php

Posté : 12 mars 2013, 01:37
par yann18
la ligne ci-dessous cache l’élément(qui est certainement la classe parente de img dans ton code) ayant pour classe .load-refresh :
[javascript]

//ligne à supprimer
J('.load-refresh').hide() ; //cette instruction masque l'élément dont la classe est .load-refresh
[/javascript]

En résumé, ta requête ajax est envoyée à la suite d'un clic. en cas de succès l’élément sur lequel la classe .load-refresh est associée est masqué à cause la fonction .hide();

Re: Rechargement en ajax : erreur dans la requête php

Posté : 12 mars 2013, 14:49
par nico44530
C'est cette image qui est concerné :

Code : Tout sélectionner

<img style="margin-bottom: -3px;" src="../img/upload/<?php echo $_SESSION['id']; ?>-mini.png" width="32" height="32" alt="" />
Mais elle n'est pas caché, c'est dans la requête, au rechargement ajax, la requête ne trouve plus l'id du membre connecté.
Si je recharge la page manuellement (sans ajax) l'id est bien trouvé et l'image s'affiche.

J('.load-refresh').hide() ; = C'est la class pour caché le gif qui fait le chargement.

Donc c'est une autre erreur dans la requête ou dans le javascript :(

Re: Rechargement en ajax : erreur dans la requête php

Posté : 13 mars 2013, 11:54
par damien_55
D'aprés ce que je comprends de ta dernière remarque, ça veut dire que ta requete ne transmet pas l'id du membre connecté donc ce qui t'es renvoyé ne prends pas en compte l'id du membre; Tu dois donc modifié ton code.

En fait, tu as ça ?
<div id="container">
        <ul class="user-data" style="margin-bottom: 20px;list-style-type: none;">
<?php
$base = mysql_connect ('*****', '************', '***************');  
mysql_select_db('*************', $base);
$sql = "SELECT * FROM wa_mur, wa_communaute WHERE id_membre=id ORDER BY date DESC;";
Mais quand tu clic, c'est tout ton <div id="container"> qui est recharger, étant donné que tu ne lui tansmet pas ta valeur d'id dans cette partie.
id_membre=id à quoi correspond ta valeur id ?

ça ne te renvoie rien. et pour le hide (comme le soulignait yann, c'est vrai. c'est caché au rechargement.

Transmets ta variable d'id à ../include/mur.inc.php

Re: Rechargement en ajax : erreur dans la requête php

Posté : 15 mars 2013, 17:03
par nico44530
Oui j'ai bien ça et ca ne fonctionne pas avec ce code :(

Re: Rechargement en ajax : erreur dans la requête php

Posté : 15 mars 2013, 17:53
par damien_55
Je ne penses pas m'etre mal exprimé. Tu n'as pas du bien lire ma remarque.

Evidement que ton code ne marche pas au rechargement.

Quand tu arrive sur ta page php, ton id est défini pour ta requete:
$sql = "SELECT * FROM wa_mur, wa_communaute WHERE id_membre=id ORDER BY date DESC;";
Mais lorsque tu clique sur ton bouton, tu lance le script qui est contenu dans ta page ../include/mur.inc.php et tu rapatries le résultat.

Sauf que dans ton cas et au vu de ton code, tu ne transmets pas a ton script ../include/mur.inc.php l'id de ton membre.

donc si tu as une requete du genre
WHERE id_membre=id
, elle ne peut rien te retourner (même a voir planté ta page) puisque id n'est pas défini.

Ce qui reviens a éxécuter une requete du type:
$sql = "SELECT * FROM wa_mur, wa_communaute WHERE id_membre= ORDER BY date DESC;";
, ce qui ne peut pas marcher.

Re: Rechargement en ajax : erreur dans la requête php

Posté : 15 mars 2013, 20:27
par nico44530
Donc dans ma requête je dois faire :
$sql = "SELECT * FROM wa_mur, wa_communaute WHERE id_membre=id AND id='".$_SESSION['id']."' ORDER BY date DESC;";
??

Re: Rechargement en ajax : erreur dans la requête php

Posté : 15 mars 2013, 20:52
par damien_55
A mon sens, tu as un probleme sur les notions de variables en PHP. tu n'as pas bien compris ce qu'était une variable et le fonctionnement des appels dynamique et de récupérer des variables dans une page ou les transmettre a d'autre.

Par exemple, je pense que si tu testes ta requete:
SELECT * FROM wa_mur, wa_communaute WHERE id_membre=id
dans ton phpmyadmin, elle ne fonctionnera pas.

Je me demande meme si elle fonctionne sur ta page qui est censé etre dynamique ou alors c'est que dans ta colonne id_membre de ta table, tu as un champ qui est rempli avec id. Si tel est le cas, il faut que tu revois la création de base mysql et que tu potasses un peu le couple PHP/Mysql. En général, ""id est réservé a la clé de ta base.

renseigne toi aussi sur la notion de variable en php ($) et les pages dynamiques.

Je suis désolé de ne pas prendre plus de temps mais là, je crois qu'il faut que tu lises un peu.

J'ai vu tes différents posts et vouloir apprendre, c'est bien mais apprendre PHP/mysql et en plus ajax. la ça va devenir trés compliqué pour toi. Je te conseille de bien voir les 2 notions que je viens de citer surtout les variables PHP et comment jouer avec. Sinon, tu ne t'en sortiras pas.

je reste dispo.

Re: Rechargement en ajax : erreur dans la requête php

Posté : 15 mars 2013, 23:17
par nico44530
Pourtant, cette requête fonctionne, elle sert à afficher les posts des membres. Je l'ai testé sur phpmyadmin, elle m'affiche les posts et les membres qui ont postés.
J'ai pas mis de "$" au variable id_membre et id, j'ai pris cette requête sur un tuto qui fonctionne, c'est vrai que c'est mieux de mettre des "$" ;)

Pour moi le php je le comprend mieux sur le tas, en faisant directement des requêtes et en lisant des bons tutos qui fonctionne.
J'ai déjà lu le tuto PHP / Mysql sur siteduzéro, il y a des choses que je sais pas et dès qu'on me le montre, je n'ai pas besoin de le comprendre plusieurs fois (ou très peu)

Je me sert des forum pour comprendre mes erreurs que je ne referais plus.
Je sais transmettre une variable, récupérer sa valeur, l'écrire aussi ^^

Mais je vais relire quand même le site du zéro pour approfondir les bases :)