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] Supprimer 1 élément particulier d'1 tableau


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut [Tableaux] Supprimer 1 élément particulier d'1 tableau
    bonjour, je voudrais supprimer un element particulier d'un tableau.
    je suis allé dans la faq php, mais le "unset" n'enleve pas l'élément que je voudrais enlever. merci pour votre aide.
    (voici la page de la faq que j'ai consulté: http://php.developpez.com/faq/?page=...b_supprelement)

    voici mon 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
    <?
    session_start();
     
    $str= $_SESSION["tpl_panier"];
    $tab=explode(" ",$str);
     
    $compteur=count($tab);
     
    echo "<table>";
     
    for ($i=2;$i<$compteur;$i++)
        {   mysql_connect("localhost","root","") or die (mysql_error());
            mysql_select_db("test_gesstock") or die (mysql_error());
            $req="select DESIGNATION from produits_fournit_bureau where id=$tab[$i]";
     
            $sql=mysql_query($req);
            $result=mysql_fetch_row($sql);
     
     
            $j=$i-1;
     
                echo "<br>article ".$j.": ".$tab[$i]." ".$result[0]." ";
                echo "<a href=?enlever_art=".$tab[$i]."> retirer cet article</a>";
     
     
        }
    echo $_GET['enlever_art'];
     
    for ($i=2;$i<$compteur;$i++)
    echo $tab[$i];
        {
        if ($_GET['enlever_art']==$tab[$i])
            {
            unset($tab[$i]);
            }
    }
     
    ?>

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    for ($i=2;$i<$compteur;$i++)
    echo $tab[$i];
    {
    if ($_GET['enlever_art']==$tab[$i])
    {
    unset($tab[$i]);
    }
    }
    le unset fonctionne tres bien pour les elements d'un tableau... a condition evidemment de passer dans la boucle ;o)

    Là ton for ne fait qu'un echo a chaque tour de boucle...

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    petite parenthese :

    c'est entre autre pour ca que je prefere la syntaxe :

    for (...) {
    ...
    }

    if (...) {
    ...
    }

    ca evite ce genre de problemes ;o)

  4. #4
    Invité
    Invité(e)
    Par défaut
    perso je ne suis pas fan des codes raccourci , je prefere tjs mettre des accolade et edentté mon code pour plus de clarté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for ($i=2;$i<$compteur;$i++)
    {
           echo $tab[$i];
           if ($_GET['enlever_art']==$tab[$i])
          {
               unset($tab[$i]);
          }
     }

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    La vraie question est : pourquoi as-tu besoin d'unset() ?

  6. #6
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    parceque je fais un systeme de caddy (ou panier d'achat) et je voudrais pouvoir suprimer l'un des articles insérés.

  7. #7
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    j'ai modifié mon script en mettant l'accolade avant le echo, mais ca ne change pas le fait que mon unset ne marche pas. merci pour l'aide.

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    mon unset ne marche pas
    c'est pas tres precis...

    avant le for, ecrit :

    echo "<pre>"; var_dump($ton_tableau); echo "</pre><br>";

    et ecrit la meme chose apres le for.

    Si tu as exactement la meme chose, c'est qu'il ne passe jamais dans le if, donc ta condition est mauvaise. Sinon, il passe dans le if est fait le unset (et tu en as la preuve)

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par harlock59
    le panier n'est pas dans une variable locale, elle est dans une
    variable de session $_SESSION["tpl_panier"].
    ben faut faire du unset($_SESSION....) sur l'item qui va bien alors...

  10. #10
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    oui, mais j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str= $_SESSION["tpl_panier"];
    $tab=explode(" ",$str);
    et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ($i=2;$i<$compteur;$i++)
    {
        echo $tab[$i];
        if ($_GET['enlever_art']==$tab[$i])
            {
            unset($tab[$i]);
            }
    }

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par harlock59
    ça affiche ça:
    NULL

    25NULL
    rassure moi... t'as bien mis $tab et pas $ton_tableau dans le var_dump ???
    a mon avis non...

    bon...
    ...
    ...
    apres ton for...

    $tab=array_values($tab);

    et ajoute les fonctions inverses de ce que tu as fait au debut...

  12. #12
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    ça donne:
    array(4) {
    [0]=>
    string(0) ""
    [1]=>
    string(0) ""
    [2]=>
    string(1) "2"
    [3]=>
    string(1) "5"
    }

    25array(3) {
    [0]=>
    string(0) ""
    [1]=>
    string(0) ""
    [2]=>
    string(1) "2"
    }

  13. #13
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    la fonction inverse, ce serait l'inverse du explode ?

  14. #14
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Comme tu le voit grace aux var_dump, une case a bien été supprimée de ton tableau.

    Maintenant, oui, il te faut faire la fonction inverse du explode, puis ecraser l'ancienne valeur dans $_SESSION pour la remplacer par la nouvelle valeur.

  15. #15
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    ok, merci.

  16. #16
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    maintenant, je suis obligé de cliquer 2 fois sur "retirer cet article" pour qu'il soit retiré.
    voici mon 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
     
    session_start();
     
     
    $str= $_SESSION["tpl_panier"];
     
    $tab=explode(" ",$str);
     
     
    $compteur=count($tab);
     
    echo "<table>";
    if ($_SESSION["tpl_panier"]!="")
    {
    for ($i=1;$i<$compteur;$i++)
        {  
            mysql_connect("localhost","root","") or die (mysql_error());
            mysql_select_db("test_gesstock") or die (mysql_error());
            $req = "select DESIGNATION from produits_fournit_bureau where id='$tab[$i]'";
            $sql = mysql_query($req) or die (mysql_error());
     
            $result = mysql_fetch_row($sql);
     
                $j=$i+1;
                echo "<br>article ".$i.": ".$tab[$i]." ".$result[0]." ";
                echo "<a href='?enlever_art=".$tab[$i]."'> retirer cet article</a>";
     
     
        }
    }
    else
     {echo "votre panier est vide";}
     
     for ($i=1;$i<$compteur;$i++)
    {
     
        if ($_GET['enlever_art']==$tab[$i])
            {
            unset($tab[$i]);
            $_SESSION["tpl_panier"]=implode (" ",$tab);
            }
    }
     
    ?>
    quelqu'un saurait il comment faire pour ne pas avoir à cliquer 2 fois pour retirer un article du paniuer ? merci.

  17. #17
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     for ($i=1;$i<$compteur;$i++)
    {
     
        if ($_GET['enlever_art']==$tab[$i])
            {
            unset($tab[$i]);
            $_SESSION["tpl_panier"]=implode (" ",$tab);
            }
    }
    Pourquoi ne pas faire qqch comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!empty($_GET['enlever_art']) and (is_numeric($_GET['enlever_art']))){
       unset($tab[ intval($_GET['enlever_art']) ]);
       $_SESSION['tpl_panier'] = implode (' ', $tab);
    }
    Remarque générale : tu peux stocker des tableaux dans ta session, ça t'éviterait de faire des implode() et explode() à tout bout de champ. Tu pourrais aussi utiliser directement tes variables de session plutôt que de passer par un tableau temporaire.

  18. #18
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    ok, je vais tester, merci.

  19. #19
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    l'article n°1 reste toujours meme en ayant cliqué sur enlever article.

  20. #20
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    plus rien ne se supprime...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/08/2009, 15h05
  2. Réponses: 4
    Dernier message: 07/05/2009, 13h50
  3. [Tableaux] supprimer un élément d'un tableau
    Par banzzai dans le forum Langage
    Réponses: 1
    Dernier message: 15/09/2006, 15h52
  4. Supprimer les éléments diagonaux d'un tableau
    Par doubs dans le forum Pascal
    Réponses: 2
    Dernier message: 04/05/2006, 22h53
  5. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40

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