На моей странице мы определяем новое блюдо по имени, размеру порции, стоимости и т. Д. Ниже у нас есть таблица, в которой вы выбираете из ранее определенного списка ингредиентов (другая таблица MySQL), которые должны быть назначены блюду, а также назначаете необходимое количество.

В первой части DishID генерируется автоматически (автоматически увеличивается) при отправке с использованием триггера на стороне сервера. Это успешно вставит часть «Блюда».

Вторая часть - это место, где он падает. Я хочу опубликовать новые DishID, IngID и Volume в своей таблице базы данных, что он и делает, но оставляет мой DishID пустым. В настоящее время я использую оператор Select MAX, чтобы он вводил последнюю запись, это может быть не идеально, но я не думаю, что это причина, по которой он не работает, поскольку даже запись указанного оператора для определенного идентификатора возвращает пустое значение - следовательно, это должно быть что-то вроде написания моего кода.

require_once('db_connect.php');

            $DishName = mysqli_real_escape_string($con, $_POST['DishName']);
            $DishCatID = mysqli_real_escape_string($con, $_POST['DishCatID']);
            $Serving = mysqli_real_escape_string($con, $_POST['Serving']);
            $SRP = mysqli_real_escape_string($con, $_POST['SRP']);
            $Method = mysqli_real_escape_string($con, $_POST['Method']);
            $SourceID = mysqli_real_escape_string($con, $_POST['SourceID']);

            $sql="INSERT INTO Dishes (DishName, DishCatID, Serving, SRP, Method, SourceID)
                  VALUES ('$DishName', '$DishCatID', '$Serving', '$SRP', '$Method', '$SourceID')";
            mysqli_query($con, $sql) or die(mysqli_error($con));

            $DishID = 'SELECT MAX(DishID) FROM Dishes';
                        $result=mysqli_query($con, $DishID) or die ("Query to get DishID failed: ".mysqli_error($con));

            $array = array('$DishID'=>(mysql_query($GetDishID)),'$IngID'=>($_POST['IngID[]']),'$Volume'=>($_POST['Volume[]']) );

            $values = array();
            foreach ($_POST['IngID'] as $i => $ingID) {
                if (!empty($ingID)) {
                    $ingID = mysqli_real_escape_string($con, $ingID);
                    $volume = mysqli_real_escape_string($con, $_POST['Volume'][$i]);
                    $values[] = "('$DishID', '$ingID', '$volume')";
                }
            }
            if (!empty($values)) {
                $sql2 = 'INSERT INTO DishIng (DishID, IngID, Volume) VALUES ' . implode(', ', $values);
                mysqli_query($con, $sql2) or die(mysqli_error($con));
            }


                require_once('db_disconnect.php');

Что я здесь делаю не так?

0
fernalonso 24 Окт 2014 в 19:06

2 ответа

Лучший ответ

Ознакомьтесь с mysqli_insert_id. Он вернет автоматически сгенерированный идентификатор, используемый в последнем запросе.

$DishID = mysqli_insert_id($con);
0
slapyo 24 Окт 2014 в 15:17

Вам необходимо получить идентификатор вставки через mysqli_insert_id() как следующее, что вы сделаете с этим соединением с базой данных после вашего первоначального оператора вставки. Это должно выглядеть так:

$sql="INSERT INTO Dishes (DishName, DishCatID, Serving, SRP, Method, SourceID)
      VALUES ('$DishName', '$DishCatID', '$Serving', '$SRP', '$Method', '$SourceID')";
mysqli_query($con, $sql) or die(mysqli_error($con));
// get inserted row id
$insertID = mysqli_insert_id($con);

Это, конечно, предполагает, что ваше поле идентификатора блюда является полем автоинкремента.

У вас также есть вызов функции mysql_query() ниже в вашем коде, который следует изменить на mysqli.

0
Mike Brant 24 Окт 2014 в 17:37