Plusieurs résultats dans une seule variable ?

Petit nouveau ! | 1 Messages

18 oct. 2016, 19:09

Bonsoir,

Je souhaite faire un système de vente qui sélectionne plusieurs résultats parmi les sélectionnés de la commande MySQL, suivant la quantité choisie par le client.

Je n'arrive pas à avoir plusieurs résultats différents pour $cle car celui-ci est toujours remplacé par le dernier while, normal..
$request = $db->prepare('SELECT * FROM keys WHERE vendue = 0 LIMIT :nbClef');
$updateVendue = $db->prepare('UPDATE keys SET vendue = 1, transaction_id = :transaction WHERE cle = :clef');
$request->bindValue(':nbClef', $Offres['nb_cles'], PDO::PARAM_INT);
$request->execute();
  
while ($data = $request->fetch(PDO::FETCH_ASSOC)) {
    $updateVendue->bindValue(':transaction', $transactionID, PDO::PARAM_INT);
    $updateVendue->bindValue(':clef', $data['cle'], PDO::PARAM_INT);
    $updateVendue->execute();<br>$cle = ''.$k['cle'].' - '.$k['nom'].'<br>'<br>}
J'ai essayé comme cela, non fonctionnel :
while ($data = $request->fetch(PDO::FETCH_ASSOC)) {
    $updateVendue->bindValue(':transaction', $transactionID, PDO::PARAM_INT);
    $updateVendue->bindValue(':clef', $data['cle'], PDO::PARAM_INT);
    $updateVendue->execute();
 
for($cle=1; $cle <= $Offres['nb_cles']; $cle++) {
$cle = '• '.$k['cle'].' ('.$k['nom'].')';
}
}
$_SESSION['Cle1'] = $cle; // CLE1, communiquée par le 1er while
$_SESSION['Cle2'] = $cle; // CLE2, communiquée par le 2eme while
$_SESSION['Cle3'] = $cle; // CLE3, communiquée par le 3eme while
$_SESSION['Cle4'] = $cle; // CLEX, communiquée par le Xer while
// Etc...
  
// Plusieurs $messageX car plusieurs parties composées suivant des IF.
mail($email, $subject, $message1.$message2.$cle.$message4, $headers);
En gros, pour ceux qui n'ont pas compris :
Un while se fait.
Chaque while donne un résultat différent.

Je souhaite récupérer les données de chaque while, mais actuellement, chaque while écrasent le précédent, donc seul le dernier est en vie et m'est affiché.


Je vous remercie !

Mammouth du PHP | 2703 Messages

18 oct. 2016, 19:57

un tableau :
$cle[] = '• '.$k['cle'].' ('.$k['nom'].')';

Mammouth du PHP | 1967 Messages

19 oct. 2016, 09:02

Je trouve bizarre que tu utilise $cle comme incrément dans ton for et comme variable à remplir à chaque occurence.
De plus tu écrase cette valeur à chaque itération.

la structure en générale est bizarre, je pense que si tu mets ton insertion en SESSION dans ton while plutot qu'après ce sera déjà mieux. tu peux avoir un indice dans ta session en fonction de ta boucle pour avoir cle1, cle2, ...
en plus, je mettrai un opérateur de concaténation dans le for
$compteur = 1;
$cle = '';//définition de clé pour éviter les NOTICE
while ($data = $request->fetch(PDO::FETCH_ASSOC)) {
    $updateVendue->bindValue(':transaction', $transactionID, PDO::PARAM_INT);
    $updateVendue->bindValue(':clef', $data['cle'], PDO::PARAM_INT);
    $updateVendue->execute();
 
for($i=1; $i <= $Offres['nb_cles']; $i++) {
$cle .= '• '.$k['cle'].' ('.$k['nom'].')';//:e point avant le = est l'opérateur de concaténation dont je parlais
}
$_SESSION['Cle'.$compteur] = $cle;
$compteur++;
mail($email, $subject, $message1.$message2.$cle.$message4, $headers);
}
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube