[RESOLU] recuperer chaine caracteres php et variable depuis formulaire

Eléphant du PHP | 345 Messages

20 avr. 2021, 01:01

Bonjour, je ne sais pas comment récupérer "produit" et " usure" depuis le formulaire ....
<?php
if(isset($_POST['vendre']))
 {
// récupération PROPRE des variables AVANT de les utiliser
$produit = !empty($_POST['produit']) ? trim($_POST['produit']) : NULL;
$usure = !empty($_POST['usure']) ? trim($_POST['$usure']) : NULL;
$prix = !empty($_POST['prix']) ? trim($_POST['prix']) : NULL;
if(!empty($_POST['produit'])AND !empty($_POST['usure']) AND !empty($_POST['prix']))
{
$sql = "INSERT INTO market (produit, usure, prix) VALUES(:produit, :usure, :prix );";
$prep = $bdd->prepare($sql);
$prep->bindvalue(':produit',$produit,PDO::PARAM_STR);
$prep->bindvalue(':usure',$usure,PDO::PARAM_INT);
$prep->bindvalue(':prix',$prix,PDO::PARAM_INT);
$prep->execute();
}
}
header('Location:page_membre.php');
?>
le formulaire
<div id = "vente">
<form name="form" method="post" action="vendre_fin.php" enctype="multipart/form-data">
<fieldset>VENTE</fieldset>
<p><label for = "produit"><?php echo '<img src=" '.$contenant.' ">'; ?> </label>
<p><label for = "usure_contenant"><b>USURE&nbsp;<?php echo "$usure_contenant"; ?>&nbsp;%</b></label>
<p><label for = "prix">PRIX: </label><input type="number" min="1" max="" name="prix" id="prix" size="3" /></p>
</select></p>
<div align="center"><br>
<input type="submit" name="vendre_contenant" value="VALIDER" />
</div>
</form>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 avr. 2021, 08:09

Dans ton formulaire HTML, il te faut un champ <input> name='produit' et un deuxième avec 'usure', tu mets en value ce que tu veux, et type='text' si tu veux qu'il soit modifiable, 'hidden' si c'est juste pour le récupérer en PHP sans action de la part de l'utilisateur.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 345 Messages

20 avr. 2021, 10:30

Comme ceci, il y a un mieux
<p><label for = "produit"><?php echo '<img src=" '.$contenant.' ">'; ?> </label>
<input type="hidden" name="produit" id="produit" value="<?php echo '<img src=" '.$contenant.' ">'; ?>
<p><label for = "usure"><b>USURE&nbsp;<?php echo "$usure_contenant"; ?>&nbsp;%</b></label>
<input type="hidden" name = "usure" id = "usure"  value="<?php echo '$usure_contenant'; ?>
<p><label for ="prix"><b>PRIX:</b></label>
mais le traitement du formulaire bugue car il insère en table : 1 1 1

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 avr. 2021, 13:30

Oui mais là si tu fais n'importe quoi aussi :-D

Il va falloir que tu debugues un peu par toi-même :
- Ctrl+U pour voir le code HTML de ton formulaire
- Via la console de développement de Firefox ou Chrome : Ctrl+Maj+i, puis onglet réseau, et regarde ce qui passes en paramètre
- var_dump($_POST) avant ton traitement PHP pour voir ce que PHP reçoit en POST
- et on ajoute à ça un peu de réflexion pour que ce soit logique ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 345 Messages

20 avr. 2021, 16:37

Alors,
<p><label for = "produit"><img src=" /objets/sacoche.gif "> </label>
<input type="hidden" name="produit" id="produit" value="<img src=" /objets/sacoche.gif "><p><label for = "usure"><b>USURE&nbsp;24&nbsp;%</b></label>
<input type="hidden" name = "usure" id = "usure"  value="$usure_contenant">
<p><label for ="prix"><b>PRIX:</b></label>
<input type="number" min="1" max="9999" name="prix" id="prix" size="4" value="prix"></p>
</select></p>
la ligne <input type="hidden" name="produit" est en rouge.

avec la console:
l'image "sacoche.gif" est mise en cache avec GET


et les 3 var_dump donnent:
boolean true

maintenant pour ce qui est de la reflexion et de la logique, je crie à l'aide #-o

Avatar du membre
Mammouth du PHP | 1609 Messages

20 avr. 2021, 16:42

Salut, pas tout lu mais déjà sans apostrophe autour de la variable ça sera mieux pour le value :
value="<?php echo $usure_contenant; ?>"
Tu auras bien la valeur de la variable $usure_contenant et non son nom.
Modifié en dernier par Saian le 20 avr. 2021, 16:44, modifié 1 fois.
Développeur web depuis + de 20 ans

Mammouth du PHP | 2703 Messages

20 avr. 2021, 16:43

<input type="hidden" name="produit" id="produit" value="<img src=" /objets/sacoche.gif ">
la valeur de ce champ caché est ce qu'il y a entre le premier " et le suivant, soit <img src=
c'est vraiment comme cela que s'apelle le produit ?

<input type="hidden" name = "usure" id = "usure" value="$usure_contenant">
là, la valeur vaut $usure_contenant, c'est ce qui est attendu ?

Eléphant du PHP | 345 Messages

21 avr. 2021, 00:21

@Saian, j'ai viré les double quote sur le value indiqué mais cela ne change rien.

Eléphant du PHP | 345 Messages

21 avr. 2021, 00:25

Pour <input type="hidden" name="produit" id="produit" value="<img src=" /objets/sacoche.gif ">
le produit c'est <img src=" /objets/sacoche.gif"> (image dans dossier objets)

ensuite, c'est bien $usure_contenant qui est attendu.
dernieres modifs faites.
<p><label for = "produit"><?php echo '<img src=" '.$contenant.' ">'; ?> </label><input type='hidden' name='produit' id='produit' value="<?php echo '<img src= '.$contenant.' >'; ?>"/>
<p><label for = 'usure'><b>USURE&nbsp;<?php echo "$usure_contenant"; ?>&nbsp;%</b></label><input type='hidden' name = 'usure' id = 'usure'  value="<?php echo $usure_contenant; ?>"/>
<p><label for ="prix"><b>PRIX:</b></label><input type='number' min='1' max='9999' name="prix" id="prix" size="4" value="prix"></p>

Avatar du membre
Mammouth du PHP | 1609 Messages

21 avr. 2021, 11:44

Je ne t'ai pas fait retirer des double quote, je t'ai fait ajouter un echo.
<!-- tu avais ça -->
<input type="hidden" name = "usure" id = "usure"  value="$usure_contenant">
<!-- j'ai suggéré ça -->
value="<?php echo $usure_contenant; ?>"

Plusieurs problèmes.

Déjà une base, je sais pas si ça fait réellement une différence mais en html pour les attributs (for, type, name, value, etc) on ne met pas d'espace avant ou après le signe = et on met les valeurs entre " et non entre '.
<!-- non -->
<label for = 'usure'>
<!-- oui -->
<label for="usure">

Pour le produit pas sur que ça fasse une différence non plus mais tu as des espaces qui ne servent à rien et peuvent potentiellement poser problème.
// non
echo '<img src=" '.$contenant.' ">';// donne <img src=" /objets/sacoche.gif "> le  src contient un espace au début et à la fin
// oui
echo '<img src="' . $contenant . '"/>';// donne <img src="/objets/sacoche.gif"/> le  src est comme il faut

Maintenant le value de l'input produit...
<input type='hidden' name='produit' id='produit' value="<?php echo '<img src= '.$contenant.' >'; ?>"/>
<!-- va donner -->
<input type='hidden' name='produit' id='produit' value="<img src= /objets/sacoche.gif>">
<!-- avant le retrait des " tu obtenais ceci, remarque le problème de coloration du value qui bug avec les " en trop. La valeur est donc <img src= -->
<input type='hidden' name='produit' id='produit' value="<img src=" /objets/sacoche.gif">">

C'est tout de même un peu mieux qu'avec les " du img src mais c'est quand même étrange d'avoir une valeur de produit qui est égale à une balise image... ceci dit je vais pas chercher à comprendre, le plus simple étant surement à mon sens de ne mettre que la valeur de $contenant et au besoin de rajouter la partie balise <img> dans le php en traitement du formulaire.

Je reviens maintenant sur le $usure_contenant. Veux tu que l'input prennent la valeur de $usure_contenant ou veut tu que l'input prenne pour valeur $usure_contenant ? comprends tu la différence ?

Je suppose que tu veux la valeur de $usure_contenant.
<input type="hidden" name="usure" id="usure"  value="<?php echo '$usure_contenant'; ?>"/>
<!-- va donner -->
<input type="hidden" name="usure" id="usure"  value="$usure_contenant"/>
<!-- hors tu veux -->
<input type="hidden" name="usure" id="usure"  value="valeur de $user_contenant"/>

Il faut bien que tu fasses la différence ici
echo $usure_contenant;// affiche la valeur de $usure_contenant
echo '$usure_contenant';// affiche $usure_contenant
echo "$usure_contenant";// affiche la valeur de $usure_contenant

Si tu echo une variable, tu n'as pas besoin de la mettre entre ". C'est utile seulement si tu veux afficher un texte avec une variable dedans.
$prenom = 'toto';
echo "Bonjour $prenom !";

Ensuite il te manque 2 fermetures de <p>.

Bref faut revoir les bases.

Le code au propre sans garantie que ça règle tous tes problèmes, je ne suis responsable que de ce que j'ai écris.
<p>
  <label for="produit"><img src="<?php echo $contenant; ?>"/></label>
  <input type="hidden" name="produit" id="produit" value="<?php echo $contenant; ?>"/>
</p>
<p>
  <label for="usure"><b>USURE <?php echo $usure_contenant; ?>%</b></label>
  <input type="hidden" name="usure" id="usure" value="<?php echo $usure_contenant; ?>"/>
</p>
<p>
  <label for="prix"><b>PRIX:</b></label>
  <input type="number" min="1" max="9999" name="prix" id="prix" size="4" value="prix"/>
</p>

Bon courage pour la suite.
Développeur web depuis + de 20 ans

Eléphant du PHP | 345 Messages

21 avr. 2021, 18:44

Merci pour les corrections et explications, je sais que j'ai un peu de mal avec la concaténation. En fait, je me mélange un peu les crayons (d'où le "<img src" dans le input de la valeur produit par exemple!) Ton script corrigé me parait beaucoup plus propre, clair et cohérent. Merci. hélas, la table ne prend toujours pas les valeurs issues de ce formulaire. #-o
J'ai testé en dur en mettant "test", "25" et "99" ça déconne toujours !!!

Mammouth du PHP | 2703 Messages

21 avr. 2021, 19:58

if(isset($_POST['vendre']))
<input type="submit" name="vendre_contenant" value="VALIDER" />
cela ne rentre donc jamais dans le if, d'où pas de requête insert.

Eléphant du PHP | 345 Messages

21 avr. 2021, 21:39

Donc, les input doivent etre dans la boucle du if?

Mammouth du PHP | 2703 Messages

21 avr. 2021, 22:05

il faut lire et appliquer les très bons conseils :
"Il va falloir que tu debugues un peu par toi-même :
- var_dump($_POST) avant ton traitement PHP pour voir ce que PHP reçoit en POST"

Eléphant du PHP | 345 Messages

21 avr. 2021, 23:30

le resultat du var_dump
Notice: Undefined variable: POST in C:\wamp64\www\vendre_contenant_fin.php on line 6
C:\wamp64\www\vendre_contenant_fin.php:6:null

Il n'y a rien qui passe :twisted: