[RESOLU] Problème PHP

R'edge
Invité n'ayant pas de compte PHPfrance

17 févr. 2016, 09:27

Bonjour à tous,

Je me retrouve à devoir retravailler un fichier php d'un ancien collègue. Seul bémol...je n'y comprends pas grand chose.
Celui-ci avait créer un formulaire permettant de faire des propositions à nos clients.
Je vous envoie mon code pour plus de clareté

Code : Tout sélectionner

<?php try{ $bdd = new PDO('...'); $sql = "SELECT * FROM `Krampe Big body 550 carrier` "; $reponse = $bdd->query($sql); // récupération des données //on stocke le résultat dans un array $result = $reponse->fetchAll(); //on ferme la connexion $reponse->closeCursor(); } catch (Exception $e){ die('Erreur : ' . $e->getMessage()); } $prix_total_selection = 0; if(!empty($_POST)){ foreach($_POST as $K=>$value){ $substrOpt = substr($K,0,6); if($substrOpt=="radio_"){ $optionId = str_replace("radio_","",$K); $prix_total_selection += $value; } } } $fdp = $_POST['fdp']; $remise= $_POST['remise']; $telephone= $_POST['telephone']; $reprise = $_POST['reprise']; $acces1 = $_POST['acces1']; $prix1 = $_POST['prix1']; $acces1 = $_POST['acces2']; $prix1 = $_POST['prix2']; $acces1 = $_POST['acces3']; $prix1 = $_POST['prix3']; $acces1 = $_POST['acces4']; $prix1 = $_POST['prix4']; $acces1 = $_POST['acces5']; $prix1 = $_POST['prix5']; $rem = 0; $final = 0; ?>

Code : Tout sélectionner

<form method="post" id="formulaire_benne" action="impression.php" > <fieldset> <legend><strong>Formulaire de calcul du prix d'une benne KRAMPE</strong></legend> <? foreach($result as $donnees){ $id = $donnees['id']; $prix = $donnees['prix']; $option = $donnees['option']; $detail = $donnees['detail']; echo "Numéro de l'option : <strong> $option </strong><br/> <label> $detail </label><br/> <input type='radio' name='radio_".$option."' value='$prix' id='".$option."_oui' />oui <input type='radio' name='radio_".$option."' value='0' id='".$option."_non' />non <br/><br/>Prix :<strong>$prix € </strong> <br/><hr/><br/> "; } ?>
Ce bout de code sert à afficher un formulaire avec les données se trouvant dans notre base de données, et a additionner les montants dont l'utilisateur à cliqué sur "oui".
Maintenant ce que je voudrais faire : retranscrire les options dont le "oui" à été sélectionné
Dans le form, j'ai mis un "action" vers une autre page
J'ai 4 colonnes dans ma base de données qui correspondent à ça :

Code : Tout sélectionner

$id = $donnees['id']; $prix = $donnees['prix']; $option = $donnees['option']; $detail = $donnees['detail'];
Je pense qu'il ne faut pas grand chose pour y parvenir...mais je n'y arrive pas.
Quelqu'un pourrait-il m'aider?

Merci d'avance,

Eléphant du PHP | 243 Messages

17 févr. 2016, 14:03

Bonjour,
Pour retranscrire les options dont le "oui" a été sélectionné, il suffit d'éditer ce bout de code :
if($substrOpt=="radio_"){
      $optionId = str_replace("radio_","",$K);

      $prix_total_selection += $value;
}
Ces quelques lignes agissent pour chaque input de type radio qui a été validé.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

R'edge
Invité n'ayant pas de compte PHPfrance

18 févr. 2016, 09:22

Bonjour,
Pour retranscrire les options dont le "oui" a été sélectionné, il suffit d'éditer ce bout de code :
if($substrOpt=="radio_"){
      $optionId = str_replace("radio_","",$K);

      $prix_total_selection += $value;
}
Ces quelques lignes agissent pour chaque input de type radio qui a été validé.
Merci de vous être pris la peine de répondre.
OK donc si je comprends bien je dois mettre une variable comprenant les détails. $prix_total_selection est une variable de type int, donc incrémenté avec += value. Moi j'en ai une de type string, et j'avoue que j'en ai aucune idée de comment l'incrémenter avec mes données de la base...

R'edge
Invité n'ayant pas de compte PHPfrance

18 févr. 2016, 09:27

Je pense que pour récupérer ces données c'est comme ça :

Code : Tout sélectionner

if($substrOpt=="radio_"){ //on récupère l'option $optionId = str_replace("radio_","",$K); //on additionne les montants : $id = $donnees['id']; $prix_total_selection += $value; $option = $donnees['option']; $detail = $donnees['detail'];
Le problème, c'est plus mon echo... pour les afficher #-o

Eléphant du PHP | 243 Messages

18 févr. 2016, 14:14

Moi j'en ai une de type string, et j'avoue que j'en ai aucune idée de comment l'incrémenter avec mes données de la base...
Eh bien ça va être un peu près du même genre.
Il va falloir tout d'abord initialiser une variable avant le passage dans la boucle.
Puis à chaque passage, il suffira de concatener le résultat obtenu avec la nouvelle valeur.
Pour concaténer des valeurs, il faut utiliser l'opérateur .=
http://php.net/manual/fr/language.operators.string.php

Voici ce que ça donnerait :
$resultat = "";
for ........ {
    // Imaginons que la valeur à concatener est $donnee
    $resultat .= $donnee;
}
//puis l'echo pour tout afficher
echo $resultat;
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

R'edge
Invité n'ayant pas de compte PHPfrance

18 févr. 2016, 16:17

Tu peux me dire ce que j'ai mal fait ici :

Code : Tout sélectionner

$resultat = 0; for ($value; $substrOpt = substr($K,0,6);) { $resultat .= $donnees."<br/>"; }

Eléphant du PHP | 243 Messages

18 févr. 2016, 22:40

Tout d'abord, l'initialisation à fournir à la variable $resultat est une chaîne de caractère vide, et non une valeur Integer. Dans ce cas, il faut la définir comme je te l'ai montré dans mon précédent post, avec des guillemets.

Il va falloir s'intéresser à cette partie du code :
foreach($_POST as $K=>$value){
    $substrOpt = substr($K,0,6);
    if($substrOpt=="radio_"){
          $optionId = str_replace("radio_","",$K);
          $prix_total_selection += $value;
    }
}
Chaque passage dans le if validé signifiera que tu as affaire à un POST de type radio.
La variable $optionId te transmet l'id de l'objet qui est de passage dans la boucle.
Il te suffit donc ensuite, à l'aide de cet id et je pense d'une nouvelle connexion en bdd de récupérer les données désirées et de les stocker dans la variable $resultat par concaténation.
Enfin, en sortie de boucle, il suffira d'afficher le variable $resultat.

En espérant avoir été clair et surtout ne pas avoir dit de bétises :D
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

R'edge
Invité n'ayant pas de compte PHPfrance

19 févr. 2016, 09:52

J'ai compris certaines choses, et t'en remercie.
Au moins j'arrive à afficher quelques choses :lol:

Code : Tout sélectionner

$resultat .= "\$result[$K] => $value.\n";
J'ai compris les quelques lignes plus haut : $k affiche la key et value sa valeur
La ou je comprends moins c'est comment les résultats sont stockés dans l'array ($result)
J'ai 4 colonnes dans la base...du coup définit-il la première comme sa key et la dernière comme sa valeur?
Comment récupérer les 2 du milieu ? :lol: ... perdu à tout jamais :roll:

Eléphant du PHP | 243 Messages

19 févr. 2016, 20:52

En faite, les seuls input que tu peux récupérer avec ton formulaire actuel (du moins ce que tu nous as fournis), c'est si l'utilisateur a coché 'oui' ou 'non' pour l'id $option, appelé $K dans le foreach.
Tu nous as dit que tu souhaites afficher les options, mais qu'est ce que tu veux dire par là ? Est-ce l'id de l'option (à ce moment là tu n'as qu'à afficher $K), ou alors une autre variable ? En tout cas sache que les seuls valeurs transmises actuellement sont le $option et le $prix
echo  "Numéro de l'option : <strong> $option </strong><br/>
<label> $detail </label><br/>
<input type='radio' name='radio_".$option."' value='$prix' id='".$option."_oui' />oui 
<input type='radio' name='radio_".$option."' value='0' id='".$option."_non' />non
<br/><br/>Prix :<strong>$prix € </strong> 
<br/><hr/><br/> ";
Si tu cherches à récupérer une autre valeur comme par exemple le $detail, alors 2 choix vont t'être proposé.

Soit tu passes les valeurs directement par la méthode POST de ton formulaire. Pour faire ceci, il te suffit alors d'utiliser les fameux hidden input.

Ou alors la deuxième solution un petit peu plus coûteuse est à partir de l'id, effectuer une recherche dans ta bdd avec pour CLAUSE l'id $K que tu récupères.

En espérant que tu auras compris mon message :D :priere:
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

R'edge
Invité n'ayant pas de compte PHPfrance

23 févr. 2016, 11:01

On va essayer de se remettre dans le bain après un petit séjour à l’hôpital :roll:
Message reçu 5/5 dans la théorie, heureusement qu'il y a la pratique pour me faire réflechir un peu plus :D
C'est effectivement $detail que je souhaiterais afficher...
Donc pour la première solution, je pensais que POST permettait de récupérer des valeurs de l'utilisateur? hidden input -> donc générer un input dans une variable prenant la valeur de mon $detail?
Deuxième solution -> refaire un SELECT avec un WHERE et le mettre dans une variable, ou comment me rendre :mrgreen:
Pas facile tout ça pour quelqu'un qui n'a jamais fais de POO :(

Eléphant du PHP | 243 Messages

23 févr. 2016, 13:15

Eh bien une des meilleurs solutions est de passer par un input hidden (selon moi). Je t'explique :
Il faut ajouter un champ qui comportera la valeur $detail et qui pourra être retrouvé grâce à l'id récupéré. Ça ressemblera donc à ceci :
echo  "Numéro de l'option : <strong> $option </strong><br/>
<label> $detail </label><br/>
<input type='radio' name='radio_".$option."' value='$prix' id='".$option."_oui' />oui 
<input type='radio' name='radio_".$option."' value='0' id='".$option."_non' />non
<input type='hidden' name='valeur_".$option."' value='".$detail."'>
<br/><br/>Prix :<strong>$prix € </strong> 
<br/><hr/><br/> ";
En gros dans ce code, tu créés un nouvel input qui comportera la valeur à afficher. Et pour permettre de la retrouver, tu lui donnes une identité du type "valeur_ID".

Ensuite, lors de la réception, il suffira d'aller chercher la valeur du $POST avec comme identité "valeur_ID".
$resultat = ""; //On initialise la variable $resultat
foreach($_POST as $K=>$value){
    $substrOpt = substr($K,0,6);
    if($substrOpt=="radio_"){
          $optionId = str_replace("radio_","",$K);
          $prix_total_selection += $value;
          $resultat .= " ".$_POST["valeur_".$optionId]; //On ajoute la valeur de l'input hidden pour chaque passage grâce à la concaténation
    }
}
echo $resultat; //On affiche le tout
Voilà, je n'ai pas testé mais ça devrait ressembler à ça.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

R'edge
Invité n'ayant pas de compte PHPfrance

23 févr. 2016, 14:47

:priere: :priere: :priere: :priere:
Oh mon dieu du PHP, j'implore votre bonté =D> =D> =D>

Ca fonctionne nickel :D :D :D