如何将数据插入两个表

时间:2019-04-11 22:20:43

标签: php mysql sql database post

我想将数据插入两个表中。问题是,我的$ sql变量实际上并没有我想象的那样。

如果我只想在帖子文件中说:

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

并删除new_post文件中的$ sql变量

$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 :(得分:0)

这实际上是一个非常简单的问题。使用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)-如果可以避免,最好不要使用多查询。< / p>

答案 1 :(得分:-1)

$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;