Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[php&MySQL] pb de variable

6 réponses
Avatar
Vincent GAUVIN
Bonjour à tous,
Un pb de débutant sur lequel je coince depuis qq jours. Alors si l'un
d'entre vous était suffisamment charitable;-)
Je vais essayer d'expliquer mon pb le plus
simplement possible. Le point positif c'est que je sais exactement ce
qui ne fonctionne pas:-) C'est déjà pas mal non?
-Je suis /grand débutant/.
-Mon serveur est une vector linux (~slackware) 2.6.7
-Apache 2.0
-PHP 4.3.10
-MySQL 4.0.23

1)j'affiche une boite texte, l'utilisateur entre un code région (dit
"rnecirco"), j'interroge une table MySQL et j'extrais le nom de la
région (dit circo). Ca marche NiCr (nickel chrome).
2)j'affiche une 2° boite texte, l'utilisateur entre un code
établissement (dit aussi rneetab) j'interroge une autre table MySQL et
j'en extrais le nom de l'établissement (dit école). Ca marche NiCr...
sauf que à ce moment là je n'ai plus rien dans la variable circo. Elle
redevient vide;-( Et évidemment j'ai besoin des 2 en même temps. Je suis
sûr que c'est une counerie de débutant (genre 'mékilécon')... mais là je
suis au bord du suicide...
*qq commentaires dans le Code*
D'avance merci

<html>
<head>
<title>STILIAM : Enquete2</title>
</head>
<body background="../images/e.gif">
<p align="center"><b><font color="#FF0000" size="5">Identification
Circonscription</font></b></p>
<form method="GET">
<p align="center">RNE de la Circonscription : <input type="text"
name="rnecirco" size="10"><input type="submit" value="OK"
name="B1"><input type="reset" value="Annuler" name="B2"></p>
</form>
<p>&nbsp; </p>
<?php
$rnecirco = $_GET['rnecirco'];
mysql_connect ('spleen','***','***') or die ("Echec de la connexion au
serveur MySQL.");
mysql_select_db (STILIAM) or die ("Echec de la sélection de la base
MySQL.");
$sql1 = "SELECT nom FROM listcirco WHERE rne='$rnecirco'";
$req1 = mysql_query($sql1) or die ("echec requete identification circo");
$circo = mysql_fetch_assoc($req1);
echo"<p><font size=\"4\" face=\"Arial\"
color=\"#339933\">Circonscription : </font> ".$rnecirco. " :
".$circo['nom'];
*voilà. Tout ça ça marche bien. j'ai bien le code et le nom de la circo
qui s'affiche*
?>
<form method="GET">
<p>RNE Établisement : <input type="text" name="rneetab" size="8"><input
type="submit" value="OK" name="B1"><input type="reset" value="Annuler"
name="B2"></p>
</form>
<p>&nbsp; </p>
<?php
$rneetab = $_GET['rneetab'];
if (!$rneetab) {
echo "rne-vide";
exit ;
}
{
$sql2 = "SELECT nom FROM listecoles WHERE RNE='$rneetab'";
$req2 = mysql_query($sql2) or die ("echec requete identification
établissement");
$ecole = mysql_fetch_assoc($req2);
}
if (!$ecole) {
echo "ecole inconnue";
exit;
}
echo $ecole['nom']; *Là j'ai bien le nom de l'école qui s'affiche*
echo $circo['nom']; *Mais là j'ai plus le nom de la circo. Et il a
également disparu là où il était affiché plus haut:-((((*
?>


--
Cordialement,
VG

6 réponses

Avatar
P'tit Marcel

1)j'affiche une boite texte, l'utilisateur entre un code région (dit
"rnecirco"), j'interroge une table MySQL et j'extrais le nom de la
région (dit circo). Ca marche NiCr (nickel chrome).
2)j'affiche une 2° boite texte, l'utilisateur entre un code
établissement (dit aussi rneetab) j'interroge une autre table MySQL et
j'en extrais le nom de l'établissement (dit école). Ca marche NiCr...
sauf que à ce moment là je n'ai plus rien dans la variable circo. Elle
redevient vide;-(


<mode strict=on>
vide ou nulle ?
<mode strict=off>


<form method="GET">


moi, je veux bien, mais ce serait mieux comme ça :

<form action="nomduscriptphpquirecoitleform.php" method="post">
<p>RNE Établisement :
<input type="text" name="rneetab" size="8">
<input type="hidden" name="rnecirco" value="$rnecirco">
<input type="submit" value="OK" name="B1">
<input type="reset" value="Annuler" name="B2">
</p>

script nomduscriptphpquirecoitleform.php :

# récupère les champs venus en POST ou en GET et listés dans le "array"
foreach(array('rnecirco', 'rneetab') as $champ)
$$champ = $_REQUEST[$champ];


ton pb était plus HTML que php : il faut que ton formulaire gère
explicitement l'envoi de la variable précédente $rnecirco. Ce peux
également être géré par le biais des sessions mais autant faire simple...


$rneetab = $_GET['rneetab'];
if (!$rneetab) {
echo "rne-vide";
exit ;
}

{


cet { est inutile

$sql2 = "SELECT nom FROM listecoles WHERE RNE='$rneetab'";
$req2 = mysql_query($sql2) or die ("echec requete identification
établissement");

$ecole = mysql_fetch_assoc($req2);


pas bon: préfére

if(mysql_num_rows($req2)==0) {
echo "ecole inconnue";
exit;
}
$ecole = mysql_fetch_assoc($req2);


echo $circo['nom']; *Mais là j'ai plus le nom de la circo. Et il a
également disparu là où il était affiché plus haut:-((((*


ben non, la variable $circo n'est pas définie dans ton script (ou alors
je n'ai pas compris comment tes scripts php s'enchaînent ?)

lis donc un bout de la FAQ :
http://faqfclphp.free.fr/#rub2.7

<mode vieuxcon=on>
les scripts web fonctionnent sous un mode transactionnel tout comme les
ordinateurs IBM de grand papa
(http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_coi160.html),
chaque envoi de page vers le client termine la transacton. C'est à tes
scripts de gérer leur enchaînement (par un lien <A HREF> ou par un
formulaire) et le passage de variables entre eux.
<mode vieuxcon=sleep>


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
Guy
Bonjour,

Vincent GAUVIN a écrit:

1)j'affiche une boite texte, l'utilisateur entre un code région (dit
"rnecirco"), j'interroge une table MySQL et j'extrais le nom de la
région (dit circo). Ca marche NiCr (nickel chrome).
2)j'affiche une 2° boite texte, l'utilisateur entre un code
établissement (dit aussi rneetab) j'interroge une autre table MySQL et
j'en extrais le nom de l'établissement (dit école). Ca marche NiCr...
sauf que à ce moment là je n'ai plus rien dans la variable circo.


non seulemnt vous n'avez plus rien, la variable n'existe plus !

explication :
les variables ne sont pas conservées lors de passage à une deuxieme page
(la deuxieme boite texte ); il faut conserver les données soit par le
mécanisme de session ou par le passage programmé des variables

solution par programmation :
faire une séquence :
a) envoi formulaire code région
b) reception formulaire code région - controle - envoi formulaire code
établissement conprenant le code établissement et le code région dans un
champ "hidden"
c) réception des deux codes

A+
GR

Elle
redevient vide;-( Et évidemment j'ai besoin des 2 en même temps. Je suis
sûr que c'est une counerie de débutant (genre 'mékilécon')... mais là je
suis au bord du suicide...
*qq commentaires dans le Code*
D'avance merci



Avatar
Vincent GAUVIN
Guy wrote:

non seulemnt vous n'avez plus rien, la variable n'existe plus !


Merci Guy,

explication :
les variables ne sont pas conservées lors de passage à une deuxieme page
(la deuxieme boite texte ); il faut conserver les données soit par le
mécanisme de session ou par le passage programmé des variables


Grâce à vous et à p'tit marcel j'y vois un peu plus clair. Dès que
s'affiche une nouvelle boite les variables précédemment déclarées
n'existent plus. C'est bien ça?

solution par programmation :
faire une séquence :
a) envoi formulaire code région
b) reception formulaire code région - controle - envoi formulaire code
établissement conprenant le code établissement et le code région dans un
champ "hidden"
c) réception des deux codes


Je crois que je comprends le principe. Par contre je ne vois pas bien ce
que vous voulez dire par /réception/. J'ai suivi les conseils de Marcel
le Petit (que fait-il donc en prison d'ailleurs?) et j'ai fait ça :
<form method="post">
<p>RNE établisement :
<input type="text" name="rneetab" size="8">
<input type="hidden" value="$rnecirco" name="rnecirco" >
<input type="submit" value="OK" name="B1">
<input type="reset" value="Annuler" name="B2">
</p>

Malheureusement dès que je rentre qq chose dans la boite rneetab et que
je valide je perds de nouveau la valeur rnecirco;-(
Merci de votre aide et de votre patience.

--
Cordialement,
VG

Avatar
Marc
Malheureusement dès que je rentre qq chose dans la boite rneetab et que
je valide je perds de nouveau la valeur rnecirco;-(
Merci de votre aide et de votre patience.



vous faites typiquement partie des gens qui devraient activer
l'affichage d'erreur avec la directive en debut de scritp :

error_reporting(E_ALL);

* cela vous affichera les acces aux variables illicites,
* attention aux tutoriaux et nombreux exemples truffés
de petites coquilles.

Avatar
Vincent GAUVIN
Marc wrote:

vous faites typiquement partie des gens qui devraient activer
l'affichage d'erreur avec la directive en debut de scritp :


Je sais. J'ai toujours été typique comme garçon. Ceci dit je n'ai pas
compris grand chose à ce que vous m'écrivez et donc je dis : OUI.
De plus la nuit portant conseil j'ai pris la décision de tout reprendre
depuis le début. Je crois surtout que je me suis fait piégé par les
nombreux sites de /vulgarisation/ qui vulgarisent tant et tant qu'ils
font croire que le php c'est simple.
Zou. Je suis donc vos conseils avisés et remets l'ouvrage sur le métier.

error_reporting(E_ALL);
Mon projet (ambitieux s'il en est!):

-Une boite de texte où m'on rentre son prénom.
-Le zinzin vous dit bonjour /machin/
-Une autre boîte de texte où l'on rentre son nom
-Le zinzin vous dit bonjour /machin/truc/
héhéhéhé! ca marche pô.
1er PB : j'ai Notice: Undefined index: prenom in
/data/web/stiliam/test/testvariable.php on line 11
dans ça :
<html>
<head>
<title>Sans Titre</title>
</head>
<form name="form1" method="post">
Entrez votre prénom
<input type="text" name="prenom" size="20"> <input type="submit"
value="OK" name="B1"><input type="reset" value="Annuler" name="B2">
</form>
<?
error_reporting(E_ALL);
$prenom=$_POST['prenom'];
echo $prenom;
?>

C'est quoi le hic?
MErci.

--
Cordialement,
VG

Avatar
Ludovic LE MOAL
Vincent GAUVIN nous a schtroumpfé :

1er PB : j'ai Notice: Undefined index: prenom in
/data/web/stiliam/test/testvariable.php on line 11
dans ça :
<html>
<head>
<title>Sans Titre</title>
</head>
<form name="form1" method="post">
Entrez votre prénom
<input type="text" name="prenom" size="20"> <input type="submit"
value="OK" name="B1"><input type="reset" value="Annuler" name="B2">
</form>
<?
error_reporting(E_ALL);
$prenom=$_POST['prenom'];
echo $prenom;
?>


Dans votre code PHP, il faudrait vérifier que le formulaire a bien été
soumis. Donc, j'aurais fait cela :

<?php
error_reporting(E_ALL);
// On vérifie que le formulaire, par l'inttermédiaire du bouton B1, a
// bien été soumis
if(isset($_POST['B1']))
{
$prenom=$_POST['prenom'];
echo $prenom;
}
?>
--
Ludovic LE MOAL