我想将数据插入两个表中。问题是,我的$ 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> <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";
}
?>
答案 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;