Pb déclaration variable pour WHERE dans requête sql dans script php [Résolu]

Signaler
Messages postés
62
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
31 mai 2020
-
Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
-
Bonjour,

Au départ, dans un formulaire, il y a un input type text.

<input type="text" name="Num" id="Num" maxlength="5" pattern="[0-9]{3}[_][0-9]" required placeholder="000_0"/>

La valeur entrée dans cet input doit servir à réaliser une requête située un peu plus bas toujours dans le formulaire mais dans un script php.

$sql = 'SELECT * FROM Inscriptions LEFT JOIN Stages ON Inscriptions.ChoixStage = Stages.NumStage WHERE Num='document.getElementById("Num").value;' ;

Mais ça ne fonctionne pas...snif

La requête sans le WHERE fonctionne très bien, mais retourne évidement tous les enregistrements, alors qu'on ne veut que les enregistrements correspondant à la saisie faite dans l'input.

Quel serait la bonne syntaxe pour cette requête ?

Un grand merci d'avance à celui ou celle qui pourra me dépanner.



Configuration: Windows / Firefox 74.0


--

5 réponses

Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
637
bonjour,
as-tu fait echo de la valeur entrée dans cet input? es-tu certain de la récupérer correctement dans ton code PHP?
fais également
echo $sql;
, pour vérifier que cette requête est bien utilisable.
tu ne nous montres qu'une petite partie de ton code, l'erreur est peut-être ailleurs.
Messages postés
62
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
31 mai 2020

Bonjour yg_be,

Merci de t'intéresser à mon pb.

La valeur entrée dans l'input est bien là car je la récupère dans un popup d'affichage récapitulatif avant d'envoyer les valeurs dans la base.

Par contre, c'est certainement dans la récupération de cette valeur pour la requête que ça doit pêcher... J'utilise (mais sûrement mal) la récupération de la valeur par 'document.getElementById("Num").value;' pour la comparer à une valeur d'un champ de ma base.


--
Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
637
tu ne nous montres qu'une petite partie de ton code, l'erreur est peut-être ailleurs.
si tu récupères la valeur entrée en input dans une variable, pourquoi ne pas utiliser cette variable pour la requête?
fais également
echo $sql;
, pour vérifier que cette requête est bien utilisable, et pour comprendre ce que fait ton code.
Messages postés
62
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
31 mai 2020

Voilà
En mettant les parties php en commentaire, on a bien la valeur de l'input dans la popup en cliquant sur Print.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test Base de donnée</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script>
function popup()
{
w=open("",'popup','width=400,height=600,toolbar=no,scrollbars=yes,resizable=yes');
w.document.write("<BODY>");
w.document.write("Identifiant : "+document.forms[0].elements["Num"].value+"<BR><BR>");
w.document.write("</BODY>");
w.document.close();
w.print();
}
</script>


</head>
<body>
<form method="post" action="EnvoiInscription.php">

<BR><p>
<input type="text" name="Num" id="Num" maxlength="5" pattern="[0-9]{3}[_][0-9]" required placeholder="000_0" />
</p><BR><BR>

<?php //Connection avec la BDD.
include('secure/config.php');
mysql_connect($SQLhost, $SQLlogin, $SQLpass) or die(mysql_error());
mysql_select_db('ssa.pvm.ulm') or die(mysql_error());

$sql = 'SELECT * FROM Inscriptions LEFT JOIN Stages ON Inscriptions.ChoixStage = Stages.NumStage WHERE Num=document.getElementById("Num").value;
$res = mysql_query($sql) or die('Erreur requête SQL !<br>'.$sql.'<br>'.mysql_error());

?>




<table>
<tr>
<th>N°</th>
<th>Stage</th>
<th>nationale ou locale</th>
</tr>
<?php //On affiche les lignes du tableau une à une à l'aide d'une boucle
while($donnees = mysql_fetch_array($res))
{
?>
<tr>
<td><?php echo $donnees['Num'];?></td>
<td><?php echo $donnees['Stage'];?></td>
<td><?php echo $donnees['Action'];?></td>
</tr>
<?php
} //fin de la boucle, le tableau contient toute la BDD
mysql_close(); //deconnection de mysql
?>
</table>


<BR>
<form method="post" action="EnvoiInscription.php">

<p><input type="button" name="Print" value="Print" onClick="JavaScript:popup();"></form>

<p> </p>
<p><input type="submit" value="Envoyer" size="24" />
</p>
</form>
</body>
</html>

--
Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
637
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
dans quelle variable as-tu récupéré la valeur entrée en input?
réutilise cette variable pour la requête.
fais également echo $sql;, pour vérifier que cette requête est bien utilisable, et pour comprendre ce que fait ton code.
Messages postés
62
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
31 mai 2020

Désolé pour l'absence de balise ..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Test Base de donnée</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script>
function popup()
{
w=open("",'popup','width=400,height=600,toolbar=no,scrollbars=yes,resizable=yes');
w.document.write("<BODY>");
w.document.write("Identifiant : "+document.forms[0].elements["Num"].value+"<BR><BR>");
w.document.write("</BODY>");
w.document.close();
w.print();
}
</script>


</head>
<body>
<form method="post" action="EnvoiInscription.php">

<BR><p>
<input type="text" name="Num" id="Num" maxlength="5" pattern="[0-9]{3}[_][0-9]" required placeholder="000_0" />
</p><BR><BR>

<?php //Connection avec la BDD.
include('secure/config.php');
mysql_connect($SQLhost, $SQLlogin, $SQLpass) or die(mysql_error());
mysql_select_db('ssa.pvm.ulm') or die(mysql_error());

$sql = 'SELECT * FROM Inscriptions LEFT JOIN Stages ON Inscriptions.ChoixStage = Stages.NumStage WHERE Num=document.getElementById("Num").value;
$res = mysql_query($sql) or die('Erreur requête SQL !<br>'.$sql.'<br>'.mysql_error());

?>




<table>
<tr>
<th>N°</th>
<th>Stage</th>
<th>nationale ou locale</th>
</tr>

<?php //On affiche les lignes du tableau une à une à l'aide d'une boucle
while($donnees = mysql_fetch_array($res))
{
?>

<tr>
<td><?php echo $donnees['Num'];?></td>
<td><?php echo $donnees['Stage'];?></td>
<td><?php echo $donnees['Action'];?></td>
</tr>

<?php
} //fin de la boucle, le tableau contient toute la BDD
mysql_close(); //deconnection de mysql
?>

</table>


<BR>
<form method="post" action="EnvoiInscription.php">

<p><input type="button" name="Print" value="Print" onClick="JavaScript:popup();"></form>

<p> </p>
<p><input type="submit" value="Envoyer" size="24" />
</p>
</form>
</body>
</html>


Le tout dans mon fichier ***.php

Je n'ai pas de variable pour récupérer la valeur de l'input puisque j'utilise directement document.getElementById("Num").value;

--
Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
637
je vois bien que tu utilises directement document..., et je suggère que tu passes par une variable, ce sera plus clair.
fais également echo $sql;, pour vérifier que cette requête est bien utilisable, et pour comprendre ce que fait ton code.
Messages postés
62
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
31 mai 2020

J'ai remplacé ma requête par
$sql = "SELECT * FROM Inscriptions LEFT JOIN Stages ON Inscriptions.ChoixStage = Stages.NumStage WHERE Num = '$Num'";
et j'ai bien mon tableau qui s'affiche mais vide ;-(
et echo $sql me retourne
SELECT * FROM Inscriptions LEFT JOIN Stages ON Inscriptions.ChoixStage = Stages.NumStage WHERE Num = ''

--
Messages postés
11210
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
637
comprends-tu la requête SQL?
as-tu vérifié ce que retournait
echo $num
?
quel est le type du champ Num dans la table?
es-tu au courant que l'extension php mysql est en fin de vie? https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli