Rechercher : dans
Par :

PHP Valider un formulaire avec variable

Dernière réponse le 14 sep 2007 à 10:57:43 philrouge, le 14 sep 2007 à 00:26:58 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « PHP Valider un formulaire avec variable » dans :
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
[Webmaster] Un formulaire de contact pour votre site VoirCe formulaire permet d'avoir une page pour être contacté sur son site, sans utiliser de logiciel de messagerie. La personne qui vous contacte indique son adresse, l'objet du message et son message (évidemment). Le code est une version...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...
PHP - Les variables d'environnement VoirNotion de variable d'environnement Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script...

1

BoOst, le 14 sep 2007 à 00:45:23

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()"

Répondre à BoOst

2

philrouge, le 14 sep 2007 à 01:00:42

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?

Répondre à philrouge

3

BoOst, le 14 sep 2007 à 01:12:13

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 ;)

Répondre à BoOst

4

philrouge, le 14 sep 2007 à 01:37:06

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é

Répondre à philrouge

5

BoOst, le 14 sep 2007 à 02:12:26

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 :)

Répondre à BoOst

6

BoOst, le 14 sep 2007 à 02:29:25

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>

Répondre à BoOst

7

 philrouge, le 14 sep 2007 à 10:57:43

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

Répondre à philrouge