Несколько текстовых вводов в базу данных MySQL - PullRequest
2 голосов
/ 23 апреля 2011

В моем файле HTML есть следующие данные для ввода в следующем формате.

Stuff1,Stuff2,Stuff3,Stuff4 

<form action="process_form.php" method="post">
    <form>
     Part 1: <input type="text" name="p1" /><br />
     Part 2: <input type="text" name="p2" /><br />
     Part 3: <input type="text" name="p3" /><br />
     Part 4: <input type="text" name="p4" /><br />
     Part 5: <input type="text" name="p5" /><br />
     Part 6: <input type="text" name="p6" /><br />
     Part 7: <input type="text" name="p7" /><br />
     Part 8: <input type="text" name="p8" /><br />
     Part 9: <input type="text" name="p9" /><br />
     Part 10: <input type="text" name="10" /><br />
    </form>

    <input type="submit" name="formSubmit" value="Submit" />

</form>

Оттуда я использую explode в своем php-файле, чтобы отделить запятую и создать массив из моей строки.

$create_table1 = "create table parts(qty int(5) NOT NULL,
partID int(5) NOT NULL PRIMARY KEY,
partname varchar(25) NOT NULL,
price int(5) NOT NULL
)";

     $p1_boom = explode(",",$p1); 
     $p2_boom = explode(",",$p2);
     $p3_boom = explode(",",$p3);
     $p4_boom = explode(",",$p4);
     $p5_boom = explode(",",$p5);
     $p6_boom = explode(",",$p6);
     $p7_boom = explode(",",$p7);
     $p8_boom = explode(",",$p8);
     $p9_boom = explode(",",$p9);
     $p10_boom = explode(",",$p10);

Теперь я пытаюсь ввести каждый набор данных в отдельной строке таблицы. Например, все части P1 идут в первой строке таблицы, все части P2 идут в следующей строке таблицы и т. Д. Заранее спасибо за помощь и дайте мне знать, если вам нужна дополнительная информация! 1008 *

Ответы [ 3 ]

0 голосов
/ 23 апреля 2011

Хотите, чтобы таблица создала код? Я собираюсь предположить, что каждая часть является ТЕКСТОМ, потому что вы не указали .... иначе измените типы. Затем есть код для построения запросов.

<?php

//find maximum length of $p_booms and the booms
$p_booms = array();
$pb_lengths = array();
for($i = 1; $i <= 10; $i++) {
    $p_booms[] = explode(",", $_POST["p$i"]); //not sanitized! (yet)
    $pb_lengths[] = count($pb_booms[$i]);
}
$pmax = max($pb_lengths);


//create the table with the maximum width
$create_table = "
    CREATE TABLE parts (
    partID INT(5) NOT NULL PRIMARY KEY";

for($i = 0; $i < $pmax; $i++) {
    $create_table .= ", p$i TEXT DEFAULT NULL";
}
$create_table .= ");";
$mysqli->query($create_table);


//then insert the values by building a query
//I am assuming partID is the p1, p2, p3 becomes 1, 2, 3 respectively
foreach($p_booms as $id => $boom) {
    $query = "INSERT INTO parts SET partID=$id";
    foreach($boom as $i => $part) {
        $part = $mysqli->real_escape_string($part); //yay sanitized!
        $query .= ", p$i = '$part'";
    }
    $mysqli->query($query);
}

Приветствия

0 голосов
/ 23 апреля 2011

Используйте функцию serialize().

$p10_boom = explode(",",$p10);
$p10_boom_serial = serialize( $p10_boom );

Это производит что-то вроде:

a:4:{i:0;s:6:"Stuff1";i:1;s:6:"Stuff2";i:2;s:6:"Stuff3";i:3;s:6:"Stuff4";}

Просто избегайте этой строки, когда сохраняете ее в своей БД.

Теперь любое поле, которое вы собираетесь использовать для своих данных, должно быть текстовым или длинным полем VARCHAR.

Если вам нужно получить значение и вам нужно превратить его обратно в массив, используйте unserialize(). Вы можете преобразовать его обратно в строку, используя join() или implode()

0 голосов
/ 23 апреля 2011

Вы не сможете вставить массив в поле. Вам придется либо оставить его в виде строки, либо сериализовать / json_encode массива перед вставкой. Вставка строк ничем не отличается от вставки любых фрагментов данных.

$db = new PDO(/*connection info*/);
$stmt = $db-prepare('insert into tableName(myColumn) values(?)');
// Just loop throw the data with...
$stmt->execute(array($stringToInsert));
...