[PHP] Enlever un caractère d'une cellule

Résolu
Bonjour,
Alors voilà, j'ai un petit problème qui me perturbe pour continuer ma suite.
Tout d'abord dans ma base de donnée, j'ai une cellule "items" qui ajoute au furé à mesures des objets. C'est objets pour les identifié sont séparé avec des " | ". Je voudrais en PHP ne pas prendre le |, et ensuite séparer chaque nombre qui sont entre les |. Je vous donne un exemple pour être très clair !
1|2|6|7|8|9|

Merci d'avance, si je n'ai pas été assez précis, veuillez me demander des questions!

Cordialement Antoine



--
░░░░▒▒▒▒████ ♠ MastercroW ♠ ████▒▒▒▒░░░░

6 réponses

Résumé de la discussion

Manipulation d'une valeur 'items' dans une base de données, composée de nombres séparés par le caractère pipe, et nécessité de les extraire comme éléments numériques via PHP. La solution recommandée consiste à utiliser la fonction explode ('|', $str) pour obtenir un tableau des valeurs sans le séparateur et traiter chaque élément. Plusieurs réponses évoquent aussi des aspects pratiques comme l’exécution d’une requête SQL ou le débogage, mais l’idée clé reste celle d’explode pour la séparation. Notez que explode renvoie un tableau et peut être complété par le troisième paramètre pour limiter le nombre d’éléments retournés si nécessaire.

Bobot (l’IA à votre service)
  1. utilise la fonction explode
    http://php.net/manual/fr/function.explode.php
    1. Et sa donne quoi avec la requête suivant ?
      	$objets = $donnees['objets'];
      	$selection = mysql_query('SELECT * FROM items WHERE guid = "'.$objets.'" ');
      

      Désolé je ne connais pas du tout cette fonction x_x
      1. Avec la fonction explode soit :
        $str = ''.$objets.'';
        print_r(explode('|', $str, 2));
        

        J'obtiens un Array ( [0] => )
        1. essaye :

          $objets = $donnees['objet'];
          $objets2 = explode('|', $objets);

          foreach($objets2 as $line)
          {
          echo $line.'<br />';
          }

          ce petit code devrait afficher un nombre par ligne
          1. Bizarre sa n'affiche rien. Help me =(
          2. Rien dis, ma table était vide xD, sinon comment fait-on pour prendre les nombres qui seront sortis par ligne ? Dois-je mettre un if ?
          3. quand tu dis "prendre un nombre"

            c'est pour dire utiliser les nombres ?

            si c'est le cas
            remplace seulement "echo $line.'<br />';"
            par les instructions de ton choix dans "foreach"

            foreach est une fonction sefvant a explorer les variables sous forme de tableau
            https://www.php.net/manual/fr/control-structures.foreach.php
        2. J'ai essayer voici ce que sa donne, et sa ne marche pas =$
          <?php
          $objets2 = explode('|', $objets); 
          $requete1 = mysql_query ("SELECT * FROM items WHERE guid='$objets2'");
          $requete2 = mysql_fetch_array ($requete1);
          foreach($objets2 as $requete2) 
          if ($requete2['pos'] == 12) 
          {
          ?>
          Format 12
          <?php
          }
          ?>
          
          1. Je le connais déjà ce site, et pour ce qui est codage, on ne fait avec ce que l'on peux.
            Ensuite il n'y a rien de tout sa, dans le site du zéro. Plutôt essayer de me faire comprendre que de me faire envoyer sur un site de nuls xD.
            Après, tu n'es pas tout seul à savoir coder sur ccm (et heureusement) si tu n'as pas envie de m'expliquer et ben tu le fais pas.
          2. je ne dis pas sa pour te faire passer pour un nul

            bref,
            il faudrai que tu me dise ce que tu veut faire avec tes nombres
          3. Okai, j'ai une cellule nommé objets avec des nombre par exemple 1|2|6|7|8|9|. Ensuite j'ai une table comme tu as pu le constaté " items ". Ces nombres sont ensuite dans cette table (items) qui sont en GUID. Puisque l'on a les nombres sans | nous pouvons les sélectionner la ligne, et dire quelle est le nombre de la pos.
            As-tu compris ?
          4. $objets = $donnees['objet'];
            $objets2 = explode('|', $objets);

            foreach($objets2 as $line)
            {
            $requete1 = mysql_query ("SELECT pos FROM items WHERE guid='.$line.'");
            $requete2 = mysql_fetch_array ($requete1);

            if($requete2['pos'] == 12)
            {
            echo 'pour guid = '.$line.'. le format est 12<br />';
            }
            }
        3. Bonsoir Zoro,
          Voici ce que j'obtiens lorsque je met ton nouveau code :
          la variable objets contient : "2|3|4|5|6|7|8|11|12|13|14|16|17|19|20|22|23|"
          pour objets2 egal a : "2", pos vaut : "", le format est incorrect
          pour objets2 egal a : "3", pos vaut : "", le format est incorrect
          pour objets2 egal a : "4", pos vaut : "", le format est incorrect
          pour objets2 egal a : "5", pos vaut : "", le format est incorrect
          pour objets2 egal a : "6", pos vaut : "", le format est incorrect
          pour objets2 egal a : "7", pos vaut : "", le format est incorrect
          pour objets2 egal a : "8", pos vaut : "", le format est incorrect
          pour objets2 egal a : "11", pos vaut : "", le format est incorrect
          pour objets2 egal a : "12", pos vaut : "", le format est incorrect
          pour objets2 egal a : "13", pos vaut : "", le format est incorrect
          pour objets2 egal a : "14", pos vaut : "", le format est incorrect
          pour objets2 egal a : "16", pos vaut : "", le format est incorrect
          pour objets2 egal a : "17", pos vaut : "", le format est incorrect
          pour objets2 egal a : "19", pos vaut : "", le format est incorrect
          pour objets2 egal a : "20", pos vaut : "", le format est incorrect
          pour objets2 egal a : "22", pos vaut : "", le format est incorrect
          pour objets2 egal a : "23", pos vaut : "", le format est incorrect
          1. Or, tu as une petit problème je pense dans ton codage :
            $requete1 = mysql_query ("SELECT pos FROM items WHERE guid='.$line.'"); 

            Remplacé par :
            $requete1 = mysql_query("SELECT * FROM items WHERE guid='" . $line . "'");

            Et j'obtiens enfin :
            pour objets2 egal a : "4", pos vaut : "12", le format est 12 (bien-sûr le reste ci dessus)
          2. mais tu n'a changé que la requete ???

            et en mettant un *
            la code apporte le resultat attendu ???
          3. Oui, voilà, une autre question, je ne peux pas mettre 2 fois la même chose dans la page web ?(toute la requête PHP)
          4. Rien qu'en changeant la valeur du if($requete2['pos'] == 6)
          5. bah si
            tu peut faire la meme chose avec des valeurs differentes

            en definissant des variables