Problème de traitement de requetes

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 : Problème de traitement de requetes

par Ryle » 22 janv. 2008, 16:51

lol :)

Certes, mais d'un autre côté t'en a profité pour bien optimisé le code, et pour ça, on perds jamais assez de temps :) (ouéé ben on sait jamais, ça peut passer comme argument ;))

Je passe le sujet en résolu puisque tu l'as posté en tant qu'invité. N'hésites pas à t'inscrire pour pouvoir le faire toi même les prochaines fois :)

par Myself_o » 22 janv. 2008, 16:07

comment on dit déjà ? ah oui ! "OMG "

Merci infiniment a toi, tu m'enleves un pieu de l'orteil là...
Perdre 3 heures pour des guillemets, heureusement qu'ils suivent pas ce que je fais dans ma boite.............

Merci encore ; )

par Ryle » 22 janv. 2008, 15:59

Aïta !! :)

Le compte est bon, regarde le code source de ta page ;)

Le problème vient de l'absence des guillemets finale de l'attribut href="" dans ton lien. Du coup il considère que le lien n'est pas terminé et colle tout le reste dans la balise... :)

par Myself_o » 22 janv. 2008, 15:38

Jvais vais mettre la page entière, au cas où y ai un truc qui aille pas :
<?php
//Connection au serveur mySQL
$result=mysql_connect('127.0.0.1','$usr','monpw');

if ($result==FALSE)
	echo "Impossible de se connecter au Serveur mySQL";
else {
//Selection de la base
$result=mysql_select_db('fpcmazzer');
if ($result==FALSE)
	echo "Probleme de connection mySQL : mauvais nom de base de donnée";
else {


// sql contient la requete principale
$sql = 'SELECT * FROM chantier, client WHERE chantier.client_ID = client.client_ID AND chantier_etat = "devis"';

//Envoi de la requete
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

//boucle permettant de parcourir chaque enregistrement dela requete
while ( $data=mysql_fetch_array($req) ) {
  //affichage des résulats


//Si je met : "echo $data['client_nom'].'<br>';" , ça m'affiche le bon nombre de fois les nom des clients
//Tandis que dans le code qui suit, ça m'en met que la moitié ( mieu : ça m'en affiche 1 sur 2 selon l'ordre présenté dans phpmyadmin )
echo 'Client : '.$data['client_nom'].'<br>Adresse du chantier : '.$data['chantier_rue'].' '.$data['chantier_CP'].' '.$data['chantier_ville'].'<br><a href="http://192.168.0.222/chantiers/chantier_'.$data['client_nom'].$data['chantier_ID'].'.php>Voir fiche chantier</a><br><br>';

} 
	echo "</body>";
}
}
mysql_close();
?>

par d0m » 22 janv. 2008, 15:34

essaies voir en faisnt une première requête qui selectione les identifiants de clients et en stockant ceux ci dans un tableau

Ensuite faire une seule deuxième requête qui va chercher les clients dont l'identifiants est dans l'énumération du contenu du tableau.
$id_clients = array();
$sql='SELECT client_ID FROM chantier WHERE chantier_etat = "encours" ORDER BY chantier_ID';
//Envoi de la requete
$retour=mysql_query($sql);
//boucle permettant de parcourir chaque enregistrement dela requete
while ($data=mysql_fetch_array($retour)){ 
  $id_clients[] = $retour|'client_ID'];
}
$sql="SELECT * FROM client WHERE client_ID IN (".implode(','$id_clients).")";
$req=mysql_query($sql); 
En plus cela te permet de faire 2 requêtes quelque soit le nombre de clients retourné par la première requête.

par Ryle » 22 janv. 2008, 15:26

vraiment bizare.... et si tu joues la nouvelle requête dans MySQL ou phpMyAdmin, t'obtiens le bon résultat ? Montre nous éventuellement le nouveau code, tu as peut être mysql_fetch en trop qui traine ?

par Myself_o » 22 janv. 2008, 15:09

Je viens d'essayer avec la requete :
$sql = 'SELECT * FROM chantier, client WHERE chantier.client_ID = client.client_ID AND chantier_etat = "devis" ORDER BY chantier_ID';
et donc en enlevant la seconde requete et en me servant que de celle là, et le résultat est le même.

La je me pose vriament des questions étant donné que j'en ai fais plein des affichages dans ce genre dans d'autres pages...

Si tu / vous voyez ce qui pourrai provoquer ça...

par Myself_o » 22 janv. 2008, 14:48

oui j'ai fais ce test déjà, mysql_num_rows() me renvoie bien le bon nombre d'enregistrement ( a savoir 2).
Mais ça ne m'en affiche qu'un !

si j'ai 4 enregistrement, mysql_num_rows() vaut 4, mais ça m'en affiche que 2.

C'est pour ça que je pensais que lorsque je me sers de la seconde requete grâce à mysql_fetch_object(), ça faisait pointer le pointeur (!) sur l'enregistrement suivant.

Et j'ai fais le tour des autres fonctions disponibles, j'ai pas trouvé mon bonheur...

par Ryle » 22 janv. 2008, 14:37

Disons qu'il vaut mieux éviter de mettre une requête à l'intérieur d'une boucle dont on ne maitrise pas le nombre d'occurence... maintenant on peut quand même essayer de comprendre pourquoi ça ne fonctionne pas :)

Affiche ce que retourne un mysql_num_rows($result); avant d'entrer dans ta boucle et regarde si tu as bien autant d'enregistrements retournés par ta requête que de lien affichés...

par myself_o » 22 janv. 2008, 14:10

Bon ben je vais essayer avec ta solution, en espérant que j'arrive a faire la bonne requete >.<.
Mais j'aurai bien aimé savoir au moins pourquoi ça marche pas.

Merci quand même !

par Ryle » 22 janv. 2008, 13:14

Pas vraiment d'explication à ton soucis, je vois pas ce qui peut clocher... par contre, plutôt que de refaire n requête dans ta boucle, pourquoi ne pas faire une seule requête avec une jointure et ainsi limiter le nombre de requêtes envoyées au serveur :)

Problème de traitement de requetes

par myself_o » 22 janv. 2008, 13:07

Bonjour tout le monde,

Je code un intranet pour une petite entreprise en php, me servant d'une bdd sql.

J'ai un problème avec le code suivant :
//$sql contient la requete principale
$sql='SELECT * FROM chantier WHERE chantier_etat = "encours" ORDER BY chantier_ID';
//Envoi de la requete
$retour=mysql_query($sql);
//boucle permettant de parcourir chaque enregistrement dela requete
while ($data=mysql_fetch_array($retour)){
//Création d''une nouvelle requete + envoi
$sql="SELECT * FROM client WHERE client_ID = ".$data['client_ID'];
$req=mysql_query($sql);
//stockage du résultat dans $rowClient
$rowClient = mysql_fetch_object($req);
//affichage des résulats
echo 'Client : '.$rowClient->client_nom.'<br>Adresse du chantier : '.$data['chantier_rue'].' '.$data['chantier_CP'].' '.$data['chantier_ville'].'<br>';
echo '<a href="http://192.168.0.222/chantiers/chantier_'.$rowClient->client_nom.$data['chantier_ID'].'.php>
Voir fiche chantier</a><br><br>';

}
Mon problème est que seulement la moitié des résulats s'affichent par rapport a ce que je voudrai, comme si lorsque je lançai la seconde requete (a l'interieur de la boucle), ça me déplaçai le pointeur de la première.

Voyez vous où se situe le problème ? ou y a-t-il une fonction pour faire revenir le pointeur en arrière ?

Merci pour votre aide...