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 :

Mettre à jour table MySQL avec PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Mettre à jour table MySQL avec PHP
    Bonjour tout le monde,

    J'essaie de mettre une table MYSQL nommée "etudiants" à jour.

    J'obtiens bien les valeurs de la table dans des zones de texte.

    Je peux alors modifier les valeurs mais lorsque je clic sur le bouton, la table ne se met pas à jour.

    Le nombre de ligne est bien envoyé à l'autre page (MettreAJour qui est l'action du formulaire).

    Je vous laisse mon code, ça sera je pense, un peu plus parlant :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
     
    $compteur = 0;
     
     
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    /*echo '<form action="MettreAJour.php?NbLignes='.$compteur.'" method="post" name="frmSaisie" id="frmSaisie">';
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());*/
     
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
    echo '<form action="MettreAJour.php?NbLignes='.mysql_num_rows($query).'" method="post" name="frmSaisie" id="frmSaisie">';
     
     
     
    echo '<tr>';
    for($i=0;$i<mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query,MYSQL_NUM))
        {
    	$compteur+=1;
    	echo 'compteur -->'.$compteur;
        echo '<tr>';
        foreach($row as $value)
            {
     
    	echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';
    	#echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="text" id="txtMatricule"'.$compteur.'value="'.mysql_field_name.$compteur.'"></td>';
         #   }
     
     
    }
    echo '</tr>';
        }
    echo '<input type="submit" name="Submit" value="Mettre la table à jour" />' ; 
     
    echo '</p></form>';
    	echo '</table>';
     
    ?>
    et voic le code de "MettreAJour.php" qui contient le code SQL qui devrait mettre à jour la table :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    <?php
     
     
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
    $compteur = 0;
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    $NbLignes = $_GET["NbLignes"];
     
    echo '&NbLignes vaut '.$NbLignes;
     
    for ($i = 0; $i < $NbLignes;$i++)
    { 
         $Matricule = $_REQUEST["txtMatricule".i];
    	 $Nom = $_REQUEST["txtNom".i];
    	 $Prenom = $_REQUEST["txtPrenom".i];
    	 $DateDeNaissance = $_REQUEST["txtDateDeNaissance".i];
    	 $Email = $_REQUEST["txtEmail".i];
    	 $Photo = $_REQUEST["txtPhoto".i];
     
     
     
    $txtSQL = "" ;
    $txtSQL = "update [etudiants] set [Nom_Et] = '".$Nom ."' where  [Matricule_Et] = '".$Matricule."'" ;
     
     
     
    }
     
     
    ?>
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut
    sans trop regarder le code en profondeur, j'aurais pas mis de crochets dans ta requete UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "UPDATE table SET value='".$value."' WHERE id='".$id."';

  3. #3
    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
    J'ajouterais qu'on n'insere pas dans une requete des données saisies par un utilisateur sans les avoir controlées.
    Dans le cas contraire un utilisateur malveillant, en saisissant un matricule déformé pourrait modifier tous les enregistrements de ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Matricule = mysql_real_escape_string($_REQUEST["txtMatricule".i]);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par beejeridou Voir le message
    sans trop regarder le code en profondeur, j'aurais pas mis de crochets dans ta requete UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "UPDATE table SET value='".$value."' WHERE id='".$id."';
    Salut,

    Merci pour ta réponse.

    J'ai vu qu'il fallait mettre mysql_query avant la requête, ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE 'etudiants' SET $Nom_Et='$Nom' WHERE Matricule_Et=$Matricule");
    Qu'en penses-tu ?

    ça ne fonctionne pas encore mais ça bouge à grand pas.

    Merci encore pour l'aide.

    beegees

    Citation Envoyé par sabotage Voir le message
    J'ajouterais qu'on n'insere pas dans une requete des données saisies par un utilisateur sans les avoir controlées.
    Dans le cas contraire un utilisateur malveillant, en saisissant un matricule déformé pourrait modifier tous les enregistrements de ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Matricule = mysql_real_escape_string($_REQUEST["txtMatricule".i]);
    Salut,

    Merci pour ta réponse hyper intéressante.

    Ce que tu me proposes, c'est l'étape 2 dans mon algorithme, ce sont des améliorations que j'apporterai plus tard mais je ne connaissais pas cette fonction, merci.

    beegees

    Message pour vous deux (et pour les autres) :

    Je pense que le problème vient en fait d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $Matricule = $_REQUEST["txtMatricule".i];
    Pour éviter de devoir changer le code lors d'un ajout d'une table, j'ai essayé de rendre le plus générique possible mon code en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';
    txtMatriucle n'existe donc pas.

    Je l'ai donc remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Matricule = $_REQUEST[mysql_field_name.i];
    Je ne sais pas si cela est permis.

    idem dans la chaine SQL update.

    Est-il possible vue que mysql_field_name se trouve dans une autre page que la chaine SQL l'utilise ?

    beegees

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Matricule = $_REQUEST[mysql_field_name.i];
    c'est quoi ce "i" que se ballade ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Matricule = $_REQUEST[mysql_field_name.i];
    c'est quoi ce "i" que se ballade ?
    Re,

    Merci pour ta réponse.

    ça ne fonctionne toujours pas

    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
    for ($i = 0; $i < $NbLignes;$i++)
    { 
    	 $Matricule = $_REQUEST[mysql_field_name.i];
    	 $Nom = $_REQUEST[mysql_field_name.i];
    	 $Prenom = $_REQUEST[mysql_field_name.i];
    	 $DateDeNaissance = $_REQUEST[mysql_field_name.i];
    	 $Email = $_REQUEST[mysql_field_name.i];
    	 $Photo = $_REQUEST[mysql_field_name.i];
     
     
     
    $txtSQL = "" ;
    $txtSQL = "update etudiants set mysql_field_name = '".$Nom ."' where  Matricule_Et = '".$Matricule."'" ;
     
     
    }
    Le i est là pour savoir quelle ligne je dois mettre à jour.

    Encore

  7. #7
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut
    Au lieu de galerer à écrire le compteur sur place, je le mettrai avant moi, je m'explique:
    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
    30
    31
     
    //ton code:
    <input type="text" id="txtMatricule'.$compteur.' name="txtMatricule'.$compteur."/>
     
    <?php
    //ma proposition de génération d'identifiants
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <?php
    for($i=1; $i<10; $i++) {
        //le echo sert pour les tests
        echo $initialise = "txtMatricule".$i;
        ?>
        <input type="text" name="<?php echo $initialise; ?>" value="<?php echo $initialise; ?>" /><br />
        <?php
    }
    ?>
    	<input type="submit" value="envoyer" />
    </form>
    <?php
    // et pour récupérer la valeur de tes champs
    for($i=1; $i<10; $i++) {
    	$recupere = "txtMatricule".$i;
    	if(isset($_POST[$recupere]) && $_POST[$recupere] != "") {
    	    echo $_POST[$recupere]."<br />";
    	}
    	else {
    		echo "Le champ <b>".$recupere."</b> est vide ou n'existe pas.<br />";
    	}
    }
    ?>
    Voilà, j'ai testé, ca fonctionne, essaye ce code sur une page à part, pour etre sur. Bon, c'est juste un exemple, car ici, la boucle for n'est peut-etre pas le meilleur moyen de générer les identifiants surtout si on ne sait pas combien en générer à l'avance (si c'est dynamique).

  8. #8
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par beejeridou Voir le message
    Au lieu de galerer à écrire le compteur sur place, je le mettrai avant moi, je m'explique:
    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
    30
    31
     
    //ton code:
    <input type="text" id="txtMatricule'.$compteur.' name="txtMatricule'.$compteur."/>
     
    <?php
    //ma proposition de génération d'identifiants
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <?php
    for($i=1; $i<10; $i++) {
        //le echo sert pour les tests
        echo $initialise = "txtMatricule".$i;
        ?>
        <input type="text" name="<?php echo $initialise; ?>" value="<?php echo $initialise; ?>" /><br />
        <?php
    }
    ?>
    	<input type="submit" value="envoyer" />
    </form>
    <?php
    // et pour récupérer la valeur de tes champs
    for($i=1; $i<10; $i++) {
    	$recupere = "txtMatricule".$i;
    	if(isset($_POST[$recupere]) && $_POST[$recupere] != "") {
    	    echo $_POST[$recupere]."<br />";
    	}
    	else {
    		echo "Le champ <b>".$recupere."</b> est vide ou n'existe pas.<br />";
    	}
    }
    ?>
    Voilà, j'ai testé, ca fonctionne, essaye ce code sur une page à part, pour etre sur. Bon, c'est juste un exemple, car ici, la boucle for n'est peut-etre pas le meilleur moyen de générer les identifiants surtout si on ne sait pas combien en générer à l'avance (si c'est dynamique).
    Merci pour ta réponse.

    J'ai tenté d'intégrer ton code dans le mien :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <?php
     
    $compteur = 0;
     
     
    # script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
    # variable qui contient le nom de ma base de données.
    $dbname = 'deliberations';
     
     
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données deliberation, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) 
    	{
    	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
     
    /*echo '<form action="MettreAJour.php?NbLignes='.$compteur.'" method="post" name="frmSaisie" id="frmSaisie">';
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());*/
     
    echo '<table border="1">';
    $query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
    echo '<form action="MettreAJour.php?NbLignes='.mysql_num_rows($query).'" method="post" name="frmSaisie" id="frmSaisie">';
     
     
     
    echo '<tr>';
    for($i=0;$i<mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query,MYSQL_NUM))
        {
    	$compteur+=1;
    	echo 'compteur -->'.$compteur;
        echo '<tr>';
        foreach($row as $value)
            {
     
    <input type="text" id="txtMatricule'.$compteur.' name="txtMatricule'.$compteur."/>
    
    <?php
    //ma proposition de génération d'identifiants
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <?php
    for($i=1; $i<10; $i++) {
        //le echo sert pour les tests
        echo $initialise = "txtMatricule".$i;
        ?>
        <input type="text" name="<?php echo $initialise; ?>" value="<?php echo $initialise; ?>" /><br />
        <?php
    }
    ?>
    	<input type="submit" value="envoyer" />
    </form>
    <?php
    // et pour récupérer la valeur de tes champs
    for($i=1; $i<10; $i++) {
    	$recupere = "txtMatricule".$i;
    	if(isset($_POST[$recupere]) && $_POST[$recupere] != "") {
    	    echo $_POST[$recupere]."<br />";
    	}
    	else {
    		echo "Le champ <b>".$recupere."</b> est vide ou n'existe pas.<br />";
    	}
    }
    ?>
    	#echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="text" id="txtMatricule"'.$compteur.'value="'.mysql_field_name.$compteur.'"></td>';
         #   }
     
     
    }
    echo '</tr>';
        }
    echo '<input type="submit" name="Submit" value="Mettre la table à jour" />' ; 
     
    echo '</p></form>';
    	echo '</table>';
     
    ?>
    Saurais-tu y jeter un coup d'oeil stp ?

    Je te remercie encore.

Discussions similaires

  1. [MySQL] Créer un table Mysql avec php
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/02/2014, 14h05
  2. [MySQL] Mise à jour d'une table mysql avec php
    Par glodybiss4 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/01/2012, 10h41
  3. [XL-2007] Mettre à jour table pivot avec macro et loop
    Par stsc01 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/01/2011, 23h09
  4. Réponses: 11
    Dernier message: 11/10/2009, 05h23
  5. [MySQL] Mettre à jour une table mysql avec un fichier xml ou csv
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/02/2009, 08h56

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