Correction petite erreur MySQL/php svp. [Résolu/Fermé]

Signaler
-
Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
-
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.

8 réponses

Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

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 ?
Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
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.
Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
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
Merci beaucoup pour ton explication Dr Zoidberg ! Je vais donc continué comme cela et je testerais ta méthode au passage. Bonne soirée.
Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
De rien, bon courage
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]; ?
Messages postés
528
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
98
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].