Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1727 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Fonction allergique à une requête MySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Fonction allergique à une requête MySQL

n°1630050
Zoltan32
Posté le 24-10-2007 à 12:30:59  profilanswer
 

Bonjour à tous.
 
J'ai réalisé un chat PHP+MySQL auquel je rajoute actuellement une couche AJAX pour qu'il tourne en temps réel. Pour cela j'utilise Sajax ( http://www.modernmethod.com/sajax/ ).
Bon jusqu'à maintenant j'ai réussi à "dompter la bête". :D
J'arrive à réactualisé toutes les 2 secondes des valeurs de test. Exemple :

Code :
  1. require("Sajax.php" );
  2. function show_now() {
  3. $testmess="message";
  4. $testpseud="pseudo";
  5. $testtemps="123456";
  6. return'<p class=chatp> '.$testtemps.' <strong> '.$testpseud.' </strong>
  7. :<br /> '.$testmess.' </p>';
  8. }


Et le code Javascript :

Code :
  1. function show_me(date_server) {
  2.               document.getElementById("chatdiv" ).innerHTML = date_server;
  3.       }
  4.       function get_date() {
  5.               //put the return of php's show_now func
  6.               //to the javascript show_me func as a parameter
  7.               x_show_now(show_me);
  8.               //do it every 1 second
  9.               setTimeout("get_date()", 2000);
  10.       }


Ca ça marche très bien. :) (bon les noms de valeurs (get_date, etc.) sont un peu bizarres mais c'est un code repris et comme je n'avais pas vraiment à y toucher j'avais la flemme de les changer :D ).
 
Maintenant, en lieu et places des valeurs de test, je voudrais afficher des valeurs issues de ma base MySQL (puisque les conversations du chat sont stockées dedans).
Et là problème. :/
Voici ma requête :

Code :
  1. $reponse = mysql_query("SELECT * FROM chat_prive WHERE conv_from = $am_from && conv_to = $am_to || conv_from = $am_to && conv_to = $am_from ORDER BY conv_id DESC LIMIT 0,50" ) or die(mysql_error());


Dans la version non-AJAX de mon chat elle fonctionne très bien donc le problème ne vient pas de là.
Si je place ma requête avant la fonction, elle ne retourne aucune valeur. Et si je la place dans la fonction, la fonction ne s'exécute plus. :sweat:
A noter que j'ai bien pris soin auparavant d'initialiser toutes les valeurs demandées par la requête, donc ce n'est pas non plus le problème.
 
Voici la totalité du code pour les curieux (enfin seulement la partie qui pose problème) :

Code :
  1. <?php
  2. require("Sajax.php" );
  3. session_start();
  4. include("includes/identifiants.php" );
  5. mysql_connect($adresse, $nom, $motdepasse);
  6. mysql_select_db($database);
  7. $membre = (int) $_GET['m'];
  8. $ami = $_GET['a'];
  9. if ($ami == 1) {
  10. $am_from = $_SESSION['id'];
  11. $am_to = $membre;
  12. }
  13. else if ($ami == 2) {
  14. $am_from = $membre;
  15. $am_to = $_SESSION['id'];
  16. }
  17. else if ($ami != 1 && $ami != 2 || !isset($ami)) {
  18. echo '<a href ="./index.php">Index du forum</a><br />Une erreur est survenue.';
  19. exit();
  20. }
  21. function show_now() {
  22. $reponse = mysql_query("SELECT * FROM chat_prive WHERE conv_from = $am_from && conv_to = $am_to || conv_from = $am_to && conv_to = $am_from ORDER BY conv_id DESC LIMIT 0,50" ) or die(mysql_error());
  23. $testmess="message";
  24. $testpseud="pseudo";
  25. $testtemps="123456";
  26. return'<p class=chatp> '.$testtemps.' <strong> '.$testpseud.' </strong>
  27. :<br /> '.$testmess.' </p>';
  28. }


Voilà donc j'aimerais bien savoir comment intégrer ma requête MySQL pour qu'elle soit utilisée dans la fonction.
Merci d'avance pour vos réponses. :jap:

Message cité 1 fois
Message édité par Zoltan32 le 24-10-2007 à 14:54:50
mood
Publicité
Posté le 24-10-2007 à 12:30:59  profilanswer
 

n°1630098
micfont999
Simplement Moi
Posté le 24-10-2007 à 13:16:17  profilanswer
 

bonjour,
je dis surement une connerie, mais pourquoi ne pas changer les && et les || par des AND et des OR??

n°1630139
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-10-2007 à 13:41:47  profilanswer
 

Zoltan32 a écrit :


A noter que j'ai bien pris soin auparavant d'initialiser toutes les valeurs demandées par la requête, donc ce n'est pas non plus le problème.


Bin si :o
http://fr.php.net/manual/fr/langua [...] .scope.php

n°1630178
Zoltan32
Posté le 24-10-2007 à 14:13:59  profilanswer
 

Ah ok je ne savais pas pour le coup des variables locales (je débute :ange: ), merci ça marche maintenant. ;)  
 
Sauf que... :whistle:  
 
Dans la version non-AJAX j'utilisais le code suivant pour afficher la conversation :

Code :
  1. $reponse = mysql_query("SELECT * FROM chat_prive WHERE conv_from = $am_from && conv_to = $am_to || conv_from = $am_to && conv_to = $am_from ORDER BY conv_id DESC LIMIT 0,50" );
  2. while ($donnees = mysql_fetch_array($reponse) )
  3. {
  4. $temps = date("(d/m/y H:i) ", $donnees['conv_date']);
  5. $mess = ' '.code($donnees['conv_texte']).' ';
  6. $mess = stripslashes($mess);
  7. echo'<p class=chatp> '.$temps.' <strong> '.$donnees['conv_pseudo'].' </strong>
  8. :<br /> '.$mess.' </p>';
  9. }


(le code($donnees['conv_texte']) c'est une fonction pour du bbcode).
 
J'ai remplacé le "echo" par "return" puisqu'il s'agit d'une fonction, et visiblement maintenant il n'effectue le "while" qu'une seule fois, c'est-à-dire qu'il ne me retourne que le dernier texte.
Je peux me tromper, mais je pense que c'est parce que "return" ne peut retourner qu'une seule valeur, et donc les autres textes retournés sont écrasés par le dernier "return" effectué.
Mais dans ce cas, comment faire pour que les valeurs soient cumulées et que tous mes textes soient affichés (comme le faisait "echo" ) ?


Message édité par Zoltan32 le 24-10-2007 à 14:15:20
n°1630193
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-10-2007 à 14:28:11  profilanswer
 

Code :
  1. $truc = '';
  2. while ( ...){
  3. ...
  4. $truc .=  '<p class=chatp> '.$temps.' <strong> '.$donnees['conv_pseudo'].' </strong> :<br /> '.$mess.' </p>';
  5. }
  6. return $truc;

n°1630218
Zoltan32
Posté le 24-10-2007 à 14:50:45  profilanswer
 

Tu es mon dieu. :love:  
Merci beaucoup.
 
J'avais un dernier problème avec mes accents à cause du passage à l'AJAX, mais c'est bon c'est résolu :

Code :
  1. $mess = stripslashes(utf8_encode($mess));


:jap:

n°1630221
micfont999
Simplement Moi
Posté le 24-10-2007 à 14:54:55  profilanswer
 

Zoltan32 a écrit :

Tu es mon dieu. :love:


 
et bin si tout le monde était aussi reconnaissant ...
 
Pense à mettre le sujet en [Résolu] :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Fonction allergique à une requête MySQL

 

Sujets relatifs
[Resolu] Problème sur realboxLost connection to MySQL server during query
Passer une liste a une fonction?[Résolu] Soucis avec toggle Javascript
besion aide optimisation php mysql[Résolu] Lister les fichiers d'un dossier
caractères spéciaux - recherche php mysqlProblème requête between
Nuage de tag en php/mysql[SQL] Optimisation d'une réquète récursive
Plus de sujets relatifs à : [Résolu] Fonction allergique à une requête MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR