Bądź delikatny ze mną, jestem bardzo nowy do PHP i MySQL.
Próbuję wstawić i pobierać dane do iz MySQL za pomocą PDO. Oto formularz HTML, który wysyła dane do mojego PHP za pomocą postu

<FORM ACTION="index.php" METHOD=POST>

Update# : 
<INPUT TYPE=TEXT NAME="update_num" align="left" LENGTH=2 required >  
<P>

<P>
ETO     :
<INPUT TYPE=TEXT NAME="eto" LENGTH=30 >  
</P>    

<P>
CAD#    :
<INPUT TYPE=TEXT NAME="cad" LENGTH=30 >  
</P>    

<p>
CMS:
</p>
<h6>Hold Down control(CTRL) key to select multiple CMSs</h6>
<SELECT NAME = "cms[]" multiple>
<option></option>>
<option>#1</option>>
<option>#2</option>>
<option>#3</option>>
<option>#4</option>>
</SELECT>
</p>
<INPUT TYPE=SUBMIT VALUE="Submit Form" align="center">

</FORM>
</INPUT>

Zrobiłem modyfikacje zgodnie z tym postem z stackoverflow: Uzyskiwanie wszystkich $ _POST z wielu Wybierz wartość

Mój kod PHP wygląda tak:

$sql = "INSERT INTO dutypage (update_num, eto, cad, cms) VALUES (:update_num, :eto, :cad, :cms)";
$stmt = $conn->prepare($sql);

$stmt->bindParam(':update_num', $_POST['update_num']);
$stmt->bindParam(':eto', $_POST['eto']);
$stmt->bindParam(':cad', $_POST['cad']);
$stmt->bindParam(':cms', $_POST['cms']);

$stmt->execute(); 

Moje dane zostaną pomyślnie włożone, ale kolumna CMS teraz wyświetla tablicę

MYSQL screenshot

Używam poniższego kodu, aby pobrać dane

$query="SELECT cms FROM dutypage ORDER BY dateOf DESC";
$data=$conn->query($query);
$result = $data->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
foreach ($result as $output) {
    echo $output['cms'];
    echo "<br>";
}

I dostaję to tylko:

array(1) { [0]=> array(1) { ["cms"]=> string(5) "Array" } } Array

Czy moje wybrane opcje w formularzu faktycznie przekazywane do tablicy w MySQL?

0
Allen 15 luty 2017, 23:11

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ ustawisz CMS jako wiele wybierz formularz

<SELECT NAME = "cms[]" multiple>
<option></option>
<option>#1</option>
<option>#2</option>
<option>#3</option>
<option>#4</option>
</SELECT>

Wartość $_POST['cms'] będzie tablicą zawierającą wybrane wartości.

Możesz to zrobić:

1) W zależności od uruchomionego MySQL możesz skonfigurować kolumnę "CMS" do typu JSON i przechowywać wartość w formacie JSON

2) Możesz przechowywać wartość jako tekst i robić manipulacje po przeczytaniu wartości. (Niepolecane).

$stmt->bindParam(':cms', json_encode($_POST['cms']));

3) Możesz utworzyć nowy do wielu tabeli, która będzie zawierać aktualizację_num i CMS. Dla każdej wybranej wartości wykonaj nową wkładkę w tej tabeli

1
Martin 15 luty 2017, 20:27

PHP Trys tutaj, aby przekonwertować tablicę $ _Post ["CMS"] do łańcucha, co jest zasadniczo niemożliwe. Więc PHP Wyjście ciąg "Array".
Co polecam, aby zrobić, jeśli chcesz zapisać tablice do DBS, JSON kodować je za pomocą JSON_ENCODE Funkcja.
Więc BINDPARAM: CMS powinien wyglądać tak:
$stmt->bindParam(':cms', json_encode($_POST['cms']));
I otrzymać twoją tablicę przy pobraniu, po prostu użyj JSON_DECODE Funkcja na ciąg.

Miłego dnia.

1
Ad5001 15 luty 2017, 20:18