[RESOLU] problème d'affichage de variable de base de données

Petit nouveau ! | 5 Messages

27 févr. 2022, 22:39

Bonjour,

Je n'arrive pas à afficher une variable, et je n'arrive pas à voir où ça pêche.

J'essaie d'écrire une fonction en début de code pour éviter de retaper du code:

Code : Tout sélectionner

function cellitem ($cellitemlabel,$placeholder) { echo '<tr>'; echo '<td>'; echo "<label>$cellitemlabel :</label>"; echo '</td>'; echo '<td>'; echo "<input type=text name=new$cellitemlabel placeholder=$placeholder value="$user['$cellitemlabel']"/><br /><br />"; echo '</td>'; echo '</tr>'; }
Mais quand j'appelle, ma page, ça ne marche pas pour cette variable:

Code : Tout sélectionner

value="$user['$cellitemlabel']"
Si je fais mon echo sans passer par la fonction, ça fonctionne, et si je remplace la variable par du texte, ça marche aussi.
Mon soucis c'est de trouver la bonne syntaxe :-( j'ai essayé avec des ' , des ", des [], mais rien n'y fait :-(
Modifié en dernier par eldudu le 27 févr. 2022, 22:50, modifié 1 fois.

Mammouth du PHP | 2703 Messages

27 févr. 2022, 22:42

cellitem ($cellitemlabel,$placeholder)
la fonction prend 2 paramètres or il y en a besoin de 3.

Petit nouveau ! | 5 Messages

27 févr. 2022, 22:49

au temps pour moi, c'est aussi $cellitemlabel, je modifie le post de départ.Désolé :-(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 févr. 2022, 23:33

Vérifie le code HTML généré (clic droit, afficher la source).
Je ne sais pas si c'est l'origine du problème que tu rencontres, mais quoi qu'il en soit, il faut que les attributs des inputs soient entre guillemets.

Et pour éviter un conflit de guillemets doubles dans le code PHP, il faut que tu échappes tes guillemets avec un antislash :

Code : Tout sélectionner

echo "<input placeholder=\"$placeholder\" ...>";
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

28 févr. 2022, 23:16

merci pour vos réponses :-)
Bon au final j'ai rusé et ça marche comme ça:

Code : Tout sélectionner

$useritem = $user['$cellitemlabel']; echo '<tr>'; echo '<td>'; echo "<label>$cellitemlabel :</label>"; echo '</td>'; echo '<td>'; echo "<input type=text name=$newcellitemlabel placeholder=$placeholder value=$useritem /><br /><br />";

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 mars 2022, 15:12

Le code HTML généré n'est pas correct si tu ne mets pas de guillemets autour de la valeur de tes attributs (en particulier placeholder qui peut contenir des espaces et des caractères spéciaux) donc si tu veux éviter les problèmes, mets des guillemets comme je t'ai indiqué. :-D
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 2703 Messages

01 mars 2022, 15:14

et le problème était un problème de portée de variable, voir https://www.php.net/manual/fr/language. ... .scope.php

Petit nouveau ! | 5 Messages

01 mars 2022, 20:15

Le code HTML généré n'est pas correct si tu ne mets pas de guillemets autour de la valeur de tes attributs (en particulier placeholder qui peut contenir des espaces et des caractères spéciaux) donc si tu veux éviter les problèmes, mets des guillemets comme je t'ai indiqué. :-D
yes , j'ai fait le mauvais copié/collé! c'est ça qui marche:

Code : Tout sélectionner

$useritem = $user['age']; echo '<tr>'; echo '<td>'; echo "<label>$cellitemlabel :</label>"; echo '</td>'; echo '<td>'; echo "<input type=text name=\"$newcellitemlabel\" placeholder=\"$placeholder\" value=\"$useritem\" /><br /><br />";

Petit nouveau ! | 5 Messages

01 mars 2022, 20:16

et le problème était un problème de portée de variable, voir https://www.php.net/manual/fr/language. ... .scope.php
super! je comprends mieux maintenant :-) Merci !

Mammouth du PHP | 2703 Messages

01 mars 2022, 20:57

la solution dans le cas présent n'est pas d'ajouter un global mais de passer aussi la valeur à afficher en paramètre à la fonction.