Affichage d'un résultat SQL avec formulaire (html/php/sql)

Fermé
dipdip - 3 oct. 2013 à 03:01
 dipdip - 3 oct. 2013 à 15:25
Bonjour,

Je me permet de venir poser ma question car après plusieurs jours de bataille avec mon code (je débute) je n'arrive pas à afficher un résultat. Pourtant je ne veux rien de compliquer, j'ai un formulaire en html qui permet d'effectuer une recherche dans ma base de données. Les utilisateurs sélectionnent ainsi 3 paramètres puis je voudrais transposer ces choix dans une requête SQL pour afficher le résultat souhaité. Pour faire simple c'est un formulaire de recherche qui doit afficher un résultat unique en fonction de trois critères.

Je précise que ma base de données ne comporte qu'une seule table de 16 champs.

En l'état actuel des choses, mon code me renvoi toujours le même résultat (qui n'en est pas un) = Array

Merci à vous !

Code html du formulaire :




<form method="post" action="">

<div class="cfg-contactform" id="cfg-contactform-28">

<div class="cfg-contactform-content">


<div class="cfg-element-container" align="center">



<label class="cfg-label" id="cfg-element-28-23-label" ><span class="cfg-label-value">Mesure recherchée</span></label>

<div class="cfg-element-set" id="cfg-element-28-23-set" >
<div class="cfg-element-content">
<select class="cfg-type-select cfg-form-value " name="objet" id="cfg-element-28-23" width="80%" style="width: 80%">
<option value="ph" >Mesure du pH</option>
<option value="chloreact" >Chlore combiné</option>
<option value="dpd1" >Mesure D.P.D.1</option>
<option value="chlorecomb" >Chlore combiné</option>
<option value="floculation" >Floculation</option>
<option value="algicide" >Algicide</option>
<option value="meteo" >Météo</option>
<option value="temp" >Température</option>
<option value="qualite" >Qualité de l'eau</option>
<option value="apport" >Apport d'eau</option>
<option value="cumul" >Cumul (m3)</option>
<option value="recirculation" >Recirculation (m3/h)</option>
<option value="cumul2" >Cumul (m3/h)</option>
<option value="filtres" >Lavage des filtres</option>
<option value="observations" >Observations</option>
</select>
</div>
</div>

<div class="cfg-clear" align="center"></div>


<div class="cfg-element-container" align="center">

<label class="cfg-label" id="cfg-element-28-23-label" ><span class="cfg-label-value">Piscine concernée</span></label>

<div class="cfg-element-set" id="cfg-element-28-23-set" >
<div class="cfg-element-content">
<select class="cfg-type-select cfg-form-value " name="piscines" id="cfg-element-28-23" width="80%" style="width: 80%">
<option value="1" >Parempuyre</option>
<option value="2" >Pessac</option>
<option value="3" >Libourne</option>
<option value="4" >Bordeaux</option>
<option value="5" >Merignac</option>
</select>
</div>
</div>

<div class="cfg-clear" align="center"></div>


<div class="separateur" align="center"></div>
<div class="cfg-element-container" align="center">

<label class="cfg-label" id="cfg-element-28-6-label" ><span class="cfg-label-value">Date du relevé (format US : yyyy-mm-dd)</span></label>

<div class="cfg-element-set" id="cfg-element-28-6-set" width="80%" style="width: 80%" align="center" >
<div class="cfg-element-content">
<input type="text" class="cfg-type-text cfg-type-date cfg-form-value " name="date" id="cfg-element-28-6" value="" />
</div>
</div>
</div>



<div class="cfg-element-container" align="center">

<div class="cfg-element-set" id="cfg-element-28-5-set" >
<div class="cfg-element-content">
<input type="submit" class="cfg-submit " name="cfg-element-28-5" id="cfg-element-28-522" value="Lancer la Recherche" />
</div>
</div>



Mon formulaire se présente bien et lorsque l'utilisateur valide les choix le code php prend le relais, le voici :


<?php

// pour me connecter à ma base
include("fonctions.php");


if (isset($_POST['objet']) && isset($_POST['piscines']) && isset($_POST['date'])) {

//Je me connecte à ma base
connectMaBase();



// lancement de la requête
$sql = 'SELECT '.$_POST['objet'].' FROM mesures WHERE piscine = "'.$_POST['piscines'].'" AND date = "'.$_POST['date'].'"';


// requête (mysql_query)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()) ;

}



if (isset($_POST['objet']) && isset($_POST['piscines']) && isset($_POST['date'])) {
while($data = mysql_fetch_array($req)){


// là je veux afficher le résultat mais ... ça ne marche pas

echo $data;
}

mysql_close();

}

?>

</form>


J'ai essayé également de mettre echo $data['']; mais je ne sais pas trop quoi mettre au milieu vu que ma variable dépend du choix de l'utilisateur dans le formulaire. Dans mon résultat je veux faire apparaître le champ "objet" qui correspond à une mesure dans ma base SQL.

Merci à vous, n"hésitez pas à critiquer, j'ai pris des bouts de code à droite à gauche, j'ai consulté les manuels php mais certaines choses me paraissent compliqué pour moi et mes connaissances basiques du php.
A voir également:

6 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
3 oct. 2013 à 09:52
Salut,

Le résultat que tu vois en est bien un : c'est un tableau. Faire un echo sur un tableau affiche en effet "Array", si tu veux voir rapidement le contenu du tableau essaye de faire :
var_dump($data);

Comme tu l'as compris tu dois récupérer la valeur de ton tableau. Puisque que tu ne sélectionne qu'un seul champ dans ta requête sql, tu peux récupérer la valeur comme ceci :
$data[0]


Sinon quelques remarques en vrac :
- initialiser tes variables : tu vérifies bien que les variables $_POST venant du formulaire existe avec la fonction isset(), mais tu ne vérifies pas leurs contenu.
Si tes variables POST existe mais sont des chaines vides, ta requête sql sera incorrect et php renverra une erreur à l'exécution de cette requête.
- l'extension mysql est désormais dépréciée et vouée à disparaitre bientôt. Je te conseil d'utiliser l'extension mysqli à la place. En plus des avantages de cette extension (performance, moins de bug...), il te suffit juste de renommer tes fonctions mysql_*** par mysqli_*** :
mysql_connect() -> mysqli_connect()
mysql_query() -> mysqli_query()
ect...
- pour finir si tu souhaites sécuriser ton code, je te conseil de te renseigner à propos des injections sql mais c'est un autre sujet

Bon développement,
1
Salut,

Merci beaucoup pour la réponse, ça fonctionne !!!!


Par contre j'ai tenté de remplacer mysql par mysqli mais je rencontre l'erreur suivante :


Fatal error: Call to undefined function mysqli_connect() in /mnt/113/sdb/e/3/aquanetpiscines/fonctions.php on line 3

Je vais également me pencher sur les conditions IF pour vérifier si l'utilisateur a effectivement bien renseigné les champs et je vais étudier les injections SQL :-)

Encore merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
3 oct. 2013 à 12:08
Concernant l'erreur, tu es peut-être sur une ancienne version de php où l'extension mysqli n'était pas encore présente. Tu peux donc continuer à utiliser l'extension mysql.

Bonne journée
0
Re,

C'est exactement ça j'ai vérifié la version php et elle n'est pas à jour, il s'agit d'un serveur free.fr donc je suis limité mais bon l'essentiel est là puisque grâce à toi mon résultat s'affiche.

Si je peux abuser de ta gentillesse j'ai une dernière question :

phpmyadmin intègre les dates au format yyyy-mm-dd. Pour l'une de mes pages, l'utilisateur rentre une date au format français dd/mm/yyyy et j'ai réussi à la transformer grâce à ce code php au format anglosaxon avant intégration dans la base :


$date = implode('-', array_reverse(explode('/', $date)));




ça fonctionne nikel !


Par contre sur la page de recherche pour laquelle tu m'as aidé à afficher mon résultat l'utilisateur est obligé de mettre la date au format anglosaxon sinon la requête sql échoue dans la mesure où la date n'est pas au bon format, j'ai essayé de transformer une nouvelle fois cette date mais pour cette page le code ne fonctionne pas, comment puis-je faire pour transformer la date au format anglosaxon avant la recherche dans la base SQL par ma requ$ete SELECT ?

Merci à toi !
0

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

Posez votre question
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
3 oct. 2013 à 14:29
Si ta base de données gère les dates avec le formats yyyy-mm-dd et que l'utilisateur rentre la date en respectant ce format, tu n'as donc pas besoin de transformer cette date.
N'aurais tu pas pris le problème à l'envers ? Ou est-ce moi qui est mal compris ?

comment puis-je faire pour transformer la date au format anglosaxon ?
Tu viens de donner la réponse juste avant ;) :
$date = implode('-', array_reverse(explode('/', $date)));

Si tu souhaites faire l'inverse, transformer la date yyyy-mm-dd au format dd/mm/yyyy il te suffit de faire comme ceci :
$date = implode('/', array_reverse(explode('-', $date)));
0
Bon bah désolé lol mais en effet il y avait simplement quelques petits loupés dans mon code mais le système implode explode marche bien désormais !!

Un grand merci !!!!!

Je pense maintenant m'attaquer à une tâche plus complexe mais je n'ai rien commencé, je reviendrai sur le forum en cas de besoin. Je pense faire un formulaire permettant cette fois de récupérer certaines données dans ma table SQL et de traduire ces résultats sous forme de graphique pour voir rapidement l'évolution d'une variable dans le temps.

Peut être un peu trop compliqué pour moi mais qui ne tente rien n'a rien !!
0