Recuperer valeur input dans un SELECT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recuperer valeur input dans un SELECT

par Invité » 02 févr. 2006, 00:04

ça donne ça :

pour les newb comme moi, je poste l'htm et un des 3 php, ie matricule.php
Donc en fait, suivant les conseils d'un modo sur un autre post, j'ai essayé de passer les requetes sql dans phphmyadmin, et c'etait la que ça merdait ! je l'ai donc passé en variable pour simplifier le truc et zou on rentre a la maison ;-)
Merci a vous : )
<?php 
$MySQL_serveur = "localhost";//l'adresse du serveur MySQL
$MySQL_utilisateur = "root"; //le nom d'utilisateur
$MySQL_mdp = ""; //le mot de passe
$db="****"; //indiquer le nom de la base de données
$lien_base=mysql_connect($MySQL_serveur,$MySQL_utilisateur,$MySQL_mdp);
?>

<?php
mysql_select_db('****');
?>


<?php

$matricule=$_POST['matricule'];
$sql = "SELECT * FROM subvention WHERE matricule='$matricule'";
$req = mysql_query($sql) or die('Erreur SQL! <br>'.$sql.'<br>'.mysql_error());

while($data = mysql_fetch_array($req))
{ 
echo '<strong>'.$data['matricule'] .'</strong><br>';
echo '<strong>'.$data['nom'] .'</strong><br>';
echo '<strong>'.$data['prenom'] .'</strong><br>';
echo '<i>'.$data['spectacle'] .'</i><br>';
echo '<i>'.$data['montant'] .'</i><br>';
echo '<i>'.$data['mois'] .'</i><br>';
echo '<i>'.$data['divers'] .'</i><br>';
}
?>


____________________________RECHERCHE.HTM_______

<html>
<head>
<title>Recherche</title>
<head>
<body>


<font face="Arial" size="2">


<form method="post" action="matricule.php">
Recherche par Matricule <input type="text" name="matricule">
<input type="submit" value="ok">
</form>


<form method="post" action="annee.php">
Recherche par année <input type="text" name="annee">
<input type="submit" value="ok">
</form>


<form method="post" action="nom.php">
Recherche par Nom <input type="text" name="nom">
<input type="submit" value="ok">
</form>

</body>
</html>

__________________________________________

par Tangi » 01 févr. 2006, 19:04

ayé, j'y suis arrivé ! ouf ;-) Merci à tous ! Je poste le code ce soir si ça interesse quelqu'un et MAINTENANT je vais essayer d'optimiser et de faire plus elegant !

par Tangi » 01 févr. 2006, 16:39

nan, cette requete j'y touche pas, c'"est la seule qui fonctionne ;-)
Pis j'en suis clairement pas à optimiser....si deja ça pouvait sortir un resultat, je verrai après pour optimiser mon code ;-)
Bon j'essaie des trucs de mon coté....

par patami » 01 févr. 2006, 15:13

ça ne sert à rien de mettre des accolades ..
$sql = 'SELECT * FROM `personne` WHERE `annee` = "'.$_POST['annee'].'"';
de plus il serait mieux (optimisé) de nommer les champs sélectionnés au lieu d'utiliser *

par Tangi » 01 févr. 2006, 10:53

Ok, j'ai "corrigé" :? en mettant un = au lieu du like et en rajoutant des quotes autour de la variable, ce qui donne ça :
$sql = "SELECT * FROM personne WHERE matricule = {'$_POST['matricule']'}";
pas mieux, j'ai donc essayé :
$sql = "SELECT * FROM personne WHERE matricule = '{$_POST['matricule']}'";
pas ça non plus....et ce que je n'explique pas c'est que de toute maniere cette requete :
$sql = "SELECT * FROM personne WHERE annee = {$_POST['annee']}";
Elle, elle tourne sans souci ! C'est la meme syntaxe !? :?: ??

par Truc » 01 févr. 2006, 00:22

meme erreur Champ 'F814274'inconnu dans where clause
le contenu de la variable est considéré comme un champ et non un contenu de champ...

Il manques de quotes autour de la variable :wink:

par Tangi » 01 févr. 2006, 00:18

Oui je reconnais que j'en ai quelques unes un peu en vrac ;-)
J'ai essayé le = au lieu du like dans l'apres midi mais ça ne fonctionne pas mieux, tjs cette meme erreur Champ 'F814274'inconnu dans where clause alors que ce matricule est bien dans la base. pourquoi cela fonctionne-t-il dans le cas de l'année et pas dans les deux form ?

par patami » 31 janv. 2006, 21:27

hello

tu ferais bien de revoir sérieusement ton code html ... les balises il faut les fermer. Ce serait mieux de passer au xhtml ;)

au lieu de LIKE met simplement un = ..


Dans ta boucle tu répètes pleins de fois echo. Tu peux mettre tout ton code à afficher dans un seul echo ;)

par Tangi » 31 janv. 2006, 13:06

J'avance ! Contexte : une table mysql, avec les champs matricule, nom, prenom, spectacle, montant, mois, annee et divers, tous en VARCHAR.
J'ai scindé mon "projet-test" en plusiers fichiers, le premier connexion.htm

--------------------------------------connexion.htm---------------------------
<html>
<head>
<title>****</title></head>
<body>
<font face="Arial" size="2">

<form method="post" action="matricule.php">Recherche par Matricule <input type="text" name="matricule">
<input type="submit" value="ok">
</form>
<form method="post" action="annee.php">Recherche par année <input type="text" name="annee">
<input type="submit" value="ok">
</form>
<form method="post" action="nom.php">Recherche par Nom <input type="text" name="nom">
<input type="submit" value="ok">
</form>
</body>
</html>
--------------------------------------fin connexion.htm---------------------------


j'ai donc aussi 3 fichiers php qui recuperent respectivement les variables tapées pour l'inserer dans la requete sql du fichier ad hoc. Mais souci :
-ça fonctionne pour annee mais pas pour les autres ! Ex si je tape f814274 (un matricule qui existe dans la bdd), j'ai Erreur SQL ! SELECT * FROM personne WHERE matricule LIKE F814274
Champ 'F814274'inconnu dans where clause
Alors que si je tape 2006 dans l'input annee, j'ai mes 3 tuples qui correspondent....ça vient du type de mes champS ?

-----------------------------annee.php------------------------------------------
<?php 
$MySQL_serveur = "localhost";//l'adresse du serveur MySQL
$MySQL_utilisateur = "serge"; //le nom d'utilisateur
$MySQL_mdp = "serge"; //le mot de passe
$db="billetterie"; //indiquer le nom de la base de données
$lien_base=mysql_connect($MySQL_serveur,$MySQL_utilisateur,$MySQL_mdp);
?>
<?
mysql_select_db('billetterie');
?>
<?php
$sql = "SELECT * FROM personne WHERE annee LIKE {$_POST['annee']}";
$req = mysql_query($sql) or die('Erreur SQL! <br>'.$sql.'<br>'.mysql_error());

while($data = mysql_fetch_array($req))
{ 
echo '<strong>'.$data['matricule'] .'</strong><br>';
echo '<strong>'.$data['nom'] .'</strong><br>';
echo '<strong>'.$data['prenom'] .'</strong><br>';
echo '<i>'.$data['spectacle'] .'</strong><br>';
echo '<i>'.$data['montant'] .'</strong><br>';
echo '<i>'.$data['mois'] .'</strong><br>';
echo '<i>'.$data['divers'] .'</strong><br>';
}
?>
----------------------fin annee.php---------------------------------------

----------------------matricule.php-----------------------------------------
<?php 
$MySQL_serveur = "localhost";//l'adresse du serveur MySQL
$MySQL_utilisateur = "serge"; //le nom d'utilisateur
$MySQL_mdp = "serge"; //le mot de passe
$db="billetterie"; //indiquer le nom de la base de données
$lien_base=mysql_connect($MySQL_serveur,$MySQL_utilisateur,$MySQL_mdp);
?>

<?
mysql_select_db('billetterie');
?>
<?php
$sql = "SELECT * FROM personne WHERE matricule LIKE {$_POST['matricule']}";
$req = mysql_query($sql) or die('Erreur SQL! <br>'.$sql.'<br>'.mysql_error());

while($data = mysql_fetch_array($req))
{ 
echo '<strong>'.$data['matricule'] .'</strong><br>';
echo '<strong>'.$data['nom'] .'</strong><br>';
echo '<strong>'.$data['prenom'] .'</strong><br>';
echo '<i>'.$data['spectacle'] .'</strong><br>';
echo '<i>'.$data['montant'] .'</strong><br>';
echo '<i>'.$data['mois'] .'</strong><br>';
echo '<i>'.$data['divers'] .'</strong><br>';
}
?>

-------------------------------fin matricule.php-----------------------------------

[resolu]Recuperer valeur input dans un SELECT

par Tangi » 31 janv. 2006, 11:52

C'est bon, ça passe ! Je vais surement revenir bientot ;-)
Merci à patami ;-)

par Tangi » 31 janv. 2006, 00:50

ok, ok, demain matin avec des yeux neufs, je reprends tout ça, ça va passer bordel de M*ù^ù ....merci et à demain !
Tangi

par patami » 30 janv. 2006, 23:39

hello

des fautes dans ton code que tu peux voir avec la coloration synthaxique :)

field_annee ==> il manque un $ de plus c'est une variable provenant d'un formulaire donc de type POST
$_POST['field_annee']

pour bien faire, à concaténer.

dans ta requête tu as des ' ' qui contiennent des ' '. Tu dois couper les ' ' intérieurs ou utiliser des " ".

manque d'un ' ici : echo '<b>.$data['matricule']; ==> echo '<strong>'.$data['matricule'].'</strong>';

le </font> il ferme quel <font> ?

fais attention à la validité de ton codage ... c'est pas aux normes w3c :p (<br>, déclaration du doctype, head, etc ..)

enfin, il te faut mettre une condition sur la recherche dans la base de donnée .. si le formulaire a été envoyé (et que l'on connaît donc la valeur de $_POST['field_annee'] )


note : un report aux tutoriaux me semble nécessaire comme le suggère cyrano ..

par Tangi » 30 janv. 2006, 22:58

Ben oui j'ai trouvé de tout des quotes simples d'autres non, bref rien qui passe ! Désolé pour la mise en forme !
RTfm !
Tangi, 4h de php derriere, j'vois plus rien ???

par Cyrano » 30 janv. 2006, 19:52

As-tu visité un peu le site pour trouver les tutos ? Il y en a un sur les formulaires de base et un autre dans la FAQ sur les formulaires plus complexes.

Une visite sur les règles du forum seraient bien aussi, en particulier l'article 2. J'ai remis ton message en forme, mais j,aimerais ne pas devoir le faire chaque fois.

Recuperer valeur input dans un SELECT

par Tangi » 30 janv. 2006, 18:55

Hello la horde,
Bon ben j'y arrive pas :(
J'essaie de recuperer la valeur saisie dans le textbox pour la passer en parametre de la requete SQL et afficher le result....parse error ! Help ! ;-) comment lui faire comprendre que
<html>
<body>
<?php 
$MySQL_serveur = "localhost";
$MySQL_utilisateur = "***";
$MySQL_mdp = "***";
$db="test"; 
$lien_base=mysql_connect($MySQL_serveur,$MySQL_utilisateur,$MySQL_mdp);
?>

<?php
mysql_select_db('test');
?>

<?php
echo $MySQL_utilisateur;
?>

<?php
echo $db;
?>

<form method="post">
<input name="field_annee">
<input type="submit" value="ok"
</form>

<?php
$sql = 'SELECT * FROM personne WHERE annee='field_annee'';
$req = mysql_query($sql) or die('Erreur SQL! <br>'.$sql.'<br>'.mysql_error());

while($data = mysql_fetch_array($req))
{ 
echo '<b>.$data['matricule'];
}
?>

</font>
</body>
</html>