Saut a la ligne si la valeur existe

Suivre ce topic
Ce topic est suivi par : Personne...
Chooper01

Chooper01 Le 4 septembre 2016 à 19:39 (Édité le 25 janvier 2019 à 17:52)

Bonjour,
Je voudrais savoir si il est possible de faire une liste a puce si seulement les variables existe ? 
Je vous mets mon code pour être plus compréhensible:
<div id="ing">
       <?= $ing1?><?= $ing2?><?= $ing3?><?= $ing4?><?= $ing5?><?= $ing6?><?= $ing7?><?= $ing8?><?= $ing9?><?= $ing10?>
Voila je voudrais faire une liste a puce de ça.
Si Ing1 et Ing2 existe pas il fait une liste a puce de c'est 2 là ect ect 
Merci d'avance ! 
TheFlameflo

TheFlameflo Le 4 septembre 2016 à 20:37

Salut !

Il suffit de faire une condition simple :
 if(isset($tavariable))
{
   echo $tavariable;
}
Pour faire simple, ça teste si la variable existe. Tu peux faire d'autres tests, par exemple pour tester si c'est bien une chaîne de caractère, si ce n'est pas null, ect.
Si tu ne veux pas que ça beaucoup de place, tu fais une condition ternaire :
echo isset($tavariable) ? $tavariable : null;
J'ai vu que tu faisais l'opération plusieurs fois avec des variables similaires.
Donc, ce que tu pourrais faire, c'est de faire une boucle for, mettre toutes tes données dans un array, tu fais un array_key_exists de ta key avec un int qui augmente à chaque tour de boucle.
Ça pourrait donner quelque chose comme ça :

Array avec toutes tes valeurs(ing1, ing2, ing3, ing4, etc)
Boucle for($i = 1, $i <= 10, $i++)
array_key_exists de 'ing' et $i (ce qui donnerait ing1, ing2, etc) selon le tour à laquelle la boucle est rendue.
Si ça existe, afficher la variable dans l'array

Bref, tu peux faire un test à la main ou créer un code qui fait le tout, tout seul.

Bonne chance ! 😀
Chooper01

Chooper01 Le 4 septembre 2016 à 22:16

Salut merci de ta réponse mais le soucis c'est que si la variable n’existe pas il me mets un retour a la ligne même si "ing3" est vide...

Screen :


Le code :
<div id="ing">
      <?php if (isset($ing1)){echo $ing1;} ?> <br>
      <?php if (isset($ing2)){echo $ing2;} ?><br>
      <?php if (isset($ing3)){echo $ing3;} ?><br>
      <?php if (isset($ing4)){echo $ing4;} ?><br>
      <?php if (isset($ing5)){echo $ing5;} ?><br>
      <?php if (isset($ing6)){echo $ing6;} ?><br>
      <?php if (isset($ing7)){echo $ing7;} ?><br>
      <?php if (isset($ing8)){echo $ing8;} ?><br>
      <?php if (isset($ing9)){echo $ing9;} ?><br>
      <?php if (isset($ing10)){echo $ing10;} ?><br>
      </div>
Si je retire les Br il ce colle ..

Merci
TheOldNoob

TheOldNoob Le 4 septembre 2016 à 22:35 (Édité le 4 septembre 2016 à 22:37)

C'est normal, tes <br> ne sont pas dans la condition 😉 donc il fait un retour a la ligne quoi qu'il arrive.
Je te met la concaténation sur ta première ligne, tu fera pareil avec les autres 😉

<div id="ing">      
<?php if (isset($ing1)){echo $ing1; .'<br>'} ?>       
<?php if (isset($ing2)){echo $ing2;} ?><br>      
<?php if (isset($ing3)){echo $ing3;} ?><br>      
<?php if (isset($ing4)){echo $ing4;} ?><br>      
<?php if (isset($ing5)){echo $ing5;} ?><br>      
<?php if (isset($ing6)){echo $ing6;} ?><br>      
<?php if (isset($ing7)){echo $ing7;} ?><br>      
<?php if (isset($ing8)){echo $ing8;} ?><br>      
<?php if (isset($ing9)){echo $ing9;} ?><br>      
<?php if (isset($ing10)){echo $ing10;} ?><br>      
</div>
TheOldNoob

TheOldNoob Le 4 septembre 2016 à 22:37

Et si tu veux les puce de la liste tu fait :

<div id="ing">
   <ul>
      <?php if (isset($ing1)){echo '<li>'. $ing1; .'<li>'} ?>  
Chooper01

Chooper01 Le 4 septembre 2016 à 22:41

Salut merci à toi mais j'ai une erreur :o

La voici :  Parse error: syntax error, unexpected '.' in C:\wamp64\www\cuisine\lesrecettes.php on line 93

<div id="ing">
      <?php if (isset($ing1)){echo $ing1; .'<br>'} ?> 
      <?php if (isset($ing2)){echo $ing2; .'<br>'} ?>
      <?php if (isset($ing3)){echo $ing3; .'<br>'} ?>
      <?php if (isset($ing4)){echo $ing4; .'<br>'} ?>
      <?php if (isset($ing5)){echo $ing5; .'<br>'} ?>
      <?php if (isset($ing6)){echo $ing6; .'<br>'} ?>
      <?php if (isset($ing7)){echo $ing7; .'<br>'} ?>
      <?php if (isset($ing8)){echo $ing8; .'<br>'} ?>
      <?php if (isset($ing9)){echo $ing9; .'<br>'} ?>
      <?php if (isset($ing10)){echo $ing10; .'<br>'} ?>
La ligne 93 c'est le 1er if
TheOldNoob

TheOldNoob Le 4 septembre 2016 à 23:01 (Édité le 4 septembre 2016 à 23:02)

ok, déplace les ; après tes variables et mes les après le dernier ' pour voir? 😀
Chooper01

Chooper01 Le 4 septembre 2016 à 23:07

Voila ça me fait toujours le retour a la ligne ... ;'(
Chooper01

Chooper01 Le 5 septembre 2016 à 00:00

Up.. 
TheOldNoob

TheOldNoob Le 5 septembre 2016 à 01:03

Avant de te proposé tout autre chose un peu relou a codé a cette heure si, tu peu me montré les input de tes ingrediant?

Sinon, y'a beaucoup plus simple.
La tu met un input par ingredient, de mémoire, tu a 9 inputs. Mais comment faire si on as 12 ingredits?


A la place, tu met un seul input... textarea, les ingredients, tu les mes en liste dans textarea.
Lors de l'affichage, tu fait : nl2br($post['ingredient'];
et normalement il devrais t'afficher les lignes comme elles aurons été entré dans ta bdd, donc en liste si ton utilisateur les a mis en list 😀
On avait un projet similaire au tiens lors de ma formation, un site pour un restaurant.

renseigne toi sur le nl2br, c'est un truc bien pratique 😀
Chooper01

Chooper01 Le 5 septembre 2016 à 01:08

<label for ="pers">Nombres de personnes:</label> <input type="text" name="nbrpers" placeholder="Nombres de personne" pattern="[1-9]" value="<?php if(isset($_POST['nbrpers'])) {echo $_POST['nbrpers'];} ?>" />  <br>
         <label for="1ing">1ére ingredient :</label>    <input id="1ing" name="1ing" placeholder="1er ingredient" value="<?php if(isset($_POST['1ing'])) {echo $_POST['1ing'];} ?>" />  <br>
         <label for="2ing">2ième ingredient :</label>    <input id="2ing" name="2ing" placeholder="2iéme ingredient" value="<?php if(isset($_POST['2ing'])) {echo $_POST['2ing'];} ?>"/>  <br>
         <label for="3ing">3ième ingredient :</label>    <input id="3ing" name="3ing" placeholder="3iéme ingredient" value="<?php if(isset($_POST['3ing'])) {echo $_POST['3ing'];} ?>"/>  <br>
         <label for="4ing">4ième ingredient :</label>    <input id="4ing" name="4ing" placeholder="4iéme ingredient" value="<?php if(isset($_POST['4ing'])) {echo $_POST['4ing'];} ?>"/> <br>
         <label for="5ing">5ième ingredient :</label>    <input id="5ing" name="5ing" placeholder="5iéme ingredient" value="<?php if(isset($_POST['5ing'])) {echo $_POST['5ing'];} ?>"/> <br>
         <label for="6ing">6ième ingredient :</label>    <input id="6ing" name="6ing" placeholder="6iéme ingredient" value="<?php if(isset($_POST['6ing'])) {echo $_POST['6ing'];} ?>"/> <br>
         <label for="7ing">7ième ingredient :</label>    <input id="7ing" name="7ing" placeholder="7iéme ingredient" value="<?php if(isset($_POST['7ing'])) {echo $_POST['7ing'];} ?>"/> <br>
         <label for="8ing">8ième ingredient :</label>    <input id="8ing" name="8ing" placeholder="8iéme ingredient" value="<?php if(isset($_POST['8ing'])) {echo $_POST['8ing'];} ?>"/> <br>
         <label for="9ing">9ième ingredient :</label>    <input id="9ing" name="9ing" placeholder="9iéme ingredient" value="<?php if(isset($_POST['9ing'])) {echo $_POST['9ing'];} ?>"/> <br>
         <label for="10ing">10ième ingredient :</label>    <input id="10ing" name="10ing" placeholder="10iéme ingredient" value="<?php if(isset($_POST['10ing'])) {echo $_POST['10ing'];} ?>"/> <br>
Voila mes inputs ^^




Et j'ai pas trop compris la xD
TheOldNoob

TheOldNoob Le 5 septembre 2016 à 01:22

En fait, ma première idée, du pourquoi j'ai demander a voir tes input, c'est qu'avec un peu de malchance, dans ta bdd, il y a un caractères qui s'insère et que tu ne vois pas. comme un espace. Si c'est le cas, lors de l'affichage, il vois l'espace et donc t'affiche une ligne que tu crois vide, mais qui ne l'ai pas.
Vérifie dans ta bdd si il n'y as pas un espace qui traine dans tes champs d'ingrédient.

Ma seconde idée, c'est de ne proposé qu'un seul champs pour tout les ingrédients en même temps. Mais qu'a l'affichage, il garde les retours a la ligne que tu aura fait lorsque tu aura inscrit tes ingredients.
et ça, on le fait avec nl2br 😀
Chooper01

Chooper01 Le 5 septembre 2016 à 01:34

j'ai verifié ma bdd et je vois aucun espace 

Et ta seconde idée je vois toujours pas :(
TheFlameflo

TheFlameflo Le 5 septembre 2016 à 02:09

Salut !

Pour revenir à l'idée de TheHoldNoob, c'est vrai que ça peut être plus pratique d'avoir un textarea plutôt que 10 champs.
Ce qu'il veut dire (enfin, je crois), c'est que tu récupèreras le contenu de ta textarea et que tu l'afficheras à l'aide de nl2br.

Je te laisse regarder la documentation, mais en gros, ça affiche le texte comme tu l'as tapé dans la textarea.
Donc si tu fais un retour à la ligne, il sera transformé en <br />.
Après, tu peux afficher tous tes ingrédients.

Si tu veux récupérer tous les ingrédients dans un array, tu dois faire un explode par des retours à la ligne (donc, PHP_EOL).
En gros, à chaque retour à la ligne, cette fonction créée ajoute l'élément dans l'array.
Tu peux explose par ce que tu veux, des virgules par exemple :

Exemple :
$monTexte = 'ceci est, un texte, qui, sera découpé';
$parts = explode(',', $monTexte);
print_r($parts);
La valeur de $parts est la suivante :
Array
(
    [0] => ceci est
    [1] =>  un texte
    [2] =>  qui
    [3] =>  sera découpé
)
Ça donne la même chose si tu remplaces les virgules par des retours à la ligne ! 😀

J'espère t'avoir aidé !

Bonne chance !
Chooper01

Chooper01 Le 5 septembre 2016 à 23:00

Salut ! 
Alors voila j'ai réussis a le faire en passant pas un autre procédé mais seul soucis c'est que les point sont toutes a gauche je vous mets le screen + le code 

Code:
<div id="ing">
       <ul>
         <?php for ($i = 1; $i <= 10; $i++): ?>
                <?php if (isset(${"ing$i"})): ?>
                    <li><?= ${"ing$i"} ?></li>
                <?php endif; ?>     
         <?php endfor; ?>
       </ul>
      </div>
Screen:


voila je voudrais que les points a gauche soient centré avec les "ing" 

Merci !
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte