URGENT: besoin de votre aide ... fonction UPDATE

[Résolu]
Signaler
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012
-
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012
-
Ami du jour , bonjour ,
et oui c'est encore moi !!! J'ai besoin de votre aide pour un probleme que je n'arrive pas a resoudre !!! j'y ai passé la journée mais je n'ai rien trouvé , j'ai sans doute fait une erreur de syntaxe . Ma page principale se nome "modifperso.php" et a cette page est relié : "editer.php" qui identifie les données et lit la ligne du membre qui est connecté sur son compte et "modification3.php" relié a son tours par "editer.php" permettant de confirmer l'envoi et le changement des données et redirection vers la page "modifperso.php" .

Donc ma base de donnée se nome "kdportec"
ma table : utilisateurs
et les colonne du tableau qui me concerne c'est id_user, adresse1, adresse2, codepostal, ville, email, tel1 .

Pourriez vous s'il vous plait jeter un petit coup d'oeil (le code n'est pas trop long ;-))voir si je n'ai pas fait d'erreurs ... En vous remerciant par avance.


//editer.php
<?php require_once('auth/connexion.php')?>
 <?php
  //sélection de la base de données:
  $dbprotect = mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR);
  $database_dbprotect = mysql_select_db('kdprotec');
 
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["id_user"] ;
 
  //requête SQL:
  $sql = "SELECT *
            FROM utilisateurs
    WHERE id_user = ".$id_user ;
 
  //exécution de la requête:
  $requete = mysql_query( $sql, $dbprotect ) ;
 
  //affichage des données:
  if( $result = mysql_fetch_object( $requete ) )
  {
  ?><form name="insertion" action="modification3.php" method="POST">
  ">
  adresse1,
adresse1) ;?>">,

----

adresse2,
adresse2) ;?>">,

----

code postal,
codepostal) ;?>">,

----

ville,
ville) ;?>">,

----

pays,
pays) ;?>">,

----


</form>
  <?php
  }//fin if 
  ?>

</html>



//et modification3.php
<?php require_once('auth/connexion.php'); ?>
<?php
  //connection a la base de donnée
  $dbprotect = mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR);
  $database_dbprotect = mysql_select_db('kdprotec');
  //récupération des valeurs des champs:
  //nom:
  $adresse1 = $_POST["adresse1"] ;
  //prenom:
  $adresse2 = $_POST["adresse2"] ;
  //adresse:
  $codepostal = $_POST["codepostal"] ;
  //code postal:
  $ville = $_POST["ville"] ;
  //numéro de téléphone:
  $pays = $_POST["pays"] ;
 
  //récupération de l'identifiant de la personne:
  $id_user = $_POST["id_user"] ;
 
  //création de la requête SQL:
  $sql = "UPDATE utilisateurs
            SET adresse1 = '$adresse1', 
          adresse2 = '$adresse2',
  codepostal = '$codepostal',
  ville = '$ville',
  pays = '$pays'
           WHERE id_user = '$id_user' " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $dbprotect) or die( mysql_error() ) ;
 
 
  //affichage des résultats, pour savoir si la modification a marchée:
  if($requete)
  {
    echo("La modification à été correctement effectuée") ;
    echo '<script language="Javascript">

document.location.replace("modifperso.php");

</script>';


  }
  else
  {
    echo("La modification à échouée") ;
  }
?>

15 réponses

Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

Hello,

Je vois plein de petites choses qui vont pas :

Editer.php

Lignes 19 - 23 - 27 - ...

Dans tes balises input, tu souhaites indiquer la valeur dans la base et c'est très bien. Seulement tu fais une erreur de syntaxe sur ton echo.
Manuel Echo()
Tu trouvera dans le lien ci-dessus la doc de cette "pseudo fonction".

Correction pour la ligne 19 (tu corrigera le reste tt seul)
">


Modification3.php

Les lignes 8 et 9 sont inutiles, du moins si tu n'as pas d'autres traitements que tu n'as pas inclus dans ton copy/paste.
Pour le code comme tu le présente ici, ca ne sers à rien, tu fais un appel dans la base dont tu ne te ressers pas. Donc perte de temps et consommation de ressources inutiles.

Les lignes 10 à 22 sont "optionnelles" tu peux passer les variables $_POST['xxx'] directement dans ta requête, mais la encore ca dépends si tu as d'autres traitements. En tout cas, ces lignes ne génèrent pas d'erreur.

Ensuite la ligne :

//exécution de la requête SQL:
$requete1 = mysql_query( $sql2 ) ;


Dans cette ligne, tu dis : $requete1 contiens le résultat de la requete SQL $sql2.

Et la c'est le drame ...

En dessous tu traites tes redirection, la condition pour rediriger est la suivante :
SI $requete1 N'EST PAS DEFINI affiche 'Modif effectuée' SINON affiche 'Modif non effectuée'

Donc tu ne peux pas avoir le message de succès car tu dis "$requete1 est égal à" juste au dessus, ce qui fait que ton if, dans cette forme, ne peux pas renvoyer le message de succès. Tu auras toujours la valeur de ton else quoi qu'il en soit.

D'ailleurs la variable $requete1 est complètement inutile, la requête ne renverra rien. Tu peux passer directement ton mysql_query, le résultat sera le même. Si ce n'est que cette fois, tu aura le message de modif avec succès parce que la variable n'existe plus. Mais c'est le même effet pervers, ce n'est pas la solution.

Alors une solution pour ce pb de la fin, j'en ai une mais j'te laisse réfléchir qques temps avant de te la proposer.
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

J'ai oublié de mettre mes tests : quand je lance ma page editer.php id_user me semble pas reconnu mais dans mes j'ai mes données qui sont indiquées . Je les modifieset je fais envoyer , il me confirme que c'est bien modifié mais quand je reviens sur ma page editer.php on voit que les modifs ne sont pas effectuées. Et j'ai vérifié dans ma base de donnée voir sil y a du changement mais je n'ai rien du tout !!!
Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

Hello,

Tu as une seule erreur a priori dans ton code. Mais il est presque 03h45, alors j'ai peut-être pas bien les yeux en face des trous.

L'erreur : Tu affecte ton id_user passé en GET à la variable $id, et tu utilise $id_user dans ta condition SQL.
Soit tu modifies l'un, soit l'autre, mais faut mettre les même.

//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id = $_GET["id_user"] ;

//requête SQL:
$sql = "SELECT *

FROM utilisateurs
WHERE id_user = ".$id_user ;
Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

J'me disais bien que j'avais zapper qqchose ... ... L'erreur est dans "editer.php"
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Bonjour Gr3g69,
merci encore de t'intéresser a mon problème ... par contre je vois que tu es plus acharné que moi ... 3h45 du matin .. c bo !!!!
Non tout ça pour te dire que j'ai modifier ce que tu m'as demandé ... et j'ai le problème suivant :

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /homez.318/..../www/editer.php on line 20

la ligne 20 correspond à l'affichage des données : if( $result = mysql_fetch_object( $requete ) )

Jsé po koi faire !!!!
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

je mets ce que j'ai modifié ci-aprés :

[code=php]]$id_user = $_GET["id_user"] ;

//requête SQL:
$sql = "SELECT *
FROM utilisateurs
WHERE id_user = ".$id_user ;[/code
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

J'ai fait un autre test ... comme j'utilise déjà $id_user dans la page "modifperso.php" je me suis permis d'effacer $id = $_GET["id_user"] ;
et je n'ai plus l'erreur "Warning: mysql_fetch_object():" donc j'essai une fois de plus un test de modification de formulaire, il me dit que le changement est fait mais rien ne se passe en réalité et surtout pas de changement dans ma base sql ...

Je ne comprends vraiment pas !!!
Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

Yop yop, dans ton formulaire (editer.php), tu passes l'id en hidden, jusque là parfait, mais du coup si tu as changer $id par $id_user, c'est normal que les modifs ne passent pas sur la bdd parce que l'id ne correspond pas.
Encore une fois il faut mettre le même.

je te propose de modifier cette ligne de editer.php pour que ca colle avec le modification.php:

">

id_user doit correspondre à ta variable $POST_['id_user'], si tu as modifier cette dernière, il faut accorder ton formulaire.

$id doit correspondre à ta variable dans la ligne ligne $id = $_GET["id_user"];

En bref tout ton problème est que tu ne passe pas l'id de la ligne à modifier correctement tout au long de ton script.


Pour fair simple, je l'aurais écrit comme ceci :

<?php require_once('auth/connexion.php')?>
 <?php
  //sélection de la base de données:
  $dbprotect = mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR);
  $database_dbprotect = mysql_select_db('kdprotec');
 
  //requête SQL:
  $sql = "SELECT *

            FROM utilisateurs
    WHERE id_user = ".$_GET["id_user"] ;

 
  //exécution de la requête:
  $requete = mysql_query( $sql, $dbprotect ) ;
 
  //affichage des données:
  if( $result = mysql_fetch_object( $requete ) )
  {
  ?><form name="insertion" action="modification3.php" method="POST">
  ">
  adresse1,
adresse1) ;?>">,

----

adresse2,
adresse2) ;?>">,

----

code postal,
codepostal) ;?>">,

----

ville,
ville) ;?>">,

----

pays,
pays) ;?>">,

----


</form>
  <?php
  }//fin if 
  ?>

</html>




//et modification3.php
Code PHP :

<?php require_once('auth/connexion.php'); ?>
<?php
  //connection a la base de donnée
  $dbprotect = mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR);
  $database_dbprotect = mysql_select_db('kdprotec');
  //création de la requête SQL:
  $sql = "UPDATE utilisateurs

            SET adresse1 = $_POST['adresse1'], 
          adresse2 = $_POST['adresse2'],,
  codepostal = $_POST['codepostal'],,
  ville = $_POST['ville'],,
  pays = $_POST['pays'],
           WHERE id_user = $_POST['id_user'], " ;

 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $dbprotect) or die( mysql_error() ) ;
 
 
  //affichage des résultats, pour savoir si la modification a marcher:
  if($requete)
  {
    echo("La modification à été correctement effectuée") ;
    echo '<script language="Javascript">


document.location.replace("modifperso.php");

</script>';



  }
  else
  {
    echo("La modification à échouée") ;
  }
?>
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Salut ,
Alors je viens te donner l'avancement de la situation :

Les modifications ont apportées beaucoup d'amélioration. j'ai juste un petit soucis maintenant sur la ligne 14 :

 if( $result = mysql_fetch_object( $requete )) ; 


correspondant a la ligne du fichier "editer.php" est l'erreur est la suivante :

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /homez.318/kadoox/www/editer.php on line 14

Je sens qu'on tient le bon bout lol ... un dernier coup de pouce et ça doit être bon !
Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

Hello,

Vérifie la syntaxe de la ligne, on ne sait jamais ;-)

Pour le reste, je ne suis pas un grand fan de mysql_fetch_object().
J'utilise, en général, mysql_fetch_array(). Les deux sont quasi identiques, il n'y a que la syntaxe qui change par la suite.

Je pense que c'est le "if" qui mets le bazar. Essai en remplaçant ta ligne 14 par :

$result = mysql_fetch_object($requete);


et puis tu vire l'accolade en bas du formulaire.

Si tu veux vraiment une condition if pour afficher ton tableau, alors en dessous de ta ligne 14 tu peux utiliser un if qui affiche ton formulaire si $result n'est pas vide par exemple :

<?php 
//On crée la ligne de tableau
$result = mysql_fetch_object($requete);
//On affichage les données si $result contiens qqchose
if (!empty($result)) {
?>


Tu te méfieras, l'erreur n'est pas apparue car le script a planté avant la lecture des lignes du formulaire, je pense que tes "echo" ne sont pas bons.
Tu as écris :

echo ($result->adresse1);


au lieu de :

echo $result->adresse1;




Si tu veux faire un essai avec mysql_fetch_array() :

<?php 
//On crée la ligne de tableau
$result = mysql_fetch_array($requete);
//On affichage les données si $result contiens qqchose
if (!empty($result)) {
?>
<form name="insertion" action="modification3.php" method="POST">
">
adresse1,
">,

----

adresse2,
">,

----

code postal,
">,

----

ville,
">,

----

pays,
">,

----


</form>
<?php
}
?>
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

Alors je viens t'annoncer du positif ... ca fonctionne ...
J'ai apporté quelques modifications de mon côté aussi mais ne prête pas attention à l'ergonomie du code je m'en occuperai aprés donc je le poste en dessous pour ceux à qui ça intéresse ... Mais un autre soucis se pose ... Lorsque, dans les cases "input type" se note les modifications et que je les envois , il prend les modifications en compte mais indique "modifications échouées" donc en effet quand je reviens a la page de "modifperso.php" avec ou sans redirection ce n'est pas pris en compte mais quand je renouvelle l'opération à la suite , "modifications echouées" est toujours présent, il me redirige vers "modifperso.php" et la modification est enfin effectué ... donc en bref je suis obligé de faire 2 fois la modification pour que ça soit modifier et j'aimerai vraiement que ça fonctionne normalement ! je poste les pages ci dessous :

// editer.php

<?php require_once('auth/connexion.php')?>
<?php
  //sélection de la base de données:
  $dbprotect =  mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR); 
  
  $database_dbprotect = mysql_select_db('kdprotec');
 
  //requête SQL:
  $sql2 = "SELECT * FROM utilisateurs WHERE id_user=$id_user" ;

  //exécution de la requête:
  $requete = mysql_query( $sql2, $dbprotect ) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());
  $result = mysql_fetch_array( $requete );
  //affichage des données:
  if(!empty($result))
  {
?>
   <form name="insertion" action="modification3.php" method="POST">
  ">
  adresse1,
">,

----

adresse2,
">,

----

code postal,
">,

----

ville,
">,

----

pays,
">,

----


</form>
<?php
  }//fin if 
  ?>

</html>



// Modification3.php

<?php require_once('auth/connexion.php'); ?>
<?php
  //connection a la base de donnée
  $dbprotect = mysql_pconnect($hostname_dbprotect, $username_dbprotect, $password_dbprotect) or trigger_error(mysql_error(),E_USER_ERROR);
  echo( "IDCLIENT ".$id_user." 
\n" ) ;
  //création de la requête SQL:
        $dbprotect  = mysql_select_db('kdprotec');
$sql2 =  mysql_query("SELECT * FROM utilisateurs WHERE id_user=$id_user") ;
$result = mysql_fetch_array($sql2);
//ADRESSE 
  $adresse1 = $_POST['adresse1'] ;
  //COMPLEMENT ADRESSE 
  $adresse2 = $_POST['adresse2'] ;
  //CP:
  $codepostal = $_POST['codepostal'] ;
  //VILLE:
  $ville = $_POST['ville'] ;
  //PAYS:
  $pays = $_POST['pays'] ;
 
  //récupération de l'identifiant de la personne:
  $id_user = $_POST['id_user'] ;
echo( "CP CLIENT:  ".$codepostal." 
\n" ) ;
  $sql2  = mysql_query("UPDATE utilisateurs SET adresse1='$adresse1',
          adresse2='$adresse2',
  codepostal='$codepostal',
  ville='$ville',
  pays='$pays'
           WHERE id_user=$id_user") or die ('Erreur : '.mysql_error()); 


 
  //exécution de la requête SQL:
  $requete1 = mysql_query( $sql2 ) ;
 
 
  //affichage des résultats, pour savoir si la modification a marcher:
  if (!isset($requete1))
  {
    echo("La modification à été correctement effectuée") ;
    echo '<script language="Javascript">
    document.location.replace("modifperso.php");
    </script>';
  }
  else
  {
    echo("La modification à échouée") ;
echo '<script language="Javascript">
    document.location.replace("modifperso.php");
    </script>';

  }
?>


Tiens moi au courant si tu trouves quelques d'anormal !!!
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

oki merci ... je te tiens au courant !
Messages postés
27
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
13 février 2010

Courage ^^

Et si tu as mal au crane ... voici ma recette :

- 3 aspirines (pour l'effet à long terme),
- 2 grosses cigarettes magiques (pour l'effet a court terme),
- 1 trace de C' (rien a voir avec le mal de crane, j'cuisine toujours riche ^^)

;-)
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

en utilisant la fonction header non ?
Messages postés
60
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
10 mai 2012

lol je viens de voir ton petit message ... excellent