Formulaire et Boucle while

[Résolu/Fermé]
Signaler
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
Bonjour,
J'ai quelque chose de très étranges en fait.
Je veux simplement éditer les infos de la SESSION connectée.
J'ai une requète avec une boucle while et un formulaire, malheureusement la page est vide le formulaire ne s'affiche pas, par contre si j'enlève la boucle while le formulaire s'affiche mais aucune info n'apparait dans le formulaire cela est normal. Mais pourquoi avec la boucle while le formulaire ne s'affiche pas impossible de trouver quelques choses de similaire sur le net. Pouvez-vous m'aider s'ils vous plait. Merci
<?php
$idpers	= isset($_REQUEST['idpers']) ? $_REQUEST['idpers'] : '';

	$sql = "SELECT * 
			FROM cdc_personnes
			WHERE idpers = :idpers";
	$requete = $bdd->prepare($sql);							
	$requete->execute(array(
							'idpers' => $idpers
							));
    
    while ($donnees = $requete->fetch()) {
?>
<div id="ModifProfil">
	<form id="formulaire" action="" method="post">
		<input type="hidden" name="idpers" value="<?php echo $donnees['idpers'];?>">
        <fieldset>
            <legend>Modifier mon Profil</legend><br/>

		<table cellpadding="0" cellspacing="3">
			<tr>
				<th colspan="6">Coordonné :</th>
			</tr>
			<tr>
				<td width="20%">Nom :</td>
				<td width="30%"><input name="nom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['nom'];?>" /></td>
				<td width="20%">Prénom :</td>
				<td width="30%"><input name="prenom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['prenom'];?>" /></td>
			</tr>
			<input name="action" value="ajouter" type="hidden" />
			<a href="javascript:void(0)"><input type="submit" class="submit" value="Enregistrer"/></a>
        </fieldset>
	</form>
	<br/>
</div>

<?php
  }
?>



6 réponses

Messages postés
760
Date d'inscription
samedi 29 mars 2014
Statut
Membre
Dernière intervention
8 septembre 2018
115
Bonjour.

Où sont très variable de session?

Tu ne peut pas demander un profil avec rien au départ.
Si tu compte actuellement te servir de ton formulaire qui demande de recevoir un profil. C'est le serpent qui ce mort la queue.
Ton formulaire n'a rien pour demander ton profil.
Dans c'est cas la on utilise un variable de session.

Attention un input en hidden ne cache pas du tout l'ID demandé.
quelqu'un avec quelques notion de débogage le changerait facilement pour voir un autre profile.

Quand tout ce que tu veux fonctionnera oublie pas les injections SQL.


<?php session_start();

// si un formulaire valide son name idpers
// c'est que le chargement de cette page contient 
// une variable post avec comme clé idpers
if( isset($_POST['idpers']))
{
 
 //connexion a la SGBD et a la bdd "aide".
 // nom d'utilisateur "root" et mot de passe vide ""
 try {
  $bdd = new PDO('mysql:host=localhost;dbname=aide', "root", "");
 } catch (PDOException $e) {
  print "Erreur !: " . $e->getMessage() . "<br/>";
  die();
 }


 // si la variable $_POST['idpers'] existe 
 // et quelle contient au moins un caractere
 if( isset($_POST['idpers']) and $_POST['idpers'] != null)
 {
  // je recupere le caractere sans verifier que c'est un nombre
  $idpers = $_POST['idpers'];
  
  // mémorise idpers en session php
  // http://php.net/manual/fr/session.examples.basic.php
  $_SESSION["idperso"] = $_POST['idpers'];
  
  // preparation de la requette PDO
  $sql = "SELECT * 
    FROM cdc_personnes
    WHERE idpers = :idpers";
  $requete = $bdd->prepare($sql); 
  
  $requete->execute(array(
   'idpers' => $idpers
  ));
  // lecture de la table ligne par ligne
  // La table correspond au resultat de requete
  while ($donnees = $requete->fetch()) {
   ?>
   <div id="ModifProfil">
    <form id="formulaire" action="" method="post">
     <fieldset>
      <legend>Modifier mon Profil</legend><br/>
      <input type="hidden" name="idpers" value="<?php echo $donnees['idpers'];?>">
      <label>Nom :</label>
      <input name="nom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['nom'];?>" /></td>
      <label>Prénom :</label>
      <input name="prenom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['prenom'];?>" /></td>
      <input name="action" value="ajouter" type="hidden" />
      <input type="submit" class="submit" value="Enregistrer"/>
     </fieldset>
    </form>
    <br/>
   </div>
   <a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Retour sur <?php echo $_SERVER['HTTP_REFERER']; ?></a>
   <?php
  }
 }else{
  echo "Manque idpers"."<br />";
 }
}else{
 
// formulaire provisoir remplacant 
// une variable de session php
// Exemple: $_SESSION["idperso"];
// http://php.net/manual/fr/session.examples.basic.php
?>
<div id="ModifProfil">
 <form id="formulaire" action="" method="post">
        <fieldset>
            <legend>Choix du Profil</legend><br/>
   <label>ID :</label>
   <input type="text" name="idpers" value="1">
   <input type="submit" class="submit" value="Voir"/>
        </fieldset>
 </form>
 <br/>
</div>
<?php
}
?>
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
Merci pour ton aide.
En fait il y a des fichiers annexes concernant les variables de SESSION, alors je me permet de te demander si tu peux m'aider pour mon problème de connexion et dans ce cas si je peux t'envoyer mes fichiers en MP cela doit faire 4 fichiers.
Le principe de connexion fonctionne mais je ne sais pas trop si cela est sécurisé ou pas.
Merci beaucoup.
Cordialement
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
En fait j'ai bien analysé ce que tu m'as envoyé, mais moi je souhaitais afficher l'édition du profil de la SESSION afin que le membre connecté puisse modifier ses coordonné si besoin.
Merci
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
Je reviens vers vous car je trouve mon problème très bizarre.
Sur la page du profil concerné je me trouve bien sur ça SESSION car toutes ses infos personnel sont affiché avec le Bonjour et son prénom.
Mais le formulaire qui devrait s'afficher pour modification ne s'affiche pas, mais lorsque je supprime la boucle WHILE le formulaire apparait,
Merci si vous avez une idée pour résoudre mon problème
<?php
$idpers	= isset($_REQUEST['idpers']) ? $_REQUEST['idpers'] : '';

	$sql = "SELECT * 
			FROM cdc_personnes
			WHERE idpers = :idpers";
	$requete = $bdd->prepare($sql);							
	$requete->execute(array(
							'idpers' => $idpers
							));
    
    while ($donnees = $requete->fetch()) {
?>
<div id="ModifProfil">
	<form id="formulaire" action="" method="post">
		<input type="hidden" name="idpers" value="<?php echo $donnees['idpers'];?>">
        <fieldset>
            <legend>Modifier mon Profil</legend><br/>

		<table cellpadding="0" cellspacing="3">
			<tr>
				<th colspan="6">Coordonné :</th>
			</tr>
			<tr>
				<td width="20%">Nom :</td>
				<td width="30%"><input name="nom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['nom'];?>" /></td>
				<td width="20%">Prénom :</td>
				<td width="30%"><input name="prenom" class="ModifProfil" size="30" type="text" value="<?php echo $donnees['prenom'];?>" /></td>
			</tr>
			<input name="action" value="ajouter" type="hidden" />
			<a href="javascript:void(0)"><input type="submit" class="submit" value="Enregistrer"/></a>
        </fieldset>
	</form>
	<br/>
</div>

<?php
  }
?>
Messages postés
2506
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
31 août 2021
456
Si le formulaire ne s'affiche pas avec la boucle while, c'est donc que la boucle ne fait aucun tour et donc que la requête sql ne retourne aucun résultat.
Dans ce cas il faut vérifier que la requête est correcte, notamment que le paramètre get ou post idpers est bien défini.
Mais puisque tu souhaites afficher le formulaire de modification du profil connecté, pourquoi ne pas récupérer l'identifiant du profil idpers via la session plutôt que via un paramètre get ou post :
// $idpers = isset($_REQUEST['idpers']) ? $_REQUEST['idpers'] : '';
if (!empty($_SESSION['idpers'])) {
    $idpers = $_SESSION['idpers'];
} else {
    // l'utilisateur n'est pas connecté, on redirige vers la page de connexion...
}

(en supposant que l'identifiant de l'utilisateur connecté soit enregistré en session dans $_SESSION['idpers']).
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
Alors en fait j'ai remplacé
$idpers	= isset($_REQUEST['idpers']) ? $_REQUEST['idpers'] : '';

par sans rien changé à ma requète
$idpers = $_SESSION['idpers'];

Alors je te dis un grand merci mon formulaire est présent avec les infos du membre connecté, je ne comprends pas trop ben pourquoi mais bon....
Merci
Messages postés
33400
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 août 2021
3 703
Bonjour,

je ne comprends pas trop ben pourquoi mais bon....


Et bien.... tout simplement par ce que $_REQUEST est Un tableau associatif qui contient par défaut le contenu des variables $_GET, $_POST et $_COOKIE. ..... et donc.. qu'il ne contient pas le contenu des $_SESSION ....

De toutes façons... je pense que $_REQUEST est à proscrire..... (source d'erreur....)
Il est préférable de savoir comment arrivent les données .. et donc d'utiliser en priorité les variables $_GET / $_POST / $_COOKIE
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
Merci pour les infos
Bon week-end