Correction petite erreur MySQL/php svp.

Résolu/Fermé
alphonse - 14 mai 2009 à 22:29
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 - 17 mai 2009 à 20:31
Bonjour, voila pour le boulot j'ai un petit soucis :

<?php
$dp = mysql_connect ("localhost", "root", "" );
mysql_select_db ("fixie");

$sql = "SELECT SUM titre FROM inscription WHERE titre="mme" AND titre="mle"";
$result = mysql_query($sql);
$champs = mysql_num_fields ($result);
$enregistrement = mysql_num_rows($result);


$sql = "SELECT SUM titre FROM inscription WHERE titre="mr"";
$result = mysql_query($sql);
$champs = mysql_num_fields ($result);
$enregistrement2 = mysql_num_rows($result);

echo "Bonjour, Nous sommes actuellement $enregistrement" filles et $enregistrement2 garçons présents sur le site.";

mysql_close($dp);
?>

Alors déjà j'ai une erreur dans la requête SQL... Wamp me l'a signalé. Mais une parenthèse ? Un Truc mal placé ? Je n'ai pas trouvé.

Ensuite peut-on mettre plusieurs demandes $enregistrement et $enregistrement2 dans la meme fonction PHP... Ou les requêtes vont s'emmêler ?

Merci de m'éclaircir.
A voir également:

8 réponses

Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
14 mai 2009 à 22:37
Salut,

Oula plein de problèmes dans tes requetes,
Perso j'aurai fait un truc comme
$sql = "SELECT titre, count(*) FROM inscription GROUP BY titre";
$result = mysql_query($sql);
foreach( $row = mysql_fetch_row($result)){
   $titres[$row[0]] = $row[1];
}
$nb_filles = $titres['mlle']+$titres['mme'];
$nb_homme = $titres['mr'];

A adaptater biensur
1
Ah... Alors c'est Count à la place de SUM pour le nombre d'enregistrement correspondants. J'avais bon ...
Et je ne connaissais pas le GROUP BY et le $titres[$row[0]] = $row[1]; ...

Je ne voulais pas non plus copier sur d'autre sites... Donc ma méthode, n'est vraiment pas recommandée ? Quels sont mes autres erreurs ?
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
14 mai 2009 à 22:51
Pour tes erreurs :

Effectivement count et pas sum, sum c'est pour faire une somme de nombres et ton champs titre n'est pas un nombre.

Pour ta première requête ca serait un OR et non un AND car un enregistrement dans ta table ne peut pas avoir titre='mlle' ET titre='mme'

Et pour tes deux requêtes :
$sql = "SELECT SUM titre FROM inscription WHERE titre='mme' OR titre='mle'"; 

Avec des apostrophes simples sinon ta chaine PHP et fermée et réouverte, ton erreur PHP venait de là.

A part ca ta méthode marchera, mais elle effectue deux requêtes sur la base, la mienne seulement une, c'est un peu plus optimiser mais ce n'est pas bien grave.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
14 mai 2009 à 22:54
J'ai oublié des erreurs :-)
Pour récupérer ta valeur après une requête :
$sql = "SELECT count(*) FROM inscription WHERE titre='mr'";
$result = mysql_query($sql);
$champs = mysql_fetch_row ($result);
$enregistrement2 = $champs [0];

Pareil pour la première
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup pour ton explication Dr Zoidberg ! Je vais donc continué comme cela et je testerais ta méthode au passage. Bonne soirée.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
14 mai 2009 à 22:59
De rien, bon courage
0
ReBonjour.

Voila j'ai testé ma technique , sa marche ... Et j'aurais besoin de la tienne comme par la suite j'aurais une dizaine de champs à sélectionner... En voila 3.

$sql = "SELECT titre, count(*) FROM inscription GROUP BY hdispo";
$result = mysql_query($sql);
foreach( $row = mysql_fetch_row($result)){
$hdispo[$row[0]] = $row[1];
}
$matin = $hdispo['matin'];
$aprem = $hdispo['apres-midi'];
$soir = $hdispo['soir'];

Wamp me met une erreur à foreach( $row = mysql_fetch_row($result)){ .
Sa me parait pourtant bon . Mais a quoi sert $hdispo[$row[0]] = $row[1]; ?
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
17 mai 2009 à 20:31
A mon avis c'est ta requête qui n'est pas bonne.
Et tu n'as pas mis en place de vérification du retour de mysql_query pour la valider.
Rajoute apres la ligne $result = mysql_query($sql);
quelque chose comme
if(!$result)die(mysql_error());

C'est le group by qui est erroné dans ta requête, je mettrais
SELECT titre, count(*) FROM inscription GROUP BY titre


$hdispo[$row[0]] = $row[1]; Monte un tableau avec la première colonne du résultat comme clé associée à la deuxième colonne:
Par exemple au premier tour du while : $hdispo['matin'] = 10, au deuxiemme $hdispo['soir'] = 5 ...
Et tu retrouves bien tes valeurs en faisant un $hdispo[$cle].
0