Saut a la ligne si la valeur existe
- Accueil
- Forum
- Programmation
- PHP
- Saut a la ligne si la valeur existe
Chooper01 Le 4 septembre 2016 à 19:39 (Édité le 25 janvier 2019 à 17:52)
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 Le 4 septembre 2016 à 20:37 (Édité le 1 janvier 1970 à 01:00)
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 Le 4 septembre 2016 à 22:16 (Édité le 1 janvier 1970 à 01:00)
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 Le 4 septembre 2016 à 22:35 (Édité le 4 septembre 2016 à 22:37)
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 Le 4 septembre 2016 à 22:37 (Édité le 1 janvier 1970 à 01:00)
<div id="ing">
<ul>
<?php if (isset($ing1)){echo '<li>'. $ing1; .'<li>'} ?>
Chooper01 Le 4 septembre 2016 à 22:41 (Édité le 1 janvier 1970 à 01:00)
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 Le 4 septembre 2016 à 23:01 (Édité le 4 septembre 2016 à 23:02)
Chooper01 Le 4 septembre 2016 à 23:07 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 5 septembre 2016 à 01:03 (Édité le 1 janvier 1970 à 01:00)
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 Le 5 septembre 2016 à 01:08 (Édité le 1 janvier 1970 à 01:00)
<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 Le 5 septembre 2016 à 01:22 (Édité le 1 janvier 1970 à 01:00)
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 Le 5 septembre 2016 à 01:34 (Édité le 1 janvier 1970 à 01:00)
Et ta seconde idée je vois toujours pas :(
TheFlameflo Le 5 septembre 2016 à 02:09 (Édité le 1 janvier 1970 à 01:00)
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 Le 5 septembre 2016 à 23:00 (Édité le 1 janvier 1970 à 01:00)
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 !