PHP MYSQL et SESSION : UPDATE de la table qui ne marche pas

Eléphanteau du PHP | 18 Messages

03 oct. 2008, 03:05

Bonsoir, ou plutôt bonjour à tous ,

Après de longues heures a chercher sur le net, me creuser les méninges je viens vous demander de l'aide .

Sur mon site l'utilisateur est identifié par session et rien ne passe par l'URL.
J'ai une partie utilisateurs, où ils voient leurs infos. Jusque là tout va bien.
Mais j'aimerai faire une UPDATE de la table sur la même page, du type : www-monsite-fr/mon_espace/informations.php&valide

Mon problème se situe lors du passage des variables. Lorsque je valide ca m'affiche une page blanche et pas de message d'erreur, rien du tout ...!

Voilà le code de l'update :
<?php
if(isset($_POST['envoyer'])){ 
    


	$id = $_POST['id'];
	$email =  addslashes(htmlentities($_POST['email']));
	$pass =  addslashes(htmlentities($_POST['pass']));
	$pass2 =  addslashes(htmlentities($_POST['pass2']));
	$civilite =  addslashes(htmlentities($_POST['civilite']));
	$nom =  addslashes(htmlentities($_POST['nom']));
	$prenom =  addslashes(htmlentities($_POST['prenom']));
	$adresse =  addslashes(htmlentities($_POST['adresse']));
	$cp =  addslashes(htmlentities($_POST['cp']));
	$ville =  addslashes(htmlentities($_POST['ville']));
	$telephone =  addslashes(htmlentities($_POST['telephone']));
	$portable =  addslashes(htmlentities($_POST['portable']));
	$fax =  addslashes(htmlentities($_POST['fax']));


  
    if(isset($_POST['email'])) 
    { 

	mysql_query(" UPDATE clients SET
 nom='$nom', prenom='$prenom', email='$email', telephone='$telephone', pass='$pass', civilite='$civilite', portable='$portable', cp='$cp', ville='$ville', adresse='$adresse', fax='$fax', pass2='$pass2'   WHERE id='$id'") or die (mysql_error()) ;

	     echo '<center><p>Le restaurant a bien &eacute;t&eacute;e mise &agrave; jour</p> 
                <p><a href="accueil.php">Retour &agrave; l\'accueil</a></p></center>'; 
   }
}
?>
Et le formulaire :
<?php
session_start() ;
	if ( isset( $_SESSION['email_clients'] ) ) 
     { 
	$login=$_SESSION['id_clients'];

echo '<input type="hidden" name="id" value="'.$login.'" />'; 


  	$demande2 = mysql_query("SELECT * FROM clients WHERE id=$login" ) or die (mysql_error());
	while ($clients = mysql_fetch_assoc($demande2)) 
    { 
	//if(isset($_POST['envoyer'])){ 
        $id = $clients['id'];
	$email =  $clients['email'];
	$emailverif =  $clients['emailverif'];
	$pass =  $clients['pass'];
 	$civilite = $clients['civilite'];
	$nom =  $clients['nom'];
	$prenom =  $clients['prenom'];
	$adresse =  $clients['adresse'];
	$cp =  $clients['cp'];
	$ville = $clients['ville'];
	$telephone =  $clients['telephone'];
	$portable =  $clients['portable'];	
	$fax = $clients['fax'];


 
?>

Code : Tout sélectionner

<form method="post"> <form method="post"> <table border="0" cellspacing="0"> <tr> <td align="left" width="150" style="padding:10px 0 10px 0;"><b>* Identifiants</b></td> <td>&nbsp;</td> </tr> <tr> <td align="left" width="150">* Votre e-mail :</td> <td><input type="text" name="email" size="20" value="<?php echo $email; ?>" /> </td> </tr> ...... <tr> <td align="left" width="150"></td> <td align="right" style="padding-top:10px;"><input enctype="multipart/form-data" type="submit" name="modif_livre" value="Modifier" /> </td> </tr> </table> </form>
<?php
	  echo'</div>';
 }}
 else { echo' VOUS N\'ETES PAS AUTORISE A VOIR CETTE PAGE. VEUILLEZ VOUS CONNECTER.';}
 ?>
J'espere que je ne me suis pas trop mal exprimé ..
Je ne sais pas si quelqu'un a une idée ?
Je sais faire des UPDATE, mais là je cale vraiment à cause des sessions.

Merci d'avance
Charles

ViPHP
AB
ViPHP | 5818 Messages

03 oct. 2008, 04:16

C'est peu fréquent qu'on voit quelque chose dans l'URL quand on utilise les sessions car la plupart du temps l'identifiant de session passe dans un cookie (si le visiteur n'a pas désactivé les cookies).
C'est uniquement s'il a désactivé les cookie que l'identifiant passe dans l'url. Et dans ce cas pour que cela fonctionne il faut que le script ait été prévu pour.

Tu déclares deux fois <form> ? et tu oublies l'attribut "action =..."

et puis c'est bizarre ça

Code : Tout sélectionner

<input enctype="multipart/form-data" type="submit" name="modif_livre" value="Modifier" />
Les sessions ne sont certainement pas la principale cause de ton pb. Tu as le formulaire à retravailler avant d'aller plus loin.

Eléphanteau du PHP | 18 Messages

03 oct. 2008, 11:03

Bonjour AB, merci de ta réponse rapide.

Le double <form> c'est une erreur de frappe sur le forum..
Je n'ai pas mis d'attribut action car je déclare une variable "envoyer".
Mon code avait quelques erreurs je l'ai modifié mais ça bloque toujours.

J'utilise ce formulaire pour l'inscription avec INSERT INTO et ça marche sans problème ..
Voilà la mise à jour :

Mon code UPDATE
if(isset($_POST['envoyer'])){ 
    
    $alerte =  $_POST['envoyer'];
	
	$id = $_POST['id'];
	$email =  addslashes(htmlentities($_POST['email']));
	$pass =  addslashes(htmlentities($_POST['pass']));
	$pass2 =  addslashes(htmlentities($_POST['pass2']));
	$civilite =  addslashes(htmlentities($_POST['civilite']));
	$nom =  addslashes(htmlentities($_POST['nom']));
	$prenom =  addslashes(htmlentities($_POST['prenom']));
	$adresse =  addslashes(htmlentities($_POST['adresse']));
	$cp =  addslashes(htmlentities($_POST['cp']));
	$ville =  addslashes(htmlentities($_POST['ville']));
	$telephone =  addslashes(htmlentities($_POST['telephone']));
	$portable =  addslashes(htmlentities($_POST['portable']));
	$fax =  addslashes(htmlentities($_POST['fax']));


if(isset($_POST['email'])&&($_POST['pass'])&&($_POST['pass2']))
 {  		mysql_query(" UPDATE clients SET
 nom='$nom', prenom='$prenom', email='$email', telephone='$telephone', pass='$pass', civilite='$civilite', portable='$portable', cp='$cp', ville='$ville', adresse='$adresse', fax='$fax', pass2='$pass2'   WHERE id='$id'") or die (mysql_error()) ;

	     echo '<center><p>OK mise a jour</p> </center>'; 
   }
}
Mon formulaire avec apercu des champs deja remplis
session_start() ;
	if ( isset( $_SESSION['email_clients'] ) ) 
     { 
	$login=$_SESSION['id_clients'];

echo '<input type="hidden" name="id" value="'.$login.'" />'; 


  	$demande2 = mysql_query("SELECT * FROM clients WHERE id=$login" ) or die (mysql_error());
	while ($clients = mysql_fetch_assoc($demande2)) 
    { 
	//if(isset($_POST['envoyer'])){ 
    $id = $clients['id'];
	$email =  $clients['email'];
	$emailverif =  $clients['emailverif'];
	$pass =  $clients['pass'];
 	$civilite = $clients['civilite'];
	$nom =  $clients['nom'];
	$prenom =  $clients['prenom'];
	$adresse =  $clients['adresse'];
	$cp =  $clients['cp'];
	$ville = $clients['ville'];
	$telephone =  $clients['telephone'];
	$portable =  $clients['portable'];	
	$fax = $clients['fax'];


 
?>

Code : Tout sélectionner

<form method="post"> <table border="0" cellspacing="0"> <tr> <td align="left" width="150" style="padding:10px 0 10px 0;"><b>* Identifiants</b></td> <td>&nbsp;</td> </tr> <tr> <td align="left" width="150">* Votre e-mail :</td> <td><input type="text" name="email" size="20" value="<?php echo $email; ?>" /> </td> </tr> ... <tr> <td align="left" width="150">Votre fax :</td> <td><input type="text" name="fax" size="20" value="<?php echo $fax; ?>" /></td> </tr> <tr> <td align="left" width="150"></td> <td align="right" style="padding-top:10px;"><input type="submit" name="envoyer" value="Envoyer"> </td> </tr> </table> </form>
<?php
	  echo'</div>';
 }}
  else { echo' VOUS N\'ETES PAS AUTORISE A VOIR CETTE PAGE. VEUILLEZ VOUS CONNECTER.';}
 ?>
L'affichage est dans cet ordre.
Et pourtant ça marche pour une création d'un utilisateur.

Si ça peut aider, voilà mon code de création d'utilisateur:
if(isset($_POST['envoyer'])){ 
    
    $alerte =  $_POST['envoyer'];
	$id =  addslashes(htmlentities($_POST['id'], ENT_NOQUOTES));
	$email =  addslashes(htmlentities($_POST['email'], ENT_NOQUOTES));
	$pass2 =  addslashes(htmlentities($_POST['pass2'], ENT_NOQUOTES));
	$pass =  addslashes(htmlentities($_POST['pass'], ENT_NOQUOTES));
	$civilite =  addslashes(htmlentities($_POST['civilite'], ENT_NOQUOTES));
	$nom =  addslashes(htmlentities($_POST['nom'], ENT_NOQUOTES));
	$prenom =  addslashes(htmlentities($_POST['prenom'], ENT_NOQUOTES));
	$adresse =  addslashes(htmlentities($_POST['adresse'], ENT_NOQUOTES));
	$cp =  addslashes(htmlentities($_POST['cp'], ENT_NOQUOTES));
	$ville =  addslashes(htmlentities($_POST['ville'], ENT_NOQUOTES));
	$telephone =  addslashes(htmlentities($_POST['telephone'], ENT_NOQUOTES));
	$portable =  addslashes(htmlentities($_POST['portable'], ENT_NOQUOTES));
	$fax =  addslashes(htmlentities($_POST['fax'], ENT_NOQUOTES));

if(isset($_POST['email'])&&($_POST['pass'])&&($_POST['pass2']))
 {  	$query="SELECT email FROM clients WHERE email='".$email."'";
		$result=mysql_query($query);
		
		if(mysql_num_rows($result)== 1)
		{
			echo '<div style="padding:5px;"><b>Cette adresse e-mail existe deja </b></div>';
		}
		
		else if(($pass)!=($pass2))
			{
    		echo '<div style="padding:5px;"><b>Erreur dans la saisie du mot de passe </b></div>'; 
			}
			
		else{

    		$sql = "INSERT INTO clients VALUES 
			('$id', '$nom', '$prenom', '$email', '$elephone', '$pass', '$civilite', '$portable', '$cp', '$ville', '$adresse', '$fax', '$pass2') "; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
			}
		}
le formulaire

Code : Tout sélectionner

<form method="post"> <table border="0" cellspacing="0"> <tr> <td align="left" width="150" style="padding:10px 0 10px 0;"><b>* Identifiants</b></td> <td>&nbsp;</td> </tr> ... <tr> <td align="left" width="150"></td> <td align="right" style="padding-top:10px;"><input type="submit" name="envoyer" value="Envoyer"> </td> </tr> </table> </form>

Eléphanteau du PHP | 18 Messages

05 oct. 2008, 23:05

Personne n'aurait une idée ?

Eléphant du PHP | 451 Messages

05 oct. 2008, 23:13

Cette ligne:
if(isset($_POST['email'])&&($_POST['pass'])&&($_POST['pass2']))
J'opterais plutôt pour:
if(isset($_POST['email']) && isset($_POST['pass']) && isset($_POST['pass2']))

Eléphanteau du PHP | 18 Messages

05 oct. 2008, 23:21

Bonsoir djtec, j'ai modifié la syntaxe mais malheureusement ma page reste toujours blanche ...

Eléphant du PHP | 451 Messages

05 oct. 2008, 23:35

Je viens de tester et chez moi cela fonctionne très bien, la table se met à jour et le message s'affiche comme quoi c'est ok.

Essaye ceci:
	if(isset($_POST['email']) && isset($_POST['pass']) && isset($_POST['pass2'])) 
 	{
		mysql_query("UPDATE clients SET
 nom='$nom', prenom='$prenom', email='$email', telephone='$telephone', pass='$pass', civilite='$civilite', portable='$portable', cp='$cp', ville='$ville', adresse='$adresse', fax='$fax', pass2='$pass2' WHERE id='$id'") or die (mysql_error());

        echo '<center><p>OK mise a jour</p></center>'; 
	}
	else
	{
		echo '<center><p>Erreur</p></center>';
	}

Eléphanteau du PHP | 18 Messages

05 oct. 2008, 23:40

Merci djtec :)
Bon alors je viens d'essayer j'ai toujours ma page blanche, ce qui me "rassure" donc le problème serait sur une erreur "bete" sur ma page, je vais reverifier mes balises, voir si tout est bien fermé.
Je teste et je vosu tiens au courant

EDIT :

Bon je viens de tout re vérifier et j'ai toujours ma page blanche.
Mon code pour l'update est :

if(isset($_POST['envoyer']))  
{
 
	$id =  addslashes(htmlentities($_POST['id'], ENT_NOQUOTES));
	$email =  addslashes(htmlentities($_POST['email'], ENT_NOQUOTES));
	$pass2 =  addslashes(htmlentities($_POST['pass2'], ENT_NOQUOTES));
	$pass =  addslashes(htmlentities($_POST['pass'], ENT_NOQUOTES));
	$civilite =  addslashes(htmlentities($_POST['civilite'], ENT_NOQUOTES));
	$nom =  addslashes(htmlentities($_POST['nom'], ENT_NOQUOTES));
	$prenom =  addslashes(htmlentities($_POST['prenom'], ENT_NOQUOTES));
	$adresse =  addslashes(htmlentities($_POST['adresse'], ENT_NOQUOTES));
	$cp =  addslashes(htmlentities($_POST['cp'], ENT_NOQUOTES));
	$ville =  addslashes(htmlentities($_POST['ville'], ENT_NOQUOTES));
	$telephone =  addslashes(htmlentities($_POST['telephone'], ENT_NOQUOTES));
	$portable =  addslashes(htmlentities($_POST['portable'], ENT_NOQUOTES));
	$fax =  addslashes(htmlentities($_POST['fax'], ENT_NOQUOTES));
	$date = addslashes(htmlentities($_POST['date'], ENT_QUOTES));

if(isset($_POST['email']) && isset($_POST['pass']) && isset($_POST['pass2']))  
     { 
        mysql_query("UPDATE clients SET 
 nom='$nom', prenom='$prenom', email='$email', telephone='$telephone', pass='$pass', civilite='$civilite', portable='$portable', cp='$cp', ville='$ville', adresse='$adresse', fax='$fax', pass2='$pass2',temps='', cle='', actif='' WHERE id='$id'") or die (mysql_error()); 

        echo '<center><p>OK mise a jour</p></center>';  
    } 
    else 
    { 
        echo '<center><p>Erreur</p></center>'; 
    } 


	}

Ca pourrait venir de ma condition if(isset()) ?

Eléphant du PHP | 451 Messages

06 oct. 2008, 00:13

Je ne vois pas d'où ça pourrai venir car moi je fais ceci:
<?php

if(isset($_POST['envoyer'])){ 
    
    $alerte =  $_POST['envoyer'];
    
    $id = $_POST['id'];
    $email =  addslashes(htmlentities($_POST['email']));
    $pass =  addslashes(htmlentities($_POST['pass']));
    $pass2 =  addslashes(htmlentities($_POST['pass2']));
    $civilite =  addslashes(htmlentities($_POST['civilite']));
    $nom =  addslashes(htmlentities($_POST['nom']));
    $prenom =  addslashes(htmlentities($_POST['prenom']));
    $adresse =  addslashes(htmlentities($_POST['adresse']));
    $cp =  addslashes(htmlentities($_POST['cp']));
    $ville =  addslashes(htmlentities($_POST['ville']));
    $telephone =  addslashes(htmlentities($_POST['telephone']));
    $portable =  addslashes(htmlentities($_POST['portable']));
    $fax =  addslashes(htmlentities($_POST['fax']));


	if(isset($_POST['email']) && isset($_POST['pass']) && isset($_POST['pass2'])) 
 	{
		mysql_query("UPDATE clients SET email='$email', pass='$pass', pass2='$pass2' WHERE id='$id'") or die (mysql_error());

        echo '<center><p>OK mise a jour</p></center>'; 
	}
	else
	{
		echo '<center><p>Erreur</p></center>';
	}
} 

?>

<form method="post">
<table border="0" cellspacing="0">
 
   <tr>
        <td align="left" width="150" style="padding:10px 0 10px 0;"><b>* Identifiants</b></td>
        <td>&nbsp;</td>
    </tr>
 
    <tr>
        <td align="left" width="150">* Votre e-mail :</td>
        <td><input type="text" name="email" size="20" value="<?php echo $email; ?>" />  </td>
     </tr>   
    <tr>
        <td align="left" width="150">* pass :</td>
        <td><input type="text" name="pass" size="20" value="<?php echo $pass; ?>" />  </td>
     </tr>   
    <tr>
        <td align="left" width="150">* pass2 :</td>
        <td><input type="text" name="pass2" size="20" value="<?php echo $pass2; ?>" />  </td>
     </tr>   
     <tr>
        <td align="left" width="150"></td>
        <td align="right" style="padding-top:10px;"><input type="submit"  name="envoyer" value="Envoyer"><input type="hidden" name="id" value="1" />
</td>
     </tr> 
</table>
     </form>
C'est juste pour tester et cela fonction très bien chez moi.

ViPHP
AB
ViPHP | 5818 Messages

06 oct. 2008, 00:19

Cette ligne:
if(isset($_POST['email'])&&($_POST['pass'])&&($_POST['pass2']))
J'opterais plutôt pour:
if(isset($_POST['email']) && isset($_POST['pass']) && isset($_POST['pass2']))
Pour se simplifier la vie on peux aussi faire
if(isset($_POST['email'], $_POST['pass'], $_POST['pass2']))
mais attention cette syntaxe ne fonctionne pas avec empty()

Eléphant du PHP | 451 Messages

06 oct. 2008, 00:24

Je ne savais pas que l'on pouvait faire comme ceci mais c'est intéressant car cela rend plus propre et lisible et plus facile à comprendre merci AB pour cette info.

Eléphanteau du PHP | 18 Messages

06 oct. 2008, 00:24

Bon je viens de modifier par ton code et tout est bon, une petite erreur dans l'update

Un GRAN GRAND merci


:D :priere:

Eléphant du PHP | 451 Messages

06 oct. 2008, 00:27

De rien.

++