Formulaire et Boucle while

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 6 mai 2016 à 06:32
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 13 mai 2016 à 21:42
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

codeurh24 Messages postés 760 Date d'inscription samedi 29 mars 2014 Statut Membre Dernière intervention 8 septembre 2018 123
Modifié par codeurh24 le 6/05/2016 à 10:41
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
}
?>
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
6 mai 2016 à 15:01
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
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
6 mai 2016 à 20:38
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
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
9 mai 2016 à 06:47
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
  }
?>
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
9 mai 2016 à 11:53
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']).
0

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

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
9 mai 2016 à 20:27
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
0
jordane45 Messages postés 38350 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 26 décembre 2024 4 719
10 mai 2016 à 00:46
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
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 mai 2016 à 21:42
Bonjour
Merci pour les infos
Bon week-end
0