2016-05-19 11 views
0

ich dieses Problem auf verschiedene Weise suchte, fand ich nichts ganz das gleiche gelöst. Bare mit mir, da ich zu mysql bin neu + phpINSERT mehrere Auswahl Arrays mit vorbereiteten Anweisungen

Meine DB enthält eine Tabelle ‚opening_days_hours‘ genannt:

CREATE TABLE IF NOT EXISTS opening_days_hours (
     ID_OpeningHours bigint(20) NOT NULL AUTO_INCREMENT, 
     ID_Address bigint(20) NOT NULL, 
     opening time NOT NULL, 
     closing time NOT NULL, 
     day  int(11) NOT NULL DEFAULT 0, 
     INDEX (ID_Address), 
     PRIMARY KEY (ID_OpeningHours), 
     CONSTRAINT FK_Addresses_OpeningHours 
     FOREIGN KEY (ID_Address) REFERENCES addresses(ID_Address) 
     ON DELETE CASCADE) ENGINE=InnoDB 

Jeden Tag enthält eine und nur eine ‚Öffnung‘ und ‚Schließen‘ Zeit.

Der ‚Tag‘ Spaltenwert wird von einem ‚Kontrollkästchen‘ Wert, erhält als

<input type="checkbox" id="sun" name="days[]" "<?php if (isset($days) && $days=="days") echo "checked"; ?>" value="1"> 
...same for mon, tue, wed, etc. 

während der Zeiten durch den Benutzer über eine ‚wählen‘ -Anweisung (Dropdown) weitergegeben werden.

Alles funktioniert gut, wenn ‚Öffnen‘ und ‚Schließen‘ Skalar (1 Wert) und ‚Tag‘ sind ein Array als ‚Tage []‘ definiert. Dazu habe ich eine vorbereitete Anweisung verwenden, wie:

$q = "INSERT INTO opening_days_hours 
        day, 
        opening, 
        closing 
        ID_Address 
        ) VALUES (?, ?, ?, ?)"; 

    $days = array(); 
    if(isset($_POST['days'])) { 
    $days = $_POST['days']; 
    } 

    mysqli_stmt_bind_param($stmt, 'issi', 
         $days, 
         $opening, 
         $closing, 
         $ID_Address 
         ); 

    foreach ($days as $one) { 
     mysqli_stmt_execute($stmt); 
    } 

Mit diesem Code, den ich einen Tag pro Zeile in der und und die Werte von $ Öffnung ‚Tag‘ genannt Spalte speichern und schließen $ für jeden gleich ist Tag.

ABER, wenn 'öffnen' und 'schließen' sind Arrays, wie 'Tag', Ich erhielt einen mysqli_stmt_execute Fehler ('Array zu String-Konvertierung') und nichts ist daher in der DB gespeichert.

habe ich eine Menge Tests mit unterschiedlichen Konstruktionen des Codes. Ich diagnostizierte das Problem, dass ich mysqli_stm_execute ($ stmt) mehr als ein Array nicht übergeben kann. Ich hatte keine Optionen mehr, um dieses Problem zu lösen.

Alle Lösungen, die ich bisher gefunden habe, speichern viele Werte in derselben Zeile, aber das will ich nicht. Ich muss tatsächlich eine Öffnungszeit und eine Schließzeit für jeden Tag speichern und jeden Tag in einer eigenen Zeile speichern.

Ich hoffe, dass das Problem klar.

Antwort

0

GELÖST:

I Schleife hatte die Bindung:

for ($i = 0; $i < count($days); ++$i) 
    { 
     mysqli_stmt_bind_param($stmt, "issi", 
           $days[$i], 
           $opening[$i], 
           $closing[$i], 
           $ID_Address 
         ); 

    mysqli_stmt_execute($stmt); 
} 

als stackoverflow explanation

in diesem vorhergehenden erklärt
Verwandte Themen