[RESOLU] Requete préparée

Eléphant du PHP | 96 Messages

30 juil. 2013, 16:13

Oui c'est pas grave pour le fichier css ;)

Dans mamp, vous pouvez modifier le fichier php.ini pour afficher les erreurs
il doit y avoir une directive à activer pour afficher les erreurs à l'écran :)

Code : Tout sélectionner

error_display
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

30 juil. 2013, 16:37

Dans le ficher php.ini
sous [MySQL] ?
Je mets juste tel quel
error_display
ou
error_display = on

Eléphant du PHP | 96 Messages

30 juil. 2013, 17:39

non pas dans mysql, dans le fichier ini de php, sur mamp il doit y avoir un accès à ce fichier
il faut mettre égal à on (off par défaut ;) )
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

30 juil. 2013, 18:02

oui, oui, j'ai bien trouvé le fichier ini.php
ce que je voulais dire, c'est qu'il y a plusieurs parties dont 1 qui est [MySQL]. Je me demandais s'il fallait le mettre là dessous

mais du coup, j'ai créé une nouvelle partie [Error reporting], comme ci-dessous

j'ai vérifié, il n'y avait rien par défaut

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; Will be changed by MAMP to system timezone
date.timezone = "Europe/Berlin"

[Error reporting]
error_display = on

j'ai arrêté les serveurs, les ai redémarré
j'ai provoqué une erreur dans ma page cible
je regarde dans le dossier log de MAMP
j'ai bien un fichier mysql_error.log
mais il semble qu'il ne se mette pas à jour quand je recommence l'erreur pour m'assurer que c'est bien ça.
j'ai une erreur mais du coup je ne sais pas si c'est ça...

130730 17:47:45 [Warning] You have forced lower_case_table_names to 0 through a command-line option, even though your file system '/Applications/MAMP/db/mysql/' is case insensitive. This means that you can corrupt a MyISAM table by accessing it with different cases. You should consider changing lower_case_table_names to 1 or 2

Eléphanteau du PHP | 31 Messages

30 juil. 2013, 18:06

error !!!
il y avait bien dans ce fichier :

display_errors = Off

je le mets sur on et j'efface le rajout que j'ai fait tout à l'heure
et je vous tiens au courant

Eléphanteau du PHP | 31 Messages

30 juil. 2013, 18:19

bon bah...

il est bien dit :

; Log errors to specified file.
error_log = "/Applications/MAMP/logs/php_error.log"

mais quand je vais voir dans ce fichier, il date de 13h18... et ne rapporte que des erreurs de syntaxe que j'ai corrigé depuis...

aaaaaaaaaah !!! je vais craquééééé !!! #-o

Eléphant du PHP | 96 Messages

30 juil. 2013, 19:22

Le display_error a on c est pour afficher les erreurs a l écran ;)
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

31 juil. 2013, 08:52

Bonjour !!! c'est reparti ...
y a pas d'erreur à l'écran...
et c'est pas une page blanche, mais il n'y a aucun résultat dans MIN, MAX et MOY si je ne sélectionne pas une valeur pour les 2 critères (pH et sol, les 2 seuls que j'ai mis pour l'instant), alors que ça fonctionne avec une requête directement dans mysql...

Eléphanteau du PHP | 31 Messages

31 juil. 2013, 09:15

Par contre, j'ai des valeurs aberrantes dans le résultat de mes requêtes sous mySQL...

SELECT NEMATO.PHYTO_FALC, SITE.CODE_REPET, SITE.LAND_USE, SITE.PH_EAU FROM SITE INNER JOIN NEMATO ON NEMATO.CODE_REPET = SITE.CODE_REPET
WHERE SITE.LAND_USE='P' AND SITE.PH_EAU=1

PHYTO_FALC CODE_REPET LAND_USE PH_EAU
54,8106651306152 YVPP_1 P 1
39,2353172302246 YVPP_2 P 1
74,6318283081055 YVPP_3 P 1
69,4191970825195 YVPP_4 P 1
164,094131469727 YVSI_1 P 1
120,115745544434 YVSI_2 P 1
136,429275512695 YVSI_3 P 1
170,675689697266 YVSI_4 P 1
772,257629394531 YVSII_1 P 1
449,617004394531 YVSII_2 P 1
1065,26733398438 YVSII_3 P 1
745,603698730469 YVSII_4 P 1
103,237464904785 AUPTE_1 P 1
138,152587890625 AUPTE_2 P 1
223,621078491211 AUPTE_3 P 1
113,576011657715 AUPTE_4 P 1
26,4521789550781 ANP_2 P 1

mais quand je fais :

SELECT MIN(PHYTO_FALC), SITE.CODE_REPET, SITE.LAND_USE, SITE.PH_EAU FROM SITE INNER JOIN NEMATO ON NEMATO.CODE_REPET = SITE.CODE_REPET
WHERE SITE.LAND_USE='P' AND SITE.PH_EAU=1

Il me sort :

MIN(PHYTO_FALC) CODE_REPET LAND_USE PH_EAU
103,237464904785 YVPP_1 P 1

????

Eléphant du PHP | 96 Messages

31 juil. 2013, 10:06

Plusieurs choses:

1. afficher la requete finale, afin de verifier sa bonne construction
2. pour le min/max, essayer de convertir : il fait peut etre une comparaison type chaine: essayer avec un
MAX(CONVERT(INT,monchamp))
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

31 juil. 2013, 11:13

Bon, je suis en train de réimporter mes fichiers de résultats, car je me suis rendu compte (erreur de débutant, la honte :oops: ) que mes champs décimaux étaient en varchar, à cause des virgules à la place des points... d'où certainement les erreurs sur les requêtes...

Eléphant du PHP | 96 Messages

31 juil. 2013, 11:24

D'où ma proposition de conversion au moment du max ;)
Cela fonctionne aussi
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

31 juil. 2013, 12:33

Oui, mais ça m'affichait une erreur sur la requête...
Bon, je n'ai plus d'aberration dans le résultat des requêtes, mais je n'ai toujours pas de résultat si je ne sélectionne aucun critère, ou juste 1 sur les 2
et je n'ai pas de code d'erreur sur ma page

Je me permet de remettre le code en entier, si jamais vous voyiez quelque chose...
<?php
if (isset($_POST["choix"]) && $_POST["choix"] != "") {
                //Si c'est la flore qui est voulue
                if ($_POST["choix"] == "flore1") {
                               $requete = "SELECT MIN(INDICE_REL) as minfl1, MAX(INDICE_REL) as maxfl1, AVG(INDICE_REL) as moyfl1 FROM FLORE_AG INNER JOIN SITE ON FLORE_AG.CODE_MODALITE = SITE.CODE_MODALITE";
                }
                //Si c'est la némato qui est voulue
               elseif ($_POST["choix"] == "faune2") {
                               $requete = "SELECT MIN(PHYTO_FALC) as minf21, MAX(PHYTO_FALC) as maxf21, AVG(PHYTO_FALC) as moyf21, MIN(PHYTOPARA) as minf22, MAX(PHYTOPARA) as maxf22, AVG(PHYTOPARA) as moyf22, MIN(BACT_TOT) as minf23, MAX(BACT_TOT) as maxf23, AVG(BACT_TOT) as moyf23 FROM NEMATO INNER JOIN SITE ON NEMATO.CODE_REPET = SITE.CODE_REPET";
                }
                }

//on teste ensuite pour savoir si un critère a été sélectionné
$where=0;
if (isset($_POST["sol"]) && $_POST["sol"] != "") {
        $where=1;
        $requete = $requete.' WHERE LAND_USE=\''.$_POST["sol"].'\' ';
}
if (isset($_POST["ph"]) && $_POST["ph"] != "") {
        if($where==1){ $requete = $requete . ' AND '; }else{ $requete=$requete.' WHERE '; }

        $requete = $requete.' PH_EAU=\''.$_POST["ph"].'\' ';
}
 
//A la fin des tests, la variable est forcément renseignée > on va chercher les résultats
$reponse = $bdd->query($requete);

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch()){
	if ($_POST["choix"] == "flore1") {
?>
    <p><strong>Flore : INDICE Oméga 3</strong> (valeurs relatives)<br><br>
    MIN : <?php echo $donnees['minfl1']; ?> <br />
    MAX : <?php echo $donnees['maxfl1']; ?> <br />
    MOY : <?php echo $donnees['moyfl1']; ?> <br />
   </p>
	
<?php
}
	elseif ($_POST["choix"] == "faune2") {
?>
    <p><strong>Faune : Nématodes</strong><br><br>
    Phytophages facultatifs / Groupe trophique (ind 100 g-1 ss)<br>
    <blockquote>MIN : <?php echo $donnees['minf21']; ?><br>
    MAX : <?php echo $donnees['maxf21']; ?><br>
    MOY : <?php echo $donnees['moyf21']; ?></blockquote><br>
    Phytoparasites / Groupe trophique (ind 100 g-1 ss)<br>
     <blockquote>MIN : <?php echo $donnees['minf22']; ?> <br>
    MAX : <?php echo $donnees['maxf22']; ?> <br>
    MOY : <?php echo $donnees['moyf22']; ?> </blockquote><br>
    Bactérivores totaux / Groupe trophique (ind 100 g-1 ss)<br>
     <blockquote>MIN : <?php echo $donnees['minf23']; ?> <br>
    MAX : <?php echo $donnees['maxf23']; ?> <br>
    MOY : <?php echo $donnees['moyf23']; ?> </blockquote><br>
   </p>
	
<?php
}
}
$reponse->closeCursor(); // Termine le traitement de la requête
 
?>

Eléphant du PHP | 96 Messages

31 juil. 2013, 12:43

Oui l'erreur devait provenir du convert, j'avais indiqué integer, mais en mysql cela doit etre INT ou quelquechose comme ca

Pour aider à debuger je vous invite à afficher la requete exécutée: juste avant de l'executer dans mysql, faites un echo de la variable $requete pour comprendre pourquoi elle ne retourne rien ;)
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

Eléphanteau du PHP | 31 Messages

31 juil. 2013, 12:55

ah bah alors ça !!! (well done imikado !! =D> )

SELECT MIN(INDICE_REL) as minfl1, MAX(INDICE_REL) as maxfl1, AVG(INDICE_REL) as moyfl1 FROM FLORE_AG INNER JOIN SITE ON FLORE_AG.CODE_MODALITE = SITE.CODE_MODALITE WHERE LAND_USE='Indifférent' AND PH_EAU='Indifférent'

Il me sort un "indifférent" alors que je ne l'ai pas mis en valeur mais en libellé !!!

<select name="ph">
<option>Indifférent</option>
<option value="1"><6,5</option>
<option value="2">6,5-7,5</option>
<option value="3">>7,5</option>
</select>

Comment faire du coup, pour avoir un libellé "indifférent" sans qu'il me le prenne comme une valeur ???