Enregistrez plusieurs valeurs de case à cocher et différentes valeurs d'entrée dans leur ensemble dans la base de données
P粉807471604
P粉807471604 2023-08-31 11:17:47
0
1
505
<p>J'essaie d'insérer des données/valeurs dans ma base de données. </p> <p>Cela fonctionne, mais le problème est que chaque fois que je sélectionne uniquement la deuxième valeur/case à cocher, ses autres valeurs d'entrée obtiennent la valeur de la première entrée. </p> <pre class="brush:php;toolbar:false;"><form action="{{url('/reservation')}}" method="post"> @csrf <div class="ligne col-12"> <div> <p class='mybox text-dark'><input type="checkbox" nom="prod_name[]" value="JasminBooks"/>JasminBooks</p> </div> <div> <type d'entrée="numéro" nom="qté_prod[]" min="1" valeur="1"classe="contrôle de formulaire ml-2"" </div> <div class="ligne col-12"> <div> <p class='mybox text-dark'><input type="checkbox" nom="prod_name[]" value="KnowHowBooks"/>KnowHowBooks</p> </div> <div> <type d'entrée="numéro" nom="qté_prod[]" min="1" valeur="1"classe="contrôle de formulaire ml-2"> </div> </div> </form></pre> <p>Voici le code de la fonction de mon contrôleur</p> <pre class="brush:php;toolbar:false;">réservation de fonction publique (Request $request) { $data = nouvelle réservation ; $data->nom = $request->nom; $data->email = $request->email; $data->téléphone = $request->téléphone ; $data->adresse = $request->adresse; $data->date = $request->date; $data->heure = $request->heure; $produits = nul ; $checked_array = $_POST['nom_prod']; foreach($_POST['prod_name'] as $key => $value) { if (in_array($_POST['prod_name'][$key], $checked_array)) { $products .= $_POST['prod_qty'][$key]." ".$_POST['prod_name'][$key].", "; } } $data->produits = $produits; $data->save(); return redirect()->back(); }</pré> <p>Quand</p> <ol> <li>Lorsque je coche la première case et saisis une valeur de 5, le résultat est « 5 JasminBooks »,</p><p></li> <li>Lorsque je coche les deux cases et saisis la quantité 12 dans la première zone de saisie à côté de la première case à cocher et la deuxième zone de saisie à côté de la deuxième case à cocher. Lorsque la quantité est 7, le résultat est "12 JasminBooks, 7 KnowHowBooks, "</li> <li>Mais lorsque je coche uniquement la deuxième case et saisis 13 dans la zone de saisie de la quantité, le résultat est "1 KnowHowBooks", qui prend la valeur par défaut saisie dans la première au lieu de celle que j'ai saisie dans la seconde. Insérez la quantité 13 dans la zone de saisie. ≪/li> </ol> <p>Que dois-je ajouter/modifier dans mon code ? </p>
P粉807471604
P粉807471604

répondre à tous(1)
P粉587780103

C'est parce que vous définissez votre champ de quantité en fonction de l'index. Si une entrée manque, cela peut affecter l’ensemble de vos résultats. Utilisez des valeurs comme clés :

HTML :

<div>
    <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="JasminBooks"/>JasminBooks
    </p></div><div>
    <input type="number" name="prod_qty[JasminBooks]" min="1" value="1"class="form-control ml-2">
</div>

PHP :

$products = '';
$checked_array = $request->input('prod_name', []);
$quantities = $request->input('prod_qty', []);

foreach ($checked_array as $value) {
    if (array_key_exists($value, $quantities)) {
        $products .= "{$quantities[$value]} {$value}, ";
    }
}

// 移除末尾的 ', '
if (! empty($products)) {
    $products = substr($products, 0, -2);
} 

$data->products = $products;

P.S. Comme Bhaumik l'a dit, n'utilisez pas $_POST dans Laravel.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal