[RESOLU] Problème $_POST formulaire (PDO)

Eléphant du PHP | 88 Messages

27 août 2014, 21:48

Bonjours à tous. je rencontre un problème assez agassant, sur deux de mes pages, les formulaires pour envoyer les données au serveur apparaissent mais les données ne sont pas apparement postées :

La premiere page pour changer son mot de passe :
	<?php
	// un form pour changer le mdp
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	if(isset($_POST["vmdp"]) AND isset($_POST["nmdp"]) AND isset($_POST["vnmdp"])){
		$sess = $_SESSION['Auth']['pseudo'];
		$rmdp = "SELECT password INTO phpmembre WHERE prenom='".$sess."'";
		$rmdp2 = $cnx->query($rmdp);
		$rmdp3 = $rmdp2->fetch(PDO::FETCH_ASSOC);
		$count = $rmdp3->rowCount($rmdp);
			if ($count == 1){
				if ($_POST['n_mdp'] == $_POST['vn_mdp']){
					$post1 = $_POST['n_mdp'];
					$mmdp = "UPDATE phpmembre SET password=? WHERE prenom=?";
					$mmdp2 = $cnx->prepare($mmdp);
					$mmdp2->execute(array(
							'pass'=>$post1,
							'prenom'=>$sess ));
					echo 'Mot de passe modifié';
				}
			echo 'ERREUR1';
			}
	}
	else {
	echo 'ERREUR2'; }
	?>
	<form action='gestion.php' method='post'>
		Ancien mot de passe : <input type='password' name='vmdp'/><br/>
		Nouveau mot de passe : <input type='password' name='nmdp'/><br/>
		Repetez le mot de passe : <input type='password' name='vnmdp'/>
		<input type='submit' value='Enregistrer'/>
	</form>
Et la seconde pour informer sur son sexe :
<?php // sexe
	if(!empty($tab['sexe'])){
		echo 'Sexe : '.$tab['sexe'];
	} else {
	// les formulaire pour rentrer son sexe ?>
	Civilité sexuelle :
	<form action='gestion.php' method='post'>
			<select name='sexe' id='sexe'>
				<option value="Femme">Femme</option>
				<option value="Homme">Homme</option>
			</select>
			<input type='submit' value='Enregistrer'/>	
	</form>
	<?php
		if(isset($_POST['sexe'])){
			$var2 = $_POST['sexe'];
			$t2 = array (
						'sexe'=> $var2,
						'prenom'=> $s1);
			$req = $cnx->prepare("UPDATE `phpmembre` SET `sexe`=:sexe WHERE `prenom`=:prenom");
			$req->execute($t2);
		}

		else{
		echo 'erreur2';
		}
	}
	?>
		
C'est deux pages sont en réalité en include sur la page mère où la connexion à la base de donnée et les session sont activées.
Le problème est donc que lorsque j'appuie le le bouton enregistrer, rien n'est envoyer pour aucune des deux pages. (pour les deux page, l'erreur2 est tout le temps afficher ce qui prouve que c'est au niveau des POST. Ensuite pour la page d'information du sexe ce doit être mon manque d’expérience avec les <select> qui doivent être la raison de la panne. Les requete sql sont bonne etant donné que le serveur ne me donne aucune erreur. Pouvez vous m'aider s'il vous plait ???
Modifié en dernier par hunomina972 le 27 août 2014, 22:07, modifié 1 fois.
Le temps donne sa légitimité à l'existence...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2014, 22:07

salut,

Tu peux ajouter un var_dump($_POST); avant les if afin de voir ce qu'il y a dans le tableau $_POST.

sinon tu a une requête SQL qui n'est pas correcte : $rmdp = "SELECT password INTO phpmembre WHERE prenom='".$sess."'";

=> select password from phpmembre etc


le select into il faut utiliser une variable et quand même avoir un from latable.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 88 Messages

27 août 2014, 23:16

Ok merci pour l erreur SQL
Ensuite je ne comprend pas à quoi peut servir var_dump ici ???
Le temps donne sa légitimité à l'existence...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2014, 23:28

a palier le fait que n'utilise pas de debuguer (xdebug par exemple) !)

test tu verras.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 88 Messages

28 août 2014, 09:22

Je me sert de xdebug étant donné que je test mes pages sur WAMP et qu il y est activé (par défaut) et il ne me signale absolument rien.
Le temps donne sa légitimité à l'existence...

Eléphant du PHP | 88 Messages

28 août 2014, 10:32

Les var-dump ont fait leur travaille.
Les post n’étaient pas postés car le submit était dans un autre formulaire en bas de la page donc il ne pouvais pas poster, je suppose... même si ça à marché avec d'autre.
Cependant la page de modification de mot de passe ne fonctionne pas et me marque cette erreur :
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\mdp.php on line 20
Le code de cette page est :
	<?php
	// un form pour changer le mdp
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	var_dump($_POST);
	if(isset($_POST["vmdp"]) AND isset($_POST["nmdp"]) AND isset($_POST["vnmdp"])){
		$sess = $_SESSION['Auth']['pseudo'];
		$rmdp = "SELECT password FROM phpmembre WHERE prenom='".$sess."'";
		$rmdp2 = $cnx->query($rmdp);
		$rmdp3 = $rmdp2->fetch(PDO::FETCH_ASSOC);
		$count = $rmdp2->rowCount($rmdp);
			if ($count == 1){
				if ($_POST['nmdp'] == $_POST['vnmdp']){
					$post1 = $_POST['nmdp'];
					$m = array(
							'pass'=>$post1,
							'prenom'=>$sess );
					$mmdp = "UPDATE phpmembre SET password=? WHERE prenom=?";
					$mmdp2 = $cnx->prepare($mmdp);
l.20					$mmdp2->execute($m);
					echo 'Mot de passe modifié';
				}
			else { echo 'ERREUR1'; }
			}
			else { echo 'erreur1.1'; }
	}
	else {
	echo 'ERREUR2'; }
	?>
	<form action='gestion.php' method='post'>
		Ancien mot de passe : <input type='password' name='vmdp'/><br/>
		Nouveau mot de passe : <input type='password' name='nmdp'/><br/>
		Repetez le mot de passe : <input type='password' name='vnmdp'/>
		<input type='submit' value='Enregistrer'/>
	</form>
Mais en meme temps la page me met mot de passe modifié et aucune modification se fait dans la base de donnée.
J'ai vérifier, j'ai une autre page avec la même requête et elle marche mais pas ici. Pourquoi ???
Le temps donne sa légitimité à l'existence...

Mammouth du PHP | 571 Messages

28 août 2014, 11:31

remplace ça:
  $mmdp2->execute($m);
par
 $mmdp2->execute( array( $_POST['nmdp'],$sess ) );

Eléphant du PHP | 88 Messages

28 août 2014, 12:10

nickel merci c'est super ça marche mais pourquoi ce que j'avais fait ne marcher pas ??? Ca revenais au meme ???
$post1 = $_POST['nmdp'];
$m = array(
        'pass'=>$post1,
        'prenom'=>$sess );
Le temps donne sa légitimité à l'existence...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2014, 15:06

non, tu n'utilise pas de paramètre nommé donc il faut un tableau a index numérique.
Je me sert de xdebug étant donné que je test mes pages sur WAMP et qu il y est activé (par défaut) et il ne me signale absolument rien.
j'ai parlé de débogueur. effectivement xdebug sert entre autre à cela, mais ce n'est pas parce qu'il est présent qu'il est utilisé.
déboguer c'est soit placer des var_dump / print_r un peu partout et voir ce que ça donne, soit utiliser un ide qui va permettre de suivre pas à pas l’exécution du script.
cette dernière solution étant bien entendu la plus efficace ;)

sur le sujet
pourquoi l'utiliser http://blog.pascal-martin.fr/post/xdebu ... emiers-pas
comment installer ça avec eclipse : http://blog.pascal-martin.fr/post/xdebu ... clipse-pdt

l'utiliser c'est l'adopter ;)

si ton sujet est résolus merci de l'indiquer en cliquant sur le gros bouton vert a droite du titre ;)

@+
Il en faut peu pour être heureux ......