Вставьте массив в MySQL с PHP - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть форма PHP с 3 полями name, date, school. С ними связаны до 40 college, coursetitle, coursenumber с.

Я хочу, чтобы SQL вставки был:

INSERT INTO _some_table_
  (name, date, school, college, coursetitle, coursenumber) 
VALUES
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000),
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000),
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000),
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000),
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000),
  (foo, 2011-12-23, UCLA, BizSchool, Accounting, XXX0000);

и т.д.. и я не хочу включать строки, где coursetitle пусто. Мне тяжело с массивом!

Ответы [ 3 ]

0 голосов
/ 23 декабря 2011

Если вы используете MySQLI, это может быть что-то вроде этого:

<?php
$mysqli = new Mysqli('localhost','root','pass','db');

$stmt = $mysqli->prepare('INSERT INTO _some_table(name, date, school, college, coursetitle, coursenumber) VALUES(?, ?, ?, ?, ?, ?)');

/**
 * ITERATE VALUES, EACH KEY IN ARRAY CORRESPONDS TO A NEW ROW, THAT HAS TO BE INSERTED.
 */
foreach($values as $arr) {
    if (!empty($arr['coursetitle'])) {
        extract($arr);
        /*
         * BIND THE VALUES TO BE INSERTED TO THE STATEMENT
         */
        $stmt->bind_param('ssssss', $name, $date, $school, $college, $coursetitle, $coursenumber);
        $stmt->execute(); // Execute statement
    }
}

$stmt->close();
$mysqli->close();
?>

этот курс предполагает, что вы используете ассоциативный массив с ключами, равными именам столбцов.

Подробнее о подготовленных высказываниях можно прочитать здесь

0 голосов
/ 23 декабря 2011

У вас просто проблемы с получением массива POST?Когда вы пишете HTML, вы можете сделать что-то вроде:

<table>
    <tr>
        <td>Course: </td><td><input type="text" name="coursetitle[]" value="" /></td>
    </tr>        
    <tr>
        <td>Course Number: </td><td><input type="text" name="coursenum[]" value="" /></td>
    </tr>
    <tr>
        <td colspan="3"><h3>Add Another:</h3></td>
    </tr>
    <tr>
        <td>College: </td><td><input type="text" name="college[]" value="" /></td>
    </tr>
    <tr>
        <td>Course: </td><td><input type="text" name="coursetitle[]" value="" /></td>
    </tr>        
    <tr>
        <td>Course Number: </td><td><input type="text" name="coursenum[]" value="" /></td>
    </tr>
    <tr>
        <td>College: </td><td><input type="text" name="college[]" value="" /></td>
    </tr>
</table>

И вы можете сделать столько, сколько хотите. Затем обработайте это с помощью PHP следующим образом:

$i = 0;
$complete = 0;
$query = "INSERT INTO TABLE (name, date, school, college, coursetitle, coursenumber) VALUES ";
foreach($_POST['coursetitle'] AS $course) {
    $title = trim($course);
    if (!empty($title)) {
        $college = trim($_POST['college'][$i]);
        $num = trim($_POST['coursenum'][$i]);
        $query .= "('foo', '" . date("Y-m-d") . "', 'UCLA' '{$college}', '{$title}', '{$num}'),";
    $complete++;
    }

    $i++;
}

$query = substring($query, 0, strlen($query) - 1); // Removes last comma from query
if ($complete == 0) {
    echo "No colleges were posted, or none of the course titles were completed.";
    exit;
} else {
    $query .= ";";
    mysql_query($query);
}

Иличто-то в этом роде:)

0 голосов
/ 23 декабря 2011

Если вы хотите сделать это как массив, вы должны вместо этого смешать его с сессией, чтобы сессия содержала значения вашего массива.Таким образом, вставка запроса будет внутри вашего цикла.

Вы можете скопировать свой код?Или вы хотите, чтобы я закодировал пример?Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...