URGENT: besoin de votre aide ... fonction UPDATE

Résolu
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012 - 21 janv. 2010 à 01:27
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012 - 23 janv. 2010 à 13:50
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

Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
23 janv. 2010 à 12:11
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.
3
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
21 janv. 2010 à 01:36
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 !!!
0
Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
21 janv. 2010 à 03:42
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 ;
0
Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
21 janv. 2010 à 03:44
J'me disais bien que j'avais zapper qqchose ... ... L'erreur est dans "editer.php"
0

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

Posez votre question
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
21 janv. 2010 à 10:46
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 !!!!
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
21 janv. 2010 à 10:52
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
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
21 janv. 2010 à 11:00
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 !!!
0
Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
21 janv. 2010 à 11:31
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") ;
  }
?>
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
22 janv. 2010 à 01:31
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 !
0
Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
22 janv. 2010 à 06:30
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
}
?>
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
23 janv. 2010 à 10:43
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 !!!
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
23 janv. 2010 à 12:26
oki merci ... je te tiens au courant !
0
Gr3g69 Messages postés 27 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 13 février 2010
23 janv. 2010 à 13:03
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 ^^)

;-)
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
23 janv. 2010 à 13:48
en utilisant la fonction header non ?
0
FXPHANTOM Messages postés 60 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 10 mai 2012
23 janv. 2010 à 13:50
lol je viens de voir ton petit message ... excellent
0
Rejoignez-nous