PHP Valider un formulaire avec variable

Fermé
philrouge Messages postés 12 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 23 juillet 2013 - 14 sept. 2007 à 00:26
philrouge Messages postés 12 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 23 juillet 2013 - 14 sept. 2007 à 10:57
Bonjour.

C'est mon premier post sur ce forum et j'espère être au bon endroit.
Voilà mon problème :
Je passe une variable d'une page A à une page B.
Sur la page B j'ai un formulaire et quand je valide le formulaire, la variable est vide !!
le code de la page A :
echo "<table border='1'>";
	$sql = mysql_query("SELECT id_titre, titre FROM titres ORDER BY titre");
	$nombreligne = mysql_num_rows($sql);
	for ($i = 0; $i < $nombreligne; $i++) { 
		$idtitre = mysql_result($sql,$i,"id_titre");
		$titre = stripslashes(htmlentities(trim(mysql_result($sql,$i,"titre"))));
		$rsql = mysql_query("SELECT titres_realisateurs.*, realisateurs.* FROM titres_realisateurs, realisateurs WHERE realisateurs.id_realisateur = titres_realisateurs.id_realisateur AND titres_realisateurs.id_titre = $idtitre AND titres_realisateurs.rang_realisateur = 1");
		if (mysql_num_rows($rsql) > 0){
			$res = mysql_fetch_array($rsql);
			$prenom = $res['prenom_real'];
			$nom = $res['nom_real'];
			echo "<tr><td>";?><a href="index.php?page=ajout_dvd&idtitre=<?php echo $idtitre;?>&titre=<?php echo $titre;?>" style="text-decoration:none"><?php echo "$titre</a></td></tr>";
		}
		else {
			echo "<tr><td>";?><a href="index.php?page=ajout_dvd&idtitre=<?php echo $idtitre;?>&titre=<?php echo $titre;?>" style="text-decoration:none"><?php echo "$titre</a></td></tr>";
		}
	}
echo "</table>";


le code de la page B où je récupère la variable $idtitre et $titre
if (isset($_POST['monchoix'])){
	$idtitre=$_POST['monchoix'];
	$_SESSION['monchoix'] = $_POST['monchoix'];
	$sql = mysql_query('SELECT titres.* FROM titres WHERE id_titre = '.$idtitre.'');
	if (mysql_num_rows($sql) > 0)
	{
	   $res = mysql_fetch_array($sql);
	   $idtitre = $res['id_titre'];
	   $titre = $res['titre'];
	}
}
echo "$idtitre, $titre";
if (!empty($version)){
	echo "'$idtitre','$version','$langue','$sous_titre','$langue_sst','$public','$region','$compatibilite','$format','$nbdisq','$bonus','$f_image','$f_original','$audio','$son','$b_annonce'"; 
	//enregistre les données du dvd
    	$sql = "INSERT INTO version_dvd(id,id_titre, version, langue, sous_titre, langue_sous_titre, public, region, compatibilite, format, nbre_disque, bonus, format_image, format_original, audio, son, bande_annonce) 
		VALUES('','$idtitre','$version','$langue','$sous_titre','$langue_sst','$public','$region','$compatibilite','$format','$nbdisq','$bonus','$f_image','$f_original','$audio','$son','$b_annonce')"; 
    	// insertion dans la table 
    	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	//récupération de l'id de l'enregistrement
	$iddvd = mysql_insert_id();
	$sql = mysql_query("SELECT * FROM version_dvd wHERE id = $iddvd");
	if (mysql_num_rows($sql) > 0){
	   	$res = mysql_fetch_array($sql);
	   	$id = $res['id'];
	   	$idtitre = $res['id_titre'];
	   	$version = $res['version'];
	}
}

echo "<form name='dvd' method='POST' action='index.php?page=ajout_dvd'>";
	echo "<table border='1' style='font-size:11px; background-color:#00CCFF' cellpadding='0' cellspacing='0' width='100%'>";
		echo "<tr height='40px'>
			<td align='center' style='font-size:18px;' colspan = '8'>";
				  echo "$titre </td>
		</tr>
		<tr height='20px'>
			<td align='center' colspan = '8'> Spécifications du DVD</td>

		<tr>	<td valign='top' width='90px'>";
			?>
			<p align="center">Version<hr width='90px'>
    			<input type="radio" name="version[]" value="standard" <?php if(est_selectionne_version("standard")) { echo 'checked'; } else if($version == "standard"){ echo 'checked';} ?>/>Standard<br/>
    			<input type="radio" name="version[]" value="collector" <?php if(est_selectionne_version("collector")) { echo 'checked'; } else if($version == "collector"){ echo 'checked';} ?>/>Collector<br/>
			</p>

...

		</tr>
		<tr>
			<td align="center" colspan="8" style="height:50px"><input type="submit" value="Enregistrer les données"></td>
		</tr>
	</table>
</form>


Voilà j'espère que quelqu'un pourra m'aider car je galère depuis des heures.
Merci d'avance
A voir également:

7 réponses

Salut

je n 'ai pas de serveur sous la main pour tester ton code, mais déja il faut que tu récup_re les variables de la ligne de commande par "$_GET"

petit récapitulatif :

$_GET["toto"] -> récupère la variable venant d'une requete get (ex: page.php?toto=1)
$_POST["toto"] -> récupère la variable venant d'une requete post (d'un champ de formulaire appelé toto)
$_REQUEST["toto"] -> récupère la variable venant d'une requete get ou post

si le mode "register_globals" est activé sur tons erveur PHP, alors tu n'a pas besoin d'utiliser ces instructions et la $toto est automatiquement créée, mais ce mode est désacivé chez tous les hébergeurs et par defaut dans les dernières versions de PHP,
car non sécurisé.

j'espère que déja ca t'aidera, sinon poste ton code complet, je ne voit pas par exemple d'ou vient ton champ "monchoix" ou la fonction "est_selectionne_version()"
0
philrouge Messages postés 12 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 23 juillet 2013
14 sept. 2007 à 01:00
Merci

j'ai bien essayé sur ma page B :
if (isset($_GET['idtitre'])) $idtitre = $_GET['idtitre'];
if (isset($_GET['titre'])) $titre = $_GET['titre'];
j'ai même fait un echo "$idtitre, $titre";
j'ai bien la valeur qui s'affiche mais quand je valide le formulaire le champs de la table qui correspond à idtitre est vide.

Est ce que monde est dans le bon ordre?
0
ah ok, ce que je voit de ton formulaire n'envoie que le champ "version", le formulaire ne transmettra pas la variable idtitre lors de la validation automatiquement, il faut dans ce cas que tu utilise un champ caché entre les balises "form" du formulaire :

<input type="hidden" name="idtitre" value="<?=$idtitre?>">
<input type="hidden" name="toto" value="<?=$toto?>">
etc...

si j'ai bien compris ton problème ;)
0
philrouge Messages postés 12 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 23 juillet 2013
14 sept. 2007 à 01:37
J'ai mis les 2 input text
A l'ouverture de la page ils sont bien rempli mais quand je valid ils sont vide !!!

voilà le schéma de mon code sur la page B :

- je récupère la variable : if (isset($_GET['idtitre'])) ...
- je teste $version et si il n'est pas vide j'écris dans la table
- je récupère les données entrées dans la table
- j'affiche le formulaire qui contient les 2 input type text + les autres éléments du formulaire
- mon bouton submit
ici mon formulaire est fermé
0

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

Posez votre question
de quel input type text tu parle ? tu utilise bien un champ caché ? (hidden)

attention, la 2eme fois (quand le formulaire est posté), il faut utiliser $_POST['idtitre'] et non $_GET['idtitre'],
car les données proviennent d'un formulaire (method="POST")

utilise donc $_REQUEST["idtitre"] au lieu de $_GET ca sera + simple.

si je repond encore a coté, poste le code complete de ta page stp, parceque j'avour que j'ai du mal a comprendre :)
0
un exemple :

// verifie si un id, sinon on quitte
if (!isset($_REQUEST['idtitre'])) die("erreur interne");

// ------------ le fomulaire a été posté, on enregistre
if (isset($_POST['version'])) {

// on recupere chaque variable envoyée par le formulaire
$idtitre = addslashes($_POST["idtitre"]);
$version = addslashes($_POST["version"]);
etc, pareil pour tous les champs...

$sql = "INSERT INTO version_dvd(id,id_titre, version, langue, sous_titre, langue_sous_titre, public, region, compatibilite, format, nbre_disque, bonus, format_image, format_original, audio, son, bande_annonce)
VALUES('','$idtitre','$version','$langue','$sous_titre','$langue_sst','$public','$region','$compatibilite','$format','$nbdisq','$bonus','$f_image','$f_original','$audio','$son','$b_annonce')";

}
// ------------ on récupère les infos pour la fiche "idtitre"
// note : a partir d'ici, on utilise $_REQUEST au lieu de get, car les variables proviennent soit de l'url(get) ou du formulaire(post)

$sql = mysql_query('SELECT titres.* FROM titres WHERE id_titre = '.$_REQUEST["idtitre"].'');
if (mysql_num_rows($sql) > 0){
$res = mysql_fetch_array($sql);
$id = $res['id'];
$idtitre = $res['id_titre'];
$version = $res['version'];
...
$titre = $res['titre'];
}

<form name='dvd' method='POST'>
... on met un champ caché pour transmettre l'id ...
<input type="hidden" name="idtitre" value="<?=$_REQUEST["idtitre"]?>">

...et les autres champ, avec les variables recupérées de sql
<input type="text" name="titre" value="<?=$titre?>">

</form>
0
philrouge Messages postés 12 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 23 juillet 2013
14 sept. 2007 à 10:57
Je te remercie pour ton aide.
J'ai utilisé $_REQUEST et ça a l'air de marché, le champ de ma table contient bien idtitre

Je refais des tests et je reviens si problème.
Merci encore
0