Formulaire

Eléphanteau du PHP | 21 Messages

30 juin 2008, 16:35

Bonjour à tous !
Novice en PHP je parviens à réaliser un formulaire pour remplir ma BD.
Jusque là tout va bien.
Maintenant je voudrai remplir mon formulaire, et ouvrir une page qui récapitule les éléments saisis.
Jusque là j'y arrive mais au moment de valider les infos ça coince !!!
C'est vrai que je suis parti d'un exemple où tous les champs sont obligatoires, et là ça me met 3tous les champs sont obligatoires"
Merci de votre aide

Mammouth du PHP | 1668 Messages

30 juin 2008, 16:57

Oui


On pourrait voir ton script ?
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Mammouth du PHP | 514 Messages

01 juil. 2008, 08:21

Pour chaque élément dans ton formulaire, tu dois avoir un "name" associé.

<input type="text" name="user" />

Ce "name" est l'identifiant que PHP récupère. Donc, si tu veux le traiter, quand une personne poste le formulaire, tu as deux solutions :

soit tu utilises la méthode de formulaire GET :
<?php
echo $_GET['user'];
?>
soit tu utilises la méthode de formulaire POST :
<?php
echo $_POST['user'];
?>
Sachant que POST est conseillé dans quasiment tous les cas ou il est applicable.
Ne jamais repousser à demain ce qu'on peut faire après demain ...

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 09:16

Voici mon code :
Page se saisie 1

Code : Tout sélectionner

<html> <form action="recap_ajout_webcam.php" method="POST"> <center> <p>Choisissez un Continent : <select name="continent" size="1"> <option value="Europe">Europe</option> <option value="Am&eacute;rique">Am&eacute;rique</option> </select> <br> Choisissez un Sous-continent : <select name="sous_continent" size="1"> <option value="Europe nord">Europe du Nord</option> <option value="Europe ouest">Europe de l'Ouest</option> </select> <img src="../video_on_line/aide.gif" border="0"> <font size="2">Aide ?</font><br> Choisissez un Pays : <select name="pays"> <option value="Afrique du Sud">Afrique du Sud</option> <option value="Afghanistan">Afghanistan</option> <option value="Albanie">Albanie</option> </select> <br> Situation de la webcam : <input type="text" name="ville" size="60" value="" maxlength="70"> ex : Paris<br> Nom de la webcam : <input type="text" name="nom_webcam" size="60" value="" maxlength="40"> ex : Les Champs Elys&eacute;es <br> Source de l'image : <input type="text" name="lien_webcam" size="60" value="http://" maxlength="250"> </p> <p></p> <p><br> <input type="submit" value="Envoyer" name="envoyer"> </p> </center> </form> </html>
Page récapitulative :

Code : Tout sélectionner

<form method="POST" action="ajout_webcam.php"> <p> Continent : <?php echo $_POST['continent']; ?><br> Sous-continent : <?php echo $_POST['sous_continent']; ?><br> Pays : <?php echo $_POST['pays']; ?><br> Ville : <?php echo $_POST['ville']; ?><br> Titre : <?php echo $_POST['nom_webcam']; ?><br> URL : <?php echo $_POST['lien_webcam']; ?></p> <input type="submit" value="Valider" name="envoyer"> </form>
Et enfin la page qui remplie ma BD :
 
// On commence par récupérer les champs 
if(isset($_POST['continent']))      $continent=$_POST['continent'];
else      $continent="";

if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['sous_continent']))      $sous_continent=$_POST['sous_continent'];
else      $sous_continent="";

if(isset($_POST['ville']))      $ville=$_POST['ville'];
else      $ville="";

if(isset($_POST['nom_webcam']))      $nom_webcam=$_POST['nom_webcam'];
else      $nom_webcam="";

if(isset($_POST['lien_webcam']))      $lien_webcam=$_POST['lien_webcam'];
else      $lien_webcam="";

// Aucun champ n'est vide, on peut enregistrer dans la table 
$db = mysql_connect('localhost', 'romuald', 'e4fxrccv')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('vol_webcam',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql 
    $sql = "INSERT INTO webcam(idwebcam,continent,pays,sous_continent,ville,nom_webcam,lien_webcam,stat_visite,note_webcam) VALUES('','$continent','$pays','$sous_continent','$ville','$nom_webcam','$lien_webcam','','')"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on affiche le résultat pour le visiteur 
    echo 'Votre webcam a été enregistrée'; 

    mysql_close();  // on ferme la connexion 
?>
Voilà j'espère que vous pourrez m'aider
Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 juil. 2008, 09:35

Bonjour,

L'erreur est logique, car le premier formulaire envoi bien les données au formulaire de récap, mais, malheureusement, ce dernier ne renvoi rien du tout au programme final qui doit ajouter dans la base.
Pour la simple raison que le formulaire de récap se contente d'afficher les POST reçus et ne contient aucun champs de formulaire pourtant nécessaires pour que le programme PHP final recoive des données à ajouter dans la base.

Je te conseille d'ajouter dans le formulaire récap des champs cachés (<input type="hidden" .... />) pour chaque donnée à renvoyer au programme d'ajout.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 10:24

Bonjour,
Merci pour ta réponse, mais comme je l'ai précisé avant, je suis novice.
Mon <imput hidden...> j'ai pas bien compris où le mettre et surtout quoi mettre à l'intérieur !
Est-ce un truc dans le genre
<input name="continent" type="hidden" value="$continent">

Merci

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 10:27

J'ai saisie ça :
if(isset($_POST['continent'])) $continent=$_POST['continent'];
else $continent="" input name="continent" type="hidden" value="$continent";

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 10:53

Dans mon formulaire de recap j'ai ecrit ça :
Est-ce-que c'est bon
<form method="POST" action="ajout_webcam.php">
<p>
Continent : <?php echo $_POST['continent']; ?><input type="hidden" name="continent" value="$continent" /><br>
Sous-continent : <?php echo $_POST['sous_continent']; ?><input type="hidden" name="sous_continent" value="$sous_continent" /><br>
Pays : <?php echo $_POST['pays']; ?><input type="hidden" name="pays" value="$pays" /><br>
Ville : <?php echo $_POST['ville']; ?><input type="hidden" name="ville" value="$ville" /><br>
Titre : <?php echo $_POST['nom_webcam']; ?><input type="hidden" name="nom_webcam" value="$nom_webcam" /><br>
URL :<br><img src="<?php echo $_POST['lien_webcam']; ?>" width="320" height="240"><input type="hidden" name="lin_webcam" value="$lien_webcam" /></p>
<input type="submit" value="Validez votre saisie" name="envoyer">
</form>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 juil. 2008, 11:02

C'est très bien, tu te débrouille pas mal. Je te corrige simplement quelque trucs:

Correction:
<?php
//Données recues
$continent = $_POST['continent'];
$sous_continent = $_POST['sous_continent'];
$pays= $_POST['pays'];
$ville= $_POST['ville'];
$nom_webcam= $_POST['nom_webcam'];
$lien_webcam= $_POST['lien_webcam'];

?>
<form method="POST" action="ajout_webcam.php">
<p>
Continent : <?php echo $continent; ?><input type="hidden" name="continent" value="<?php echo $continent; ?>" /><br>
Sous-continent : <?php echo $sous_continent; ?><input type="hidden" name="sous_continent" value="<?php echo $sous_continent; ?>" /><br>
Pays : <?php echo $pays; ?><input type="hidden" name="pays" value="<?php echo $pays; ?>" /><br>
Ville : <?php echo $ville; ?><input type="hidden" name="ville" value="<?php echo $ville; ?>" /><br>
Titre : <?php echo $nom_webcam; ?><input type="hidden" name="nom_webcam" value="<?php echo $nom_webcam; ?>" /><br>
URL :<br><img src="<?php echo $lien_webcam; ?>" width="320" height="240"><input type="hidden" name="lien_webcam" value="<?php echo $lien_webcam; ?>" /></p>
<input type="submit" value="Validez votre saisie" name="envoyer">
</form>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 11:09

Merci beaucoup,
ça marche

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 11:20

Nouvelle demande :
Comment faire pour que l'internaute ne saisisse pas n'importe quoi ?
Je m'explique : sur mon site je veux éviter que quelqu'un rajoute une webcam sur le mauvais continent par exemple, comme je le vois sur certains sites (ex Toulon en Algérie !!!)
Est-ce que l'on peut mettre de lAjax, dans du PHP ou de l'HTML
Et surtout est-ce difficile à mettre en place
Merci

Mammouth du PHP | 1668 Messages

01 juil. 2008, 11:32

C'est pas complex, c'est juste un peu long, exemple :
$tab=array();
$tab['France']=array("Lyon", "Paris", "Bordeau", "Marseiile"); // etc.
$tab['Belgique']=array("Bruxelle", "Liège"); // etc.
//etc.
if(array_key_exists($_POST['pays'], $tab) AND array_key_exists($_POST['ville'], $tab[$_POST['pays']))
echo "la ville correspon au pays";
else echo "non, le ville ne correspond pas au pays";
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 11:37

Dans mon cas précis l'internaute sélectionne un continent (ex : Europe), et je voudrais que dans la sélection du sous-continent il ne puisse choisi que les sous-continent européens (ex : Europe du Nord, Europe du Sud...).
Actuellement j'ai tous les sous continents qui apparaissent, d'où d'éventuelles erreurs ou anêries sur certains sites !
Merci

Mammouth du PHP | 1668 Messages

01 juil. 2008, 12:21

Je viens de te donner le principe :) à toi d'extrapoller :lol:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Invité
Invité n'ayant pas de compte PHPfrance

01 juil. 2008, 14:50

Bonjour,
je corse le problème parceque je veux modifier deux tables dans ma BD

Voilà le code que j'ai mis :
<?php 
// On commence par récupérer les champs 
if(isset($_POST['continent']))      $continent=$_POST['continent'];
else      $continent="";

if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['sous_continent']))      $sous_continent=$_POST['sous_continent'];
else      $sous_continent="";

if(isset($_POST['ville']))      $ville=$_POST['ville'];
else      $ville="";

if(isset($_POST['nom_webcam']))      $nom_webcam=$_POST['nom_webcam'];
else      $nom_webcam="";

if(isset($_POST['lien_webcam']))      $lien_webcam=$_POST['lien_webcam'];
else      $lien_webcam="";

if(isset($_POST['nom_critere']))      $nom_critere=$_POST['nom_critere'];
else      $nom_critere="";

$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error()); 
     
    $sql = "INSERT INTO webcam(idwebcam,continent,pays,sous_continent,ville,nom_webcam,lien_webcam,stat_visite,note_webcam) VALUES('','$continent','$pays','$sous_continent','$ville','$nom_webcam','$lien_webcam','','')"; 

    $idwebcam = mysql_insert_id(); 

    $sql = "INSERT INTO critere(idwebcam,nom_critere) VALUES('','$idwebcam','$nom_critere')"; 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

mysql_close($db);  // on ferme la connexion 
?>
Et voilà le résultat :
Erreur SQL !INSERT INTO critere(idwebcam,nom_critere) VALUES('','0','Mer')
Column count doesn't match value count at row 1

Merci