Выбор данных из двух таблиц, вставка их в новую таблицу?(SQL / PHP) - PullRequest
0 голосов
/ 29 января 2019

В течение нескольких дней я пробовал следующее: у меня есть HTML-форма.После получения данных (MENGE / PRODUKT / LIEFERANT) я хочу вставить данные в таблицу «bestellung».Для этого мне нужны две разные точки данных из двух разных таблиц: Waren_ID из таблицы WARE и kunde_lieferant_ID из таблицы kunde_lieferant.

Каждый раз, когда я пытаюсь это сделать, я получаю новую ошибку в любой форме (синтаксис, ...).Я прочитал десятки постов переполнения стека, но ни один не помог мне.Было бы здорово, если бы кто-нибудь дал мне подсказку: -)

<?php
$server="localhost";
$username="xy";
$passwort="xy";
$database="xy";
$conn=mysqli_connect($server, $username, $passwort, $database)
or die ("Fehler im System");


if (!empty($_POST["Lieferant"]) AND !empty ($_POST["Produkt"]) AND !empty ($_POST["Menge"]))
{

$Menge = $_POST ["Menge"];
$Produkt = $_POST["Produkt"];
$Lieferant = $_POST ["Lieferant"];


$sql="SELECT Waren_ID FROM ware WHERE Name='$Produkt'";
$speichern = mysqli_query($conn, $sql);
$rs = mysqli_fetch_array($speichern);
$Waren_ID=$rs['Waren_ID'];

$abfrage="SELECT kunde_lieferant_ID FROM kunde_lieferant WHERE Name='$Lieferant'";
$result = mysqli_query($conn, $abfrage);
$ts = mysqli_fetch_array($result);
$kunde_lieferant_ID=$ts['kunde_lieferant_ID'];


$final="INSERT INTO bestellung (Menge, Waren_ID, kunde_lieferant_ID) values ($Menge, $Waren_ID, $kunde_lieferant_ID)";
$ende=mysqli_query($conn, $final)
or die ("Fehlgeschlagen: SQL-Error:" . mysqli_error($conn));
}

mysqli_close($conn);
?>

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Одна потенциальная проблема в вашем операторе вставки заключается в том, что вы не заключаете в одинарные кавычки значения, которые вы передаете: в MySQL это означает, что все они числовые (но является ли, например, «Menge» числовым?).

Чтобы избежать этого, а также предотвратить внедрение кода в SQL, вам, вероятно, следует использовать параметризованные запросы.

Если взглянуть на ваш код более глобально, я думаю, что вы сможете достичь того, чего хотите, водин оператор INSERT ... SELECT, например:

INSERT INTO bestellung
SELECT
    :menge, 
    w.Waren_ID, 
    k.kunde_lieferant_ID
FROM
    ware w
    INNER JOIN kunde_lieferant k
        ON k.Name = :lieferant
WHERE w.Name = :produkt
0 голосов
/ 29 января 2019

Добавьте MYSQLI_ASSOC в качестве второго аргумента для mysqli_fetch_array(), чтобы использовать имя ключа вместо целого индекса:

$rs = mysqli_fetch_array($speichern); становится $rs = mysqli_fetch_array($speichern, MYSQLI_ASSOC);

и

$ts = mysqli_fetch_array($result); становится $ts = mysqli_fetch_array($result, MYSQLI_ASSOC);

Вы также можете использовать $rs = mysqli_fetch_assoc($speichern); и $rs = mysqli_fetch_assoc($speichern); для доступа к ассоциативному массиву по имени ключа вместо индекса.

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