Boucle et select

Signaler
-
Messages postés
30276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
-
Bonjour, je suis debutante en php et j'aimerais avoir votre aide sur mon programme
Voilà je voudrais faire une boucle php dans mon code html pour un formulaire d'inscription mais peut importe ce que j'essaie, cela ne fonctionne pas

<select name="jour">
            <option value="1">01
          <option value="2">02
          ...
          <option value="31">31 </option>
          </select>
          /
          <select name="mois">
            <option value="1">1
            <option value="2">2
            <option value="3">3
            ...
            <option value="12">12</option>
          </select>
          /
          <select name="annee">
          	<option value="1994">1994
            <option value="1995">1995
            ...
            <option value="2007">2007</option>
          </select>


voici un exemple qui ne marche pas ci dessous, il n'affiche que $i

<?php
	  <select name="mois">
	  for ($i = 1; $i < 13; $i++)
	  {
		echo '<option value=\'' . $i . '\'>' . $i . '</option>'
	  }
	  </select>
	  ?>

2 réponses

Messages postés
30276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
3 008
Bonjour,

<select name="mois">
 <?php
  for ($i = 1; $i <= 12; $i++)  {
    echo "<option value='$i' > $i </option>";
  }
 ?>
 </select>


Cordialement,
Jordane
Bonjour malheuresement cela ne fonctionne toujours pas

vous pouvez tester par vous même cela ne fonctionne pas...
<?php session_start();

$AfficherFormulaire=1;

	if(isset($_POST['pseudo'],$_POST['mdp'])){
		if (empty($_POST['nom'])){
			echo "Veuillez écrire votre nom.";
		} elseif(empty($_POST['prenom'])){
			echo "Veuillez écrire votre prénom.";
		} elseif(empty($_POST['pseudo'])){
			echo "Veuillez écrire votre mot de passe.";
		} elseif(strlen($_POST['pseudo'])>15)) {
			echo "Le pseudo est trop long, il dépasse 15 caractères.";
		} elseif(empty($_POST['mdp'])){
			echo "Veuillez écrire votre mot de passe.";
		} elseif(empty($_POST['mdp_confirm'])){
			echo "Veuillez confirmer votre mot de passe.";
		} elseif($_POST['mdp'] != $_POST['mdp_confirm'])
			echo 'Les deux mots de passe doivent être identiques.';
		}elseif(empty($_POST['email'])){
			echo "Veuillez écrire votre adresse mail.";
		} elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='".$_POST['pseudo']."'"))==1){
			echo "Ce pseudo est déjà utilisé.";
		} else {
			//enregistrement dans la base de données:
			if(!mysqli_query($mysqli,"INSERT INTO membres SET pseudo='".$_POST['pseudo']."', mdp='".md5($_POST['mdp'])."'")){//on crypte le mot de passe md5
				echo "Une erreur s'est produite: ".mysqli_error($mysqli);
			} else {
				echo "Vous êtes inscrit !";
				//on affiche plus le formulaire
				$AfficherFormulaire=0;
			}
		}
	}	

if($AfficherFormulaire==1){
    ?>
    <br />
	<table  border="1"  align="center">
    <form method="post" action="phpinscription.php">
		<tr>
			<td>
				Nom : <input type="text" name="nom">
				<br />
			</td>
			<td>
				Prénom : <input type="text" name="prenom">
				<br />
			</td>
			<td>
				Pseudo : <input type="text" name="pseudo">
				<br />
			</td>
			<td>
				Mot de passe : <input type="password" name="mdp">
				<br />
			</td>
			<td>
				Confirmation : <input type="password" name="mdp_confirm">
				<br />
			</td>
			<td>
				Email : <input type="text" name="email">
				<br />
			</td>
			<td>
				Date de naissance :
				<select name="mois">
					 <?php
					  for ($i = 1; $i <= 12; $i++)  {
						echo "<option value='$i' > $i </option>";
					  }
					 ?>
				</select>

				<br />
			</td>
		</tr>
		<tr align="center">
			<input type="submit" value="S'inscrire">
		</tr>
	</table>
    </form>

Messages postés
30276
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
3 008
Il semble qu'il y ait quelques erreurs dans ton code.

je t'invite à lire et à appliquer le contenu de ce lien pour tes prochains code.
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

A noter que le MD5 n'est plus la bonne méthode pour hasher tes mots de passes.
Tourne toi vers la fonction password_hash et pour "vérifier le password", la fonction password_verify
https://www.php.net/manual/fr/function.password-hash.php

Tu sembles également avoir oublié de mettre le code de connexion à ta bdd...

Tu n'as pas non plus utilisé la "bonne" syntaxe pour ton insert. (alors oui, en mysql elle peut fonctionner.. mais c'est fortement déconseillé et elle ne fonctionne pas pour les autres SGBD )

Je vois également que tu avais n'avais pas placé tes balises form correctement par rapport à tes balises table.



Bref,
Voici à quoi il devrait ressembler :

<?php 
session_start();

// affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// Connexion à la bdd
// ??? tu as oublié de mettre la connexion à ta bdd ici... ??



$AfficherFormulaire=1;

//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? trim($_POST['nom']) : NULL;
$prenom = !empty($_POST['prenom']) ? trim($_POST['prenom']) : NULL;
$pseudo = !empty($_POST['pseudo']) ? trim($_POST['pseudo']) : NULL;
$mdp = !empty($_POST['mdp']) ? trim($_POST['mdp']) : NULL;
$mdp_confirm = !empty($_POST['mdp_confirm']) ? trim($_POST['mdp_confirm']) : NULL;
$email = !empty($_POST['email']) ? trim($_POST['email']) : NULL;

/**
* Execute une requête mysqli
*/
function dbQuery($sql){
  global $mysqli;
  if (!$res = mysqli_query($mysqli, $sql)) {
    printf("Message d'erreur : %s\n", mysqli_error($mysqli));
    exit;
  }
  return $res;
}

function getUserByPseudo($pseudo){
  $sql = "SELECT * FROM membres WHERE pseudo='".$pseudo."'";
  return $res; 
}

function addUser($pseudo,$mdp){
  $password = password_hash($dmp); // A la place du MD5 qui n'est pas sécuritsé !! 
  $sql = "INSERT INTO membres (pseudo,mdp) VALUES('".$pseudo."','".$password."')"; 
  $res = dbQuery($sql);
  return $res;
}


	if($pseudo && $mdp){
  
  
    if(!$mdp){
      echo "Veuillez écrire votre mot de passe.";
    } elseif(!$nom){
      echo "Veuillez écrire votre nom.";
    } elseif(!$prenom){
      echo "Veuillez écrire votre prénom.";  
    } elseif(!$mdp_confirm){
      echo "Veuillez confirmer votre mot de passe.";
    } elseif(!$pseudo){
      echo "Veuillez écrire votre pseudo.";
    } elseif(strlen($pseudo)>15)) {
			echo "Le pseudo est trop long, il dépasse 15 caractères.";
    } elseif($mdp != $mdp_confirm)) {
			echo 'Les deux mots de passe doivent être identiques.';
    } elseif(!$email){
			echo "Veuillez écrire votre adresse mail.";
    } elseif(mysqli_num_rows(getUserByPseudo($pseudo)))>=1 ){
      echo "Ce pseudo est déjà utilisé."; 
    }else{
      if(! addUser($pseudo,$mdp)){
        echo "Une erreur s'est produite: ".mysqli_error($mysqli); 
      } else {
				echo "Vous êtes inscrit !";
				//on affiche plus le formulaire
				$AfficherFormulaire=0;
			}

    }
  }


if($AfficherFormulaire==1){
?>
<br />
<form method="post" action="">
  <table  border="1"  align="center">
    <tr>
      <td>
        Nom : <input type="text" name="nom">
        <br />
      </td>
      <td>
        Prénom : <input type="text" name="prenom">
        <br />
      </td>
      <td>
        Pseudo : <input type="text" name="pseudo">
        <br />
      </td>
      <td>
        Mot de passe : <input type="password" name="mdp">
        <br />
      </td>
      <td>
        Confirmation : <input type="password" name="mdp_confirm">
        <br />
      </td>
      <td>
        Email : <input type="text" name="email">
        <br />
      </td>
      <td>
        Date de naissance :
        <select name="mois">
           <?php
            for ($i=1; $i<= 12; $i++)  {
              echo "<option value='".$i."'>".$i."</option>";
            }
           ?>
        </select>

        <br />
      </td>
    </tr>
    <tr align="center">
      <td colspan="6">
        <input type="submit" value="S'inscrire">
      </td>
    </tr>

  </table>
</form>


Si ça ne marche toujours pas, merci de nous donner les éventuels messages d'erreur... et montre nous le code généré (en faisant CTRL + u ) dans ton navigateur lorsque la page est affichée.