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

Langage PHP Discussion :

Modifier des enregistrements affichés dans un tableau HTML


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut Modifier des enregistrements affichés dans un tableau HTML
    Bonjour,

    Dans le cadre de mon application, je dois mettre en place des formulaires de modification sur certaines tables.

    Pour cela, j'ai prévu de donner la possibilité de modifier plusieurs lignes à la fois, donc d'extraire un certain nombre de lignes dans un <table> et à l'aide de bouton radio par exemple , modifier ou supprimer les lignes cochées.

    Je sais extraire et afficher mais j'ai des problèmes pour modifier plusieurs lignes à la fois c'est à dire les identifier dans le tableau HTML.

    Merci de vos solutions et pistes pour réaliser ce procédé ?

    Cordialement

  2. #2
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Bonjour madina,

    Si tu fais avec des boutons radio, dans ta page de traitement ( une fois que tu as envoyé ton formulaire donc ) tu récupères les $_POST['id_bouton_radio'] qui ne sont pas vides, et tu auras tes lignes à modifier.
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    Merci FirePrawn,

    En fait mon problème c'est surtout comment parcourir le tableau pour récupérer la valeur de chaque champ dans chaque ligne.

    Cordialement

  4. #4
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Il n'y a aucun parcours à faire.
    Sur ton bouton radio, bouton, peu importe, tu mets comme valeur la valeur de ta cellule, et tu auras donc directement la valeur que tu cherches avec $_POST['nom_bouton']
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    sur le principe voici comment je ferais
    suffit de modifier la boucle for
    $i sera l'id de l'élément dans la base
    le résultat des checkbox correspond aux ids (index ici)
    on recupere les champs avec comme nom "<name>$i"

    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
    Array
    (
        [index] => Array
            (
                [0] => 0
                [1] => 1
            )
     
        [name0] => un
        [desc0] => 
        [name1] => deux
        [desc1] => 
        [name2] => trois
        [desc2] => 
        [name3] => quatre
        [desc3] => 
        [name4] => cinq
        [desc4] => 
    )
    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
    <?php
    /**
     * @filesource champs.php
     * @version 1.0
     * Date 28 juil. 2011
     */
     
    include_once 'template.php';
     
    $out = new template('index.tpl');
    $out->addVar('title', 'Essai champ');
     
    $table = '<table>';
    $table.= '<tr>';
    $table.= '<td></td>';
    $table.= '<td>Nom</td>';
    $table.= '<td>Description</td>';
    $table.= '</tr>';
     
    for($i=0;$i<5;$i++){
    	$table.= '<tr>';
    	$table.= '<td><input type="checkbox" name="index[]" value="'.$i.'"></td>';
    	$table.= '<td><input type="text" name="name'.$i.'"></td>';
    	$table.= '<td><input type="text" name="desc'.$i.'"></td>';
    	$table.= '</tr>';
    }
     
    $table.= '/<table>';
     
    $out->addVar('body', $table);
     
    $out->compile();
    $out->display();
     
    $out->debug($_POST);
    index.tpl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>{$title}</title>
    </head>
    <body>
    <form action="" method="POST">
    {$body}
    <input type="submit" value="Envoyer">
    </form>
    </body>
    </html>
    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
    <?php
    /**
     * @filesource template.php
     * @version 1.0
     * Date 28 juil. 2011
     */
     
    class template {
    	const PATTERN='({[$]([^}]*)})';
     
    	protected $vars = null;
     
    	protected $template = null;
     
    	protected $content = null;
     
    	protected $matches = null;
     
    	/**
    	 * Construteur
    	 * @param unknown_type $template
    	 */
    	public function __construct($template){
    		$this->vars = array();
    		$this->template = $template;
    	}
     
    	/**
    	 * Ajoute une variable
    	 * @param string $name
    	 * @param string $value
    	 */
    	public function addVar($name, $value){
    		$this->vars[$name] = $value;
    	}
     
    	/**
    	 * Compilation
    	 */
    	public function compile(){
    		$content = $this->readFile($this->template);
    		$this->searchVars($content);
    		foreach ($this->matches[1] as $match){
    			$search[] = '({[$]'.$match.'})';
    			$replace[] = $this->vars[$match];
    		}
    		$content = preg_replace($search, $replace, $content);
    		$this->content = $content;
    	}
     
    	/**
    	 * recherche les variables du template
    	 */
    	protected function searchVars($content){
    		preg_match_all(self::PATTERN,$content,$this->matches);
    	}
     
    	/**
    	 * Affiche le contenu
    	 */
    	public function display(){
    		echo $this->content;
    	}
     
    	/**
    	 * Lit un fichier
    	 * @param string $filename
    	 * @return string
    	 */
    	protected function readFile($filename){
    		return file_get_contents($filename);
    	}
     
    	public function debug($var){
    		echo '<pre>'.print_r($var,true).'<pre>';
    	}
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je pense que Medina a surtout besoin de connaitre la METHODOLOGIE.

    A- FORMULAIRE
    1/ tu as un formulaire contenant le tableau complet
    2/ Tu affiches ton tableau (table) ligne par ligne. (ca, tu sais faire)
    3/ sur chaque ligne, tu affiches :
    - SOIT (toutes les lignes contiennent deja des input) :
    (ligne-i) | inputi-a | inputi-b | inputi-c | ... | laboxi
    - SOIT (on affiche d'abord les données, puis en cochant checkboxi, on change les data en input -> ca, ca peut se faire en javascript) :
    (ligne-i) | datai-a | datai-b | datai-c | ... | laboxi
    (ligne-i) | inputi-a | inputi-b | inputi-c | ... | laboxi (seules les lignes cochées contiennent des input)
    4/ un bouton submit tout à la fin du formulaire
    B- TRAITEMENT
    1/ on recupere les données
    2/ pour chaque ligne dont la checkbox est cochée : on traite la ligne (modification - enregistrement)

    la question est : "comment identifier chaque ligne, pour pouvoir en modifier les données ?

    Maintenant que la METHODOLOGIE a été définie, passons à la PROGRAMMATION :
    L'astuce est d'utiliser des array dans le "name" : name="data1[]" name="data2[]" ..., name="checkbox[]"
    On récupère alors des array : $_POST['data1'], $_POST['data2'], ..., $_POST['checkbox'] (chaque $_POST['xxx'] est un array)
    On peut alors parcourir ces array, et pour chaque $i où $_POST['labox'][$i] est coché :
    on modifie les données $_POST['data1'][$i], $_POST['data2'][$i], ...

    Si les données viennent d'une BdD (ce que je suppose), on peut aussi supposé que chaque enregistrement a un ID (auto-increment)
    sur chaque ligne du tableau, on peut mettre cet ID dans un <input type="hidden" name="ID[]" value="<?php echo $row['ID']; ?>" />
    => la modification se fera alors sur l'enregistrement dont l'ID est : ID='$_POST['ID'][$i]'

    Dans le principe :
    A- FORMULAIRE
    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
    <!-- FORMULAIRE -->
    <form method="post" action="xxxxxxxxxx.php">
    <table>
    <?php // requete en BdD pour recuperer les donnees a afficher
    $query 		= "SELECT * FROM latable;";
    $result 	= mysql_query($query) or die('Erreur SQL :<br />'.$query.'<br />'.mysql_error());
    while ($row = mysql_fetch_array($result))
    {
    	// pour chaque ligne :
    ?>
    	<tr>
    		<td><input type="text" name="data1[]" value="<?php echo $row['data1']; ?>" /></td>
    		<td><input type="text" name="data2[]" value="<?php echo $row['data2']; ?>" /></td>
    		<td><input type="text" name="data3[]" value="<?php echo $row['data3']; ?>" /></td>
    		<!-- [......] -->
    		<td>
    			<input type="hidden" name="ID[]" value="<?php echo $row['ID']; ?>" />
    			<input type="checkbox" name="labox[]" value="ON" />
    		</td>
    	</tr>
    <?php
    } // fin while
    ?>
    	<tr>
    		<td colspan="[nombre-de-colonnes]"><input type="submit" name="envoiform" value="Modifier les données" /></td>
    	</tr>
    </table>
    </form>
    B- TRAITEMENT
    - on récupère d'abord l'array des checkbox,
    - on ne traite que les lignes où la checkbox a été cochée.
    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
    <?php // TRAITEMENT
    if(isset($_POST['envoiform'])  // (si le formulaire a été envoyé)
    {
    	// recuperation des checkbox (array !)
    	$array_box = $_POST['labox'];
    	// on parcours l'array
    	foreach($array_box as $key => $val) {
    		if($val == 'ON') { // LA CASE EST COCHEE -> on traite les donnees
    			// on recupere les donnees (de la ligne correspondante)
    			$ID = $_POST['ID'][$key];
    			$data1 = $_POST['data1'][$key];
    			$data2 = $_POST['data2'][$key];
    			$data3 = $_POST['data3'][$key];
    			// on protège la BdD contre les injections SQL
    			$ID = mysql_real_escape_string($ID);
    			$data1 = mysql_real_escape_string($data1);
    			$data2 = mysql_real_escape_string($data2);
    			$data3 = mysql_real_escape_string($data3);
    			// on modifie l'enregistrement en BdD
    			$query_update 		= "UPDATE latable SET ".
    						" data1 	= '".$data1."', ".
    						" data2 	= '".$data2."', ".
    						" data3 	= '".$data3."', ".
    						// [...]
    						" dataxxx 	= '".$dataxxx."' ".
    						" WHERE ID 	= '".$ID."';";
    			mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    		}
    	}
    	unset($_POST);
    }
    Dernière modification par Invité ; 01/08/2011 à 02h59.

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

Discussions similaires

  1. [MySQL] Affichage par php des données mysql dans un tableau html
    Par JDP91 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/05/2015, 09h10
  2. Réponses: 3
    Dernier message: 19/05/2014, 08h24
  3. Réponses: 2
    Dernier message: 12/04/2014, 21h45
  4. [HTML] afficher des courbes dans un tableau html ?
    Par MAJIK_ENIS dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/05/2006, 15h19
  5. [MySQL] Afficher mes données dans un tableau HTML
    Par lassmust dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 02/03/2006, 11h43

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