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 :

Mise à jour dynamique base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Mise à jour dynamique base de données
    Bonjour à tous,

    Je développe un script d'administration de base de données, qui permette de mettre à jour cette dernière, quelle que soit la base et les tables qu'elle contient.
    Le script se charge de récupérer chaque table avec ses champs et ses valeurs.
    C'est pour la partie modification d'un enregistrement que j'ai du mal... Comme je ne connais pas à l'avance le nombre de champs, les champs eux-mêmes et les valeurs stockées, je ne peux pas mettre une requête MySQL de mise à jour "en dur" (style UPDATE nomDeLaTable SET nom="toto" WHERE prenom="titi").
    Récupérer le nom de la table et ce qu'il faut mettre dans la clause WHERE, ça va... mais pour ce qui suit SET en revanche...
    Déjà, je mets le code qui me permet de reconstituer chaque 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
    50
     
    //récupération des noms des tables à mettre à jour
    $query = mysql_list_tables(MYDB);
    //ensuite, un formulaire où on choisit la table à mettre à jour
    //puis on arrive sur la page d'administration de la table
    $table = $_GET['table'];
     
    //on liste tout ce qu'il y a dans la table sélectionnée précédemment
    $req = mysql_query("SELECT * FROM $table") or die(mysql_error());
     
    $nbcol = mysql_num_fields($req);
     
    $nbligne = mysql_num_rows($req);
     
    echo '<table border="1">';
     
    for($i=0;$i<$nbcol;$i++)
    {
       echo '<th>'.mysql_field_name($req,$i).'</th>';
    }
    echo '</tr>';
     
    for($i=0;$i<$nbligne;$i++)
    {
    	$ligne = mysql_fetch_row($req);
     
            echo '<tr><form method="GET" action="maj.php">';
     
           for($j=0;$j<$nbcol;$j++)
    	{
    		echo '<td><input type="text" name="ligne" value="'.$ligne[$j].'" />';
     
    	}
     
    	//on récupère le nom de la table
    	//et des champs cachés pour traiter les données ensuite
     
    	//on a besoin du nom de la table
    	echo '<input type="hidden" value="'.$table.'" name="table" />';
     
    	//il faut aussi l'ID de la ligne à changer
    	echo '<input type="hidden" value="'.$ligne[0].'" name="id" />';
     
    	echo '<input type="hidden" value="'.$ligne.'" name="ligne" />'';
     
    	echo '<td><input type="submit" name="modifier" value="Modifier" /></td>';
    	echo '<td><input type="submit" name="supprimer" value="Supprimer" /></td>';
    	echo '</form></tr>';
     
    	}
    Dans la fonction de modification d'une ligne de la table, c'est la variable $ligne que j'aimerais récupérer et parser pour obtenir chaque valeur à modifier... j'ai essayé une boucle for, mais elle me retourne le dernier enregistrement de chaque ligne ou affiche 'Array' !
    Je ne comprends pas pourquoi ça met ça, étant donné que dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for($j=0;$j<$nbcol;$j++)
    	{
    		echo '<td><input type="text" name="ligne" value="'.$ligne[$j].'" />';
     
    	}
    ça fonctionne...
    Donc étant totalement paumée, je me tourne vers vos conseils... Comment récupérer la ligne où est apportée une modification et ensuite envoyer une requête MySQL permettant d'enregistrer cette modif' ?
    Merci d'avance !!!
    (J'ai mis un schéma en pièce jointe pour que vous puissiez comprendre mon charabia).
    Images attachées Images attachées  

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Solution
    Bon, après pas mal d'heures passées sur le problème (et une correction de l'algo de départ ^^), j'ai fini par trouver :
    1 - j'avais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($j=0;$j<$nbcol;$j++)
    {
    	echo '<input type="text" name="ligne" value="'.$ligne[$j].'" />';										
    }
    pour récupérer les valeurs dans un tableau... grossière erreur, ça ne pouvait pas marcher ; il fallait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for($j=0;$j<$nbcol;$j++)
    {
            echo '<input type="text" name="ligne[]" value="'.$ligne[$j].'" />';
     
    }
    juste une histoire de crochets !

    2 - et pour récupérer les variables et leurs valeurs, quel que soit leur nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $insertion = "INSERT INTO $table VALUES(";
     
    for($j=0;$j<$nbcol;$j++)
    {
           $insert = $_GET['ligne'][$j];
    	$insertion .= "'".mysql_real_escape_string($insert)."',";
     
    }
     
    $insertion = substr($insertion,0,-1);
    $insertion .= ");";
    Voilà... pour ceux que ça intéresse !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cours pt-05]Moteur de mise à jour de base de données
    Par Papy Turbo dans le forum Sondages et Débats
    Réponses: 38
    Dernier message: 29/10/2007, 19h02
  2. Mise à jour structure base de données
    Par engi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/10/2007, 17h11
  3. Mise à Jour Champ Base de Donnée
    Par arjo54 dans le forum IHM
    Réponses: 0
    Dernier message: 10/10/2007, 15h38
  4. Requête de mise à jour - Ouverture base de données
    Par ade94 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/05/2007, 16h50
  5. Problème de mise à jour de base de données
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 11h38

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