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 :

[Tableaux] Effacer une ligne dans un tableau


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut [Tableaux] Effacer une ligne dans un tableau
    bonjour

    je souhaite effacer une ligne dans un tableau ci joint 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?
    session_start(); 
    $ARRAY = $_SESSION['tableau']  ;
     
    if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {
    $i = $_POST['i']; 
    array_splice($_SESSION['tableau'], $i, 1); 
    }
     
    ?>
     
    <html>
    <head>
    <title>Document sans titre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?
    $heigh=sizeof($ARRAY);            
    $width=sizeof($ARRAY[0]);  ?>       
     
    <form name="form1" method="post" action="ov2_lire_fichier_csv_tableau_2.php"> 
    <TABLE width="167" align="center">
      <? for($i=0;$i<$heigh;$i++)                 
    { ?>
      <TR> 
        <TD><? echo $i ?> <? echo $width ?></TD>
      </TR>
      <TR> 
        <?   for($j=0;$j<$width;$j++)           
        { ?>
        <TD width="122"> <input name="textfield" type="text" value=" <?  echo htmlspecialchars($ARRAY[$i][$j], ENT_QUOTES); ?>"> 
        </TD>
        <? } ?>
      </TR>
      <TR>
          <TD><p>
              <input type="submit" name="Submit" value="EFFACER">
              <input type="hidden" name="MM_insert" value="form1">
              <input type="hidden" name="i" value="<?php echo $i; ?>">
            </p>
            </TD>
      </TR>
      <? } ?>
    </TABLE>
    </form>
    </body>
    </html>
    quand je clic sur le bouton supprimer j'efface la derniere ligne et non la ligne choisie

    avez vous une idée ou j ai fais la faute ? avec la fonction array_splice a moins que vous connaisiez une autre facon de supprimer cette ligne
    merci a tous

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est parce qu'il y a plusieurs fois un input hidden pour i...

    Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="supprimer[<?php echo $i ?>]" value="EFFACER">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_POST['supprimer']) && isset($_SESSION['tableau'][$_POST['supprimer']]) {
       unset($_SESSION['tableau'][$_POST['supprimer']]);
    }
    (A condition de parcourir avec un foreach($tab as $i => $row) au lieu du classique for($i) )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Mr N.
    C'est parce qu'il y a plusieurs fois un input hidden pour i...

    Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="supprimer[<?php echo $i ?>]" value="EFFACER">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset($_POST['supprimer']) && isset($_SESSION['tableau'][$_POST['supprimer']]) {
       unset($_SESSION['tableau'][$_POST['supprimer']]);
    }
    (A condition de parcourir avec un foreach($tab as $i => $row) au lieu du classique for($i) )

    excuser mon inculture mais je n arrive pas a remplacer les for par foreach

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je recommence car c'est vrai que mon histoire de foreach n'est pas claire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="supprimer[<?php echo $i ?>]" value="EFFACER">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['supprimer'])) {
       $keys = array_keys($_POST['supprimer']);
       if (isset($keys[0]) && isset($_SESSION['tableau'][$keys[0]]) {
          array_splice($_SESSION['tableau'], $keys[0], 1);
       }
    }
    Et on oublie cette histoire de foreach

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    j ai bien fait les modif mais le resultat est surprenant et compliqué à expliquer je prefere vous donner les script et vous comprendrez l'effacement anarchique

    _fichier.csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    2.23,4,valeur a
    2.29,4,valeur b
    6.86,4,valeur c
    6.01,4,valeur d
    5.94,4,valeur e
    6.81,4,valeur f
    7.74,4,valeur g
    le fichier index.php

    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
     
     
    <html>
    <head>
    <title>Document sans titre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
     
    <body>
    <table width="80%" border="0" align="center">
      <tr> 
        <td><form name="form2" enctype="multipart/form-data" method="post" action="_script.php">
            <p align="center"> 
              <input type="file" name="fichier_u">
            </p>
            <p align="center"> 
              <input type="submit" name="Submit2" value="Envoyer">
            </p>
          </form></td>
      </tr>
    </table>
    </body>
    </html>
    le fichier _script.php

    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
     
     
    <?
    function myerror($problem) {
    echo "<script>alert('$problem');history.go(-1);</script>";
    exit();
    }
    		$fichier = $_FILES['fichier_u']['tmp_name'];
    		$pathinf = pathinfo($_FILES['fichier_u']['name']);
     
    		if(strtolower($pathinf['extension']) != 'csv' and strtolower($pathinf['extension']) != 'txt' and strtolower($pathinf['extension']) != 'asc' )
    		{
    	      @unlink($_FILES['fichier_u']['tmp_name']);
    	      // displayHeaders(ffff);
     
                  myerror("Format de fichier invalide seulement sont accepté les fichiers au format, .txt, .asc and .csv "); 
    		}
     
    function read_csv( $filename, $separateur)              // transfert le fichier dans un tableau
    {
     if ( $FILE=fopen($filename,"r") )                      // ouverture du fichier
     {
      while ($ARRAY[]=fgetcsv($FILE,1024,$separateur));     // lire ligne par ligne et coupe colonne par colonne
      fclose($FILE) ;                                       // ferme le fichier
      array_pop($ARRAY);                                    // efface la derniere ligne
      return $ARRAY ;                                       // renvoie le tableau
     }
    }
    // $nom_fichier ="fichier.csv";
    $nom_fichier = $fichier;
    $separateur = ",";
     
    $ARRAY=read_csv("$nom_fichier",$separateur);            // lit le fichier
    session_start(); 
    $_SESSION['tableau']= $ARRAY; 
     
    header("Location: _lire.php");
    ?>
    et le dernier fichier _lire.php

    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
     
     
    <?
    session_start(); 
    $ARRAY = $_SESSION['tableau']  ;
     
    if (isset($_POST['supprimer'])) {
       $keys = array_keys($_POST['supprimer']);
       if (isset($keys[0]) && isset($_SESSION['tableau'][$keys[0]])) {
          array_splice($_SESSION['tableau'], $keys[0], 1);
       }
    }
    ?>
     
    <html>
    <head>
    <title>Document sans titre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?
    $heigh=sizeof($ARRAY);            
    $width=sizeof($ARRAY[0]);  ?>       
     
    <form name="form1" method="post" action="_lire.php"> 
    <TABLE width="167" align="center">
      <? for($i=0;$i<$heigh;$i++)                 
    { ?>
      <TR> 
        <TD><? echo $i ?> <? echo $width ?></TD>
      </TR>
      <TR> 
        <?   for($j=0;$j<$width;$j++)           
        { ?>
        <TD width="122"> <input name="textfield" type="text" value=" <?  echo htmlspecialchars($ARRAY[$i][$j], ENT_QUOTES); ?>"> 
        </TD>
        <? } ?>
      </TR>
      <TR>
          <TD><p>
    <input type="submit" name="supprimer[<?php echo $i ?>]" value="EFFACER">
              <input type="hidden" name="MM_insert" value="form1">
              <input type="hidden" name="i" value="<?php echo $i; ?>">
            </p>
            </TD>
      </TR>
      <? } ?>
    </TABLE>
    </form>
    </body>
    </html>
    copier les 4 fichiers dans le meme repertoire et lancer index.php

    vous allez vous rendre compte que quand je souhaite effacer une ligne ca fait nimporte quoi (faite le test sur plusieurs lignes)

    merci pour vos observasions

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    euh... tu ne voudrais pas mettre ton exemple en ligne qu'on puisse tester... J'ai pas trop le temps de monter un environnement actuellement

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    En analysant ton code, je pense qu'il faut que tu déplaces la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ARRAY = $_SESSION['tableau']  ;
    après le traitement de suppression.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    non desolé je bosse en local

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Mr N.
    En analysant ton code, je pense qu'il faut que tu déplaces la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ARRAY = $_SESSION['tableau']  ;
    après le traitement de suppression.
    bien vu ... effectivement voila donc le code du fichier _lire.php


    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
     
    <?
    session_start(); 
     
    if (isset($_POST['supprimer'])) {
       $keys = array_keys($_POST['supprimer']);
       if (isset($keys[0]) && isset($_SESSION['tableau'][$keys[0]])) {
          array_splice($_SESSION['tableau'], $keys[0], 1);
       }
    }
     
    $ARRAY = $_SESSION['tableau']  ;
     
    ?>
     
    <html>
    <head>
    <title>Document sans titre</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?
    $heigh=sizeof($ARRAY);            
    $width=sizeof($ARRAY[0]);  ?>       
     
    <form name="form1" method="post" action="_lire.php"> 
    <TABLE width="167" align="center">
      <? for($i=0;$i<$heigh;$i++)                 
    { ?>
      <TR> 
        <TD><? echo $i ?> <? echo $width ?></TD>
      </TR>
      <TR> 
        <?   for($j=0;$j<$width;$j++)           
        { ?>
        <TD width="122"> <input name="textfield" type="text" value=" <?  echo htmlspecialchars($ARRAY[$i][$j], ENT_QUOTES); ?>"> 
        </TD>
        <? } ?>
      </TR>
      <TR>
          <TD><p>
                  <input type="submit" name="supprimer[<?php echo $i ?>]" value="EFFACER">
            </p>
            </TD>
      </TR>
      <? } ?>
    </TABLE>
    </form>
    </body>
    </html>

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

Discussions similaires

  1. [Tableaux] supprimer une ligne dans une tableau
    Par hadjiphp dans le forum Langage
    Réponses: 5
    Dernier message: 25/05/2009, 14h54
  2. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  3. probleme bizarre de hauteur auto d'une ligne dans un tableau
    Par zax-tfh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/01/2005, 23h34
  4. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43
  5. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 00h15

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