Как вставить данные в две таблицы - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу вставить данные в две таблицы.Проблема в том, что мои переменные $ sql на самом деле не работают так, как я себе представлял ..

Если бы я просто сказал это в файле posts:

$sql ="SELECT * FROM beitrag ORDER BY beitrag_id DESC"; 

и удалил эту переменную $ sqlв файле new_post

$sql .= " INSERT INTO leistungen (leistung_text, leistung_warenbezugsort, leistung_kosten) 
VALUES ('$leistung_text', '$leistung_warenbezugsort', '$leistung_kosten')";

данные "beitrag" будут отображаться в моих сообщениях, но данные "leistungen" не будут вставляться в мою базу данных и также не будут отображаться в моих сообщениях ...

         //this is the new_post file
<?php
    if(isset($_POST['senden'])) {
        $titel = strip_tags($_POST['titel']);
        $p_text= strip_tags($_POST['p_text']);
        $leistung_text = strip_tags($_POST['leistung_text']);
        $leistung_warenbezugsort = strip_tags($_POST['leistung_warenbezugsort']);
        $leistung_kosten = strip_tags($_POST['leistung_kosten']);

        $titel = mysqli_real_escape_string($db, $titel);
        $p_text = mysqli_real_escape_string($db, $p_text);
        $leistung_text = mysqli_real_escape_string($db, $leistung_text);
        $leistung_warenbezugsort = mysqli_real_escape_string($db, $leistung_warenbezugsort);
        $leistung_kosten = mysqli_real_escape_string($db, $leistung_kosten);

        $sql = " INSERT INTO beitrag (titel, p_text) VALUES('$titel', '$p_text')";

        $sql .= " INSERT INTO leistungen (leistung_text, leistung_warenbezugsort, leistung_kosten) VALUES ('$leistung_text', '$leistung_warenbezugsort', '$leistung_kosten')";




        if($titel == "" || $p_text == "" || $leistung_text = "" || $leistung_warenbezugsort = "" || $leistung_kosten = "") {
            echo "Bitte Beitrag vervollstaendigen!";
            return;
        }

        mysqli_multi_query($db, $sql);

        header ("Location: beitraege.php");

    }

?>

//this is the posts file

<?php

$sql ="SELECT * FROM beitrag INNER JOIN leistungen ON beitrag.beitrag_id = leistungen.beitrag_id ORDER BY beitrag.beitrag_id DESC";

$res = mysqli_query($db, $sql) or die(mysqli_error());

$beitrag = "";

if(mysqli_num_rows($res) > 0) {
    while($row =mysqli_fetch_assoc($res)){
        $beitrag_id = $row['beitrag_id'];
        $titel = $row['titel'];
        $p_text = $row['p_text'];
        $leistung_id = $row['leistung_id'];
        $leistung_text = $row['leistung_text'];
        $leistung_warenbezugsort = $row['leistung_warenbezugsort'];
        $leistung_kosten = $row['leistung_kosten'];

        if (isset($_SESSION["login"])){ 
                if($_SESSION["login"] == 1){
                    echo "<div><a href='löschen_beitrag.php?pid=$beitrag_id'>löschen</a>&nbsp;<a href='bearbeiten_beitrag.php?pid=$beitrag_id'>bearbeiten</a></div>";
                    }else{
                    echo "";
                }
            }

        $beitrag .= "<div><h2><a href='siehe_post.php?pid=$beitrag_id'>$titel</a></h2><p>$p_text</p></div";
    }
    echo $beitrag;
} else {
    echo "Keine Beiträge vorhanden";
}
?>

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019
$sql = "INSERT INTO beitrag (titel, p_text) VALUES(".$titel.",".$p_text.");";

$sql .= " INSERT INTO leistungen (leistung_text, leistung_warenbezugsort, leistung_kosten) VALUES (".$leistung_text.",". $leistung_warenbezugsort. ",".$leistung_kosten.");";

это должен быть ваш запрос ..... Вы помещаете переменные в кавычки, и поэтому они не работают. Переменные должны быть заключены в кавычки и заключены в строку с точкой ".";

пример:


echo "hello" . $a;
0 голосов
/ 12 апреля 2019

Это на самом деле очень простая проблема. При использовании mysqli_multi_query запросы должны быть разделены точками с запятой. Конечно, у вас есть точки с запятой в конце каждой строки, но они находятся вне строк и предназначены для PHP, а не для вашего SQL.

Просто добавьте точку с запятой в конец вашей первой строки SQL:

 $sql = " INSERT INTO beitrag (titel, p_text) VALUES('$titel', '$p_text');";

Кроме того, как отмечает комментатор, SQL-инъекции являются проблемой. Вы избегаете этой проблемы, экранируя все свои строки с помощью mysqli_real_escape_string, но этот способ действий довольно подвержен ошибкам - если вы забудете экранировать одну из строк, используемых в запросе, ваш код уязвим. mysqli_multi_query не поддерживает более простой и разумный способ избежать SQL-инъекций, который использует подготовленные операторы (см. mysqli_prepare) - вам, вероятно, лучше не использовать несколько запросов, если вы можете избежать этого .

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