Aide pour parcourir un résultat d'une requete SQL

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 15:07

Bonjour,

J'ai une requete SQL qui me retourne des valeurs numériques, que je mets dans un fetch array.
Ensuite j'ai une boucle (for) qui vérifie si ma valeur est égale à une des valeurs contenu dans mon fetch array. Si ma valeur est déjà dans la base je dois exécuter mon code, et s'il n'est pas dans la base, exécuter un autre code. Cela représente 2 cas de figure, et ne dois rentrer que dans 1 seul des cas.
Je sais pas si je suis bien clair, demandez moi si vous avez pas compris.

J'ai essayé différents algo mais j'y arrive pas, quelqu'un aurait une idée ?

Merci.

Mammouth du PHP | 702 Messages

13 déc. 2012, 15:34

montre nous ton code.


Mais je comprend pas trop tu as une requête sql qui te retourne des données que tu mets dans un array... Ok mais tu les compare a quoi ?

Car par défaut vu qu'ils viennent de ta base sql ils sont forcément dedans...

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 16:10

La requete récupère les ID des membres qui ont déjà posté quelque chose. Si c'est son tout premier poste et donc que dans la base son ID n'apparait pas, les champs doivent apparaitre vides, et s'il a déjà posté quelque chose, les champs sont pré remplis avec ce qu'il a saisi.
Donc enfait je compare le résultat de ma requete avec l'ID du login de la personne connectée, et s'il existe dans la base, ses données sont pré remplis, mais son ID n'est pas dans la base, les champs doivent apparaitre vides.
Modifié en dernier par nico_loin le 13 déc. 2012, 16:13, modifié 1 fois.

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 16:12

Je précise que y'a une table qui contient l'ID de la personne, son nom etc, et une autre table avec son ID et les valeurs qu'il a rentré, j'ai bien 2 tables différentes.

Mammouth du PHP | 702 Messages

13 déc. 2012, 16:17

ok si je comprends bien tu veux récupérer des données d'un membre dans deux tables c'est bien cela ?

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 16:26

Non, je récupère l'ID des personne qui ont déjà posté quelque chose.
Si l'ID de la personne est dans la base c'est qu'elle a déjà posté quelque chose.
Dans ce cas j'affiche ce qu'elle a posté.
Si l'ID n'est pas dans la base, c'est qu'elle n'a jamais rien posté et dans ce cas j'affiche le formulaire vide.

Moi j'ai fait ca pour l'instant mais ca marche pas quand la personne a jamais rien posté, ça n'affiche pas le formulaire.
while ($valeur = mysql_fetch_array($maRequete)) {
for ($i=0 ...) { // pour parcourir $valeur
if ($valeur[$i] != $_SESSION['id']) {
break; // comme ca si la personne n'a jamais posté, on fait rien pour l'instant
} elseif ($valeur[$i] == $_SESSION['id']) {
// ici j'affiche le formulaire pré rempli vu qu'on a trouvé son ID dans la base
} elseif ($valeur[$i] != $_SESSION['id']) {
// afficher le formulaire non rempli
}
}
}
Avec ce code lorsque la personne n'a jamais rempli le formulaire, le formulaire vide devrait s'afficher mais rien ne s'affiche. Par contre si elle a déjà rempli, le formulaire s'affiche bien pré rempli.

Mammouth du PHP | 702 Messages

13 déc. 2012, 16:43

dans ce cas tu fais un
$sql="SELECT COUNT(*) FROM `table_name` WHERE id = '".mysql_real_escape_string($_GET['id'])."'"
en SQL et si le résultat est à zéro alors tu affiche le formulaire, sinon tu display les messages déjà postés.

La fonction COUT va compter le nombre d'enregistrements (recordset) de la base de donnée selon les critères que tu lui mets dans la clause WHERE.

Si c'est égal à 0 tu mets le formulaire else tu met les commentaires.

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 16:52

Ok je vois ce que tu veux dire,
je fais donc ma requete, ensuite je fais un mysql_query pour l'executer, puis je fais un mysql_fetch_array ?

Mammouth du PHP | 702 Messages

13 déc. 2012, 16:59

non tu t'en fous tu n'a plus besoin de cela... c'est une usine à gaz ton truc...

Pour faire simple:


tu as ton array de base.

que tu récupère...

A parti de ce tableau

tu fais un
<?php
foreach ($value as $cle) {
    $sql = "SELECT COUNT(*) FROM `table_name` WHERE id = '" . mysql_real_escape_string($cle['id']) . "'";
    $result = mysql_query($sql);
    $data = mysql_fetch_assoc($result);
    if ($data == 0) {
// Tu affiches ton formulaire
    } else {
// Tu affiche les commentaires des gens qui ont déjà posté.
    }
}
?>    

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 17:12

J'arrive pas à comprendre,
déjà j'enlève le while et for que j'avais ?
donc là j'ai plus que la requete dans mon foreach, puis je fais le if / else ?

Mammouth du PHP | 702 Messages

13 déc. 2012, 17:16

non j'ai bien dis à partir de ton array...

Donc cela signifie que tu as déjà récupéré les infos de ton array.

Ensuite avec ce tableau tu l'exploite selon la structure que je t'ai mis en exemple.

une fois que tu as récupéré ton $array tu as plus qu'à le parcourir ...

Avec le foreach que je t'ai donné.

ainsi il va tester pour chaque Id si elle existe.

Donc si tu as des résultats tu affiche les commentaires, sinon si comme tu le vois
$data==0 
tu affiche le formulaire (cela signifie qu'on a pas d'enregistrements)

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 17:31

Enfait c'est le foreach qui me pose probleme j'arrive pas à voir à quoi correspond $valeur et $cle ?

Mammouth du PHP | 702 Messages

13 déc. 2012, 17:36

$valeur c'est ton array de base $cle est un alias que tu utilise...

Tu n'en n'a en fait pas vraiment besoin mais ça t'évite d'écrire un truc du gere $array[0][nom]
car tu utilise un alias.

Du coup tu as ton $array et tu peux utiliser l'alias que tu veux par exemple moir j'ai un $array qui correspond à des voitures
je peux faire
 foreach($array as $voiture)
en suite dans la boucle j'aurais par exemple
foreach($array as $voiture)
{
 echo $voiture['marque'] ;
}

Eléphanteau du PHP | 16 Messages

13 déc. 2012, 18:03

J'ai enfin réussi, je me cassait trop la tête pour rien ! Merci pour ton aide !

Mammouth du PHP | 702 Messages

13 déc. 2012, 18:05

tu as mal compris la structure de départ je pense que tu t'es embrouillé les pinceaux avec tonb array de base (la requête avec mysql_fetch_array($result))

et la façon dont tu parcours cet array.