Heim  >  Fragen und Antworten  >  Hauptteil

Speichern Sie mehrere Kontrollkästchenwerte und verschiedene Eingabewerte als Ganzes in der Datenbank

<p>Ich versuche, Daten/Werte in meine Datenbank einzufügen. </p> <p>Es funktioniert, aber das Problem ist, dass jedes Mal, wenn ich nur den zweiten Wert/das zweite Kontrollkästchen auswähle, seine anderen Eingabewerte den Wert der ersten Eingabe erhalten. </p> <pre class="brush:php;toolbar:false;"><form action="{{url('/reservation')}}" @csrf <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" </div> <div> <input type="number" name="prod_qty[]" min="1" value="form-control ml-2" </div> <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" </div> <div> <input type="number" name="prod_qty[]" min="1" value="form-control ml-2" </div> </div> </form></pre> <p>Dies ist der Code für meine Controller-Funktion</p> <pre class="brush:php;toolbar:false;">öffentliche Funktionsreservierung (Request $request) { $data = neue Reservierung; $data->name = $request->name; $data->email = $request->email; $data->phone = $request->phone; $data->address = $request->address; $data->date = $request->date; $data->time = $request->time; $products = null; $checked_array = $_POST['prod_name']; 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->products = $products; $data->save(); Return Redirect()->back(); }</pre> <p>Wenn</p> <ol> <li>Wenn ich das erste Kontrollkästchen aktiviere und einen Wert von 5 eingebe, ist das Ergebnis „5 JasminBooks“.</p><p></li> <li>Wenn ich beide Checkboxen anwähle und im ersten Eingabefeld neben der ersten Checkbox und im zweiten Eingabefeld neben der zweiten Checkbox die Menge 12 eingebe. Wenn die Menge 7 ist, ist das Ergebnis „12 JasminBooks, 7 KnowHowBooks, " </li> <li>Aber wenn ich nur das zweite Kontrollkästchen auswähle und 13 in das Mengeneingabefeld eingebe, ist das Ergebnis „1 KnowHowBooks“, das den im ersten eingegebenen Standardwert annimmt, anstatt den, den ich im zweiten eingegeben habe. Geben Sie die Menge 13 ein in das Eingabefeld ein. </li> </ol> <p>Was sollte ich in meinem Code hinzufügen/ändern? </p>
P粉807471604P粉807471604438 Tage vor494

Antworte allen(1)Ich werde antworten

  • P粉587780103

    P粉5877801032023-09-01 09:44:11

    这是因为你是根据索引来定义你的数量字段的。如果一个输入缺失,可能会影响你的整个结果。使用值作为键:

    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. 像 Bhaumik 说的那样,在 Laravel 中不要使用 $_POST

    Antwort
    0
  • StornierenAntwort