IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

update d'une table sous MySQl


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut update d'une table sous MySQl
    Bonjour,
    me revoila encore avec un petit probleme,
    j'ai l'intention de faire l'update de ma base de données,alors je charge d'abords ma table et je crée pour chaque ligne un lien dont je passe mon id.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <form action="modifier.php">
    			<?php
    				$link = mysql_connect("localhost","root");
    				mysql_select_db("GestionClients",$link)or die(mysql_error());
    				$query = "select * from Client";
    				$result = mysql_query($query, $link)or die($query . " - " . mysql_error());
    				$nbreResultats = mysql_num_rows($result);
    				echo "nombre d'enregistrement: ". $nbreResultats;
    				echo "</br>";
     
    				while ($test=mysql_fetch_row($result)) {
    					list($id, $nom, $prenom, $adresse)=$test;
    					echo $nom.' '.$prenom.' '.$adresse;
    					echo "<a href='modifier.php?num=$id'>modifier</a>";
    					echo '<br>';
    				}
    			?>
    		</form>
    dans la page modifier.php je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <form action="">
    	<?php
    	if($_GET[num])
    		echo $_GET[num];
    	    echo'
    		<input type="text" name="nom">
    		<input type="text" name="prenom">
    		<input type="text" name="adresse">
    		<input type="submit" value="update">';
     
    	    $link=mysql_connect("localhost","root");
    	    mysql_select_db("GestionClients",$link);
    		$query="update client set num=$nom, prenom=$prenom, adresse=$adresse where id=$_GET[num]";
    		mysql_query($query);
    		echo $query;
    		?>
    	</form>
    ca semble bien correct mais il y a certainement quelques choses qui marche pas quelque part!!!!!!!!!!!!!!!!
    merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    en fait, j'avais un petit probeme avec ma requete SQL, voila je que je l'ai corrigé mais encore rien ne se produit::::::
    $query= "update client set nom='$nom',nom='$prenom',nom='$adresse'where id=$_GET[num]";

  3. #3
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    j'ai fais quelques modifications et le résultat était surprenant, la requête s'exécute mais toutes les variables qui sont transmises à la base de données sont nulles!!!! ceci même si je vois bien les variables sur mon url!!!!
    voici mon code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <form action="modifier.php">
    			<?php
    				$link = mysql_connect("localhost","root");
    				mysql_select_db("GestionClients",$link)or die(mysql_error());
    				$query = "select * from Client";
    				$result = mysql_query($query, $link)or die($query . " - " . mysql_error());
    				$nbreResultats = mysql_num_rows($result);
    				echo "nombre d'enregistrement: ". $nbreResultats;
    				echo "</br>";
     
    				while ($test=mysql_fetch_row($result)) {
    					list($id, $nom, $prenom, $adresse)=$test;
    					echo $nom.' '.$prenom.' '.$adresse;
    					echo "<a href='modifier.php?num=$id'>modifier</a>";
    					echo '<br>';
    				}
    			?>
    		</form>
    voici mon formulaire a remplir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <form action="">
    	<?php
    	if($_GET[num])
    		echo $_GET[num];
    	    echo'
    		<input type="text" name="nom">
    		<input type="text" name="prenom">
    		<input type="text" name="adresse">
    		<input type="submit" value="update">';
     
    	    $link=mysql_connect("localhost","root");
    	    mysql_select_db("GestionClients",$link)or die(mysql_error());
    	    $query= "update client set nom=$nom,prenom=$prenom,adresse=$adressewhere id=$_GET[num]"or die($query .' '. mysql_error());
    		mysql_query($query);
    		echo $query;
    		?>							
    	</form>

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 50
    Par défaut
    Salut,
    Ca ne fera probablement pas avancer les choses, mais je ne crois pas que tu puisses mettre ton $_GET[num] directement dans la chaine il vaudrait mieux le sortir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "update client set nom = $nom, prenom = $prenom, adresse = $adresse where id=".$_GET['num'];

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est normal : tu utilises $nom, $prenom sans jamais les avoir définis nul part.
    de plus il faut re-passer ta valeur num a travers le deuxieme formulaire.

    et le die il faut le mettre sur l'execution de la requete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    	<?php
            echo '<form method="post" action="" />
    		<input type="text" name="nom" />
    		<input type="text" name="prenom" />
    		<input type="text" name="adresse" />
    		<input type="submit" value="update" />
                    <input type="hidden" value="' . intval($_GET['num']) . '" />
                  </form>';
     
    // on vérifie que le formulaire a été soumis
    if(strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
    // on protege les champs et on verifie qu'ils sont remplis
      $nom = trim(mysql_real_escape_string($_POST['nom']);
      $prenom = trim(mysql_real_escape_string($_POST['prenom']));
      $adresse = trim(mysql_real_escape_string($_POST['adresse']));
      $num = intval($_POST['num']);
        if ($nom && $prenom && $adresse) {
    	    $link=mysql_connect("localhost","root");
    	    mysql_select_db("GestionClients",$link)or die(mysql_error());
                $query = 'UPDATE client SET nom="' . $nom . '", prenom="' . $prenom . '", adresse="' . $adresse . '" WHERE id=' . $num
    	  	mysql_query($query)   or die($query .' '. mysql_error());
    		?>							
    	</form>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut!

    Bon analysons la page de ton formulaire....

    Sachant que le PHP est un langage interpreté, ce dernier va parcourir ta page de haut en bas

    Donc si je parcours ta page comme un interpréteur PHP, voici ce que ça donne....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <form action="">
    <?php
    if($_GET[num])
    echo $_GET[num]; //je vais afficher la valeur du paramètre num passé via l'url
    echo' 
    <input type="text" name="nom">
    <input type="text" name="prenom">
    <input type="text" name="adresse">
    <input type="submit" value="update">'; //j'affiche le formulaire sans valeur
    
    $link=mysql_connect("localhost","root"); // je me connecte à la base de donnéemysql_select_db("GestionClients",$link)or die(mysql_error()); // je sélectionne la base de données
    $query= "update client set nom=$nom,prenom=$prenom,adresse=$adressewhere id=$_GET[num]"or die($query .' '. mysql_error()); // initialisation de la string avec le query à executer. l'update aura les valeur des champs du formulaire à savoir des valeurs vides. 
    De plus ton "or die()" est mal placé tu devrais le mettre au niveau de mysql_query
    mysql_query($query); //Execuction du query
    echo $query; //affichage du query
    ?> 
    </form>

  7. #7
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    ce que vous dites semble bien logique mais comment contourner les choses???
    je ne peux pas passer ma requete avant de remplir les champs
    en ce qui concerne ta remarque sabotage, les variables $nom, $prenom et $adresse sans deja dans me formulaire, ce sont aussi les "name" de mes controles. de plus une fois je fais $ je les apercoient toutes dans ma bibliotheque
    alors comment les definir??
    alors qu est ce que vous proposer pour regler tout cela???

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    les variables $nom, $prenom et $adresse sans deja dans me formulaire
    Ce n'est pas parce qu'on a un champ HTML "toto" que $toto existe dans PHP (enfin depuis la fin du register global)
    c'est la qu'arrivent les $_POST, $_GEt, $_REQUEST.

    alors qu est ce que vous proposer pour regler tout cela???
    de regarder ma correction et de voir si ca marche
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    et bien parcque je suis un bon élève a toi sabotage, j ai essayé ta solution,
    mais il m'afficher deux erreur pour la fonction mysql_real_escape_string pour toutes les variables a lesquelles on l'applique, voila les deux erreurs:
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\MyWebSites\GestionClients\modifier.php on line 15

    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\xampp\htdocs\MyWebSites\GestionClients\modifier.php on line 15
    alors tu as encore une solution pour ceci sachant que je mets aucun mot de passe pour ma base

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ah oui pardon il faut faire la connexion avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $link=mysql_connect("localhost","root");mysql_select_db("GestionClients",$link)or die(mysql_error());
    $nom = trim(mysql_real_escape_string($_POST['nom']);
      $prenom = trim(mysql_real_escape_string($_POST['prenom']));
      $adresse = trim(mysql_real_escape_string($_POST['adresse']));
      $num = intval($_POST['num']);
        if ($nom && $prenom && $adresse) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    CHAPEAU Sabotage, ta solution a marché après une petite modification dans l'écriture de la requête qui na pas marché du premier coup,
    mais il reste juste un petit problème avec l'id, quand je donne moi même un nombre dans la requête ça s'exécute mais une fois je passe l'id que j'ai dans la page ça prend la valeur nulle après un petit test, alors il doit y avoir un problème avec le champ hidden
    alors merci de bien revoir le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php echo'
    	    <form action=""method="POST">
    			<input type="text" name="nom">
    			<input type="text" name="prenom">
    			<input type="text" name="adresse">
    			<input type="submit" value="update">
    			<input type="hidden" value="'.intval($_GET['num']).'">';
            
    	    if(strtolower($_SERVER['REQUEST_METHOD'])=='post'){
    	    	$link=mysql_connect("localhost","root");
    	    	mysql_select_db("GestionClients",$link)or die(mysql_error());
    	    	$nom = trim(mysql_real_escape_string($_POST['nom']));
    	    	$prenom=trim(mysql_real_escape_string($_POST['prenom']));
    	    	$adresse=trim(mysql_real_escape_string($_POST['adresse']));
    	    	$id=intval($_POST['num']);
    	    	echo $id;//ici on le navigateur m'affiche 0
    	    	if ($nom&&$prenom&&$adresse) {
    	    		$link=mysql_connect("localhost","root");
    			    mysql_select_db("GestionClients",$link)or die(mysql_error());
    			    $query="update client set nom='$nom',prenom='$prenom',adresse='$adresse'where id =22";//ce petit test marche bien avc cet id figé
    mais une fois je la remlace avec :
    $query="update client set nom='$nom',prenom='$prenom',adresse='$adresse'where id =$id";
    alors ca march plus
    
    			    mysql_query($query)or die($query.' '.mysql_error());
    				echo $query;
    	    	}
    	    }echo '</form>';
    		?>

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca serait en effet bien de verifier que num a une valeur dans les deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strtolower($_SERVER['REQUEST_METHOD'])=='post' && $_POST['num']){
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ($_REQUEST['num']) {
    echo'
    <form action="" method="post">
    <input type="text" name="nom">
    <input type="text" name="prenom">
    <input type="text" name="adresse">
    <input type="submit" value="update">
    <input type="hidden" value="'.intval($_GET['num']).'">';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    bon voila ca marche enfin mais en utilisant la variable $_POST['num'] et non le $id qui donne toujours la valeur nulle, alors je crois qu'il y on a un promleme avec l'une de ces deux lignes
    <input type="hidden" value="'.intval($_GET['num']).'">';
    ou bien ici
    $id=intval($_POST['num']);
    alors qu'est ce que tu en dit sabotage, c'est vrai que le truc marche sans meme passer par le type d'input, meme j'aimerai bien l'utiliser
    en tout cas, merci encore pour ton soutien

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Que vaut $_POST['num'] ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    merci sabotage maintenant tout est reglé
    dis moi tu ecris pas des tutoriaux, sinon tu peux penser a faire un ou tu peux rassembler toutes les solutions que tu presentes ici, ca sera tres important puisque ca sera tres pratique,
    de ma part, je vais ressembler toutes les solutions que j'ai pu faire et les publier ici dans le forum pour les prochains debutants,
    encore une question, est-ce qu'avec le php on peut pas faire des choses du genre de master page comme en asp.net.Sinon y a t il pas une solution pour eviter de repeter certain code html definissant le cadre de la page chaque fois.
    merci encore pour ton aide durant toute cette semaine

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne sais pas ce que c'est une "master page" en ASP.

    Sinon pour ne pas repeter le code HTML tu peux faire des include()

    Tu peux le faire dans un sens ou dans l'autre ; je m'eplique :

    tu peux avoir une page unique qui contient la structure HTML de ta page et tu "include" les autres fichiers php en fonction de paramètres.

    tu peux aussi avoir des un fichier a part le code HTML recurrent (ie : les entetes de page) et l'inclure la ou tu en besoins.

    tu peux aussi te passer d'include et avoir un fichier qui contient tout le code directement.

    Attention sur l'utilisation d'include ! il ne faut laisser aucune possibilité a l'utilisateur de pouvoir inclure un fichier non prévu !
    Renseigne toi bien sur la sécurité dans l'utilisation des fonctions d'inclusion.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre averti
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    en fait, la master page en ASP.NET presente tous ce qui est statique dans votre projet(le header, le menu, le pieds...).
    alors, si on veut le faire on php, d'apres ce que j'ai comprisc ca sera une page html que je vais appelé dans toutes les autres pages
    Alors, est ce que vous n'avez pas une sorte de solution un peu magique pour faire une page mère en html avec un bon menu, header et des beaux couleurs...
    En fait, meme en asp ou on ne fait que glisser les composants, j'ai jamais reussi
    a faire une page assez belle qu'on rencontre sur le net!!!!le design, je suis pas vraiment douéé

Discussions similaires

  1. [Hibernate2] Vider une table sous MySQL avec Hibernate
    Par seanbean dans le forum Hibernate
    Réponses: 8
    Dernier message: 07/02/2012, 14h05
  2. creation d'une table sous mysql
    Par DJERDJAR YACINE dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 01/07/2007, 00h20
  3. Comment créer une BD et une table sous MySQL.
    Par User dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 12/03/2007, 16h16
  4. [Mysql] Dump d'une table sous un nom différent
    Par devoo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/09/2006, 16h58
  5. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo