【问题标题】:Insert into 2 tables with one form with 2 sql statements not working用一种形式插入 2 个表,其中 2 个 sql 语句不起作用
【发布时间】:2026-02-16 12:25:01
【问题描述】:

我正在尝试从一个表单一次插入 2 个表格。
表 #1=bath_orders
表 #2= 客户
我显然正在尝试同时建立一个电子邮件列表。

PHP 跳过第一个 INSERT INTO 命令并跳转到第二个并继续执行页面上的其余代码。

每次执行时,我都会在错误日志文件中发现以下几个错误:

PHP注意:未定义变量:上线

我搜索了该主题,发现大多数情况下人们都错误地尝试了

$sql = "INSERT INTO bath_orders, customers ...." 

但在我的代码中并非如此。
我的代码如下:

<?php
$servername = "localhost";
$username = "my_user_name";
$password = "my_password";
$dbname = "my_database";

//  connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check 
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

if(isset($_POST['submit'])){


$fname = mysqli_real_escape_string($conn, $_POST['fname']);
$lname = mysqli_real_escape_string($conn, $_POST['lname']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$phone = mysqli_real_escape_string($conn, $_POST['phone']);
$custaddress = mysqli_real_escape_string($conn, $_POST['custaddress']);
$city = mysqli_real_escape_string($conn, $_POST['city']);
$state = mysqli_real_escape_string($conn, $_POST['state']);
$zip = mysqli_real_escape_string($conn, $_POST['zip']);
$pic1 = mysqli_real_escape_string($conn, $_POST['pic1']);
$pic2 = mysqli_real_escape_string($conn, $_POST['pic2']);
$pic3 = mysqli_real_escape_string($conn, $_POST['pic3']);
$startdate = mysqli_real_escape_string($conn, $_POST['startdate']);
$walltiledemo = mysqli_real_escape_string($conn, $_POST['walltiledemo']);
$walltile = mysqli_real_escape_string($conn, $_POST['walltile']);
$otherwalltile = mysqli_real_escape_string($conn, $_POST['otherwalltile']);
$otherwalltileh = mysqli_real_escape_string($conn, $_POST['otherwalltileh']);
$otherwalltilew = mysqli_real_escape_string($conn, $_POST['otherwalltilew']);
$walltileinst = mysqli_real_escape_string($conn, $_POST['walltileinst']);
$pandemo = mysqli_real_escape_string($conn, $_POST['pandemo']);
$paninst = mysqli_real_escape_string($conn, $_POST['paninst']);
$flrtileinst = mysqli_real_escape_string($conn, $_POST['flrtileinst']);
$flrtile = mysqli_real_escape_string($conn, $_POST['flrtile']);
$otherflrtile = mysqli_real_escape_string($conn, $_POST['otherflrtile']);
$tub = mysqli_real_escape_string($conn, $_POST['tub']);
$newtub = mysqli_real_escape_string($conn, $_POST['newtub']);
$othertub = mysqli_real_escape_string($conn, $_POST['othertub']);
$door = mysqli_real_escape_string($conn, $_POST['door']);
$newdoor = mysqli_real_escape_string($conn, $_POST['newdoor']);
$otherdoor = mysqli_real_escape_string($conn, $_POST['otherdoor']);
$floortiledemo = mysqli_real_escape_string($conn, $_POST['floortiledemo']);
$floortileinst = mysqli_real_escape_string($conn, $_POST['floortileinst']);
$floortile = mysqli_real_escape_string($conn, $_POST['floortile']);
$otherfloortile = mysqli_real_escape_string($conn, $_POST['otherfloortile']);
$otherfloortileh = mysqli_real_escape_string($conn, $_POST['otherfloortileh']);
$otherfloortilew = mysqli_real_escape_string($conn, $_POST['otherfloortilew']);
$vanity = mysqli_real_escape_string($conn, $_POST['vanity']);
$newvanity = mysqli_real_escape_string($conn, $_POST['newvanity']);
$othervanity = mysqli_real_escape_string($conn, $_POST['othervanity']);




$sql = "INSERT INTO bath_orders (firstname, lastname, email, phone , custaddress , city , state , zip , pic1 , pic2 , pic3 ,  startdate , walltiledemo , walltile , otherwalltile , otherwalltileh , otherwalltilew , walltileinst , pandemo , paninst , flrtileinst , flrtile , otherflrtile , tub , newtub , othertub , door , newdoor , otherdoor , floortiledemo , floortileinst , floortile , otherfloortile , otherfloortileh , otherfloortilew , vanity , newvanity , othervanity)
VALUES ('$fname', '$lname', '$email', '$phone', '$custaddress' , '$city' , '$state' , '$zip' , '$pic1' , '$pic2' , '$pic3' , '$startdate' , '$walltiledemo' , '$walltile' , '$otherwalltile' , '$otherwalltileh' , '$otherwalltilew' , '$walltileinst' , '$pandemo' , '$paninst' , '$flrtileinst' , '$flrtile' , '$otherflrtile' , '$tub'  , '$newtub' , '$othertub' , '$door' , '$newdoor' , '$otherdoor' , '$floortiledemo' , '$floortileinst' , '$floortile' , '$otherfloortile' , '$otherfloortileh' , '$otherfloortilew' , '$vanity' , '$newvanity' , '$othervanity' )";

$sql = "INSERT INTO customers (fname, lname, email, phone , custaddress , city , state , zip , comments )
VALUES ('$fname', '$lname', '$email', '$phone', '$custaddress' , '$city' , '$state' , '$zip' , '$comments')";

我已经研究过这个主题但是..我不明白我做错了什么。
它说要执行 2 个单独的 INSERT INTO 语句,我认为这就是我正在做的事情。
有人可以帮我理解 2 个单独的语句应该是什么样子。
TYIA

这是一个小提琴的链接

https://jsfiddle.net/fiveonadub/836n4ycf/2/

【问题讨论】:

  • 我想我已经发现我得到的 PHP 错误是由于在提交时没有在表单中的这些字段中输入任何值。如果有人选择不输入值,我该如何避免这些错误?
  • "PHP 注意:未定义变量:在线" 哪个变量,在哪一行?它有没有提到这一点?

标签: php mysql sql mysqli


【解决方案1】:

您需要用户mysqli_query()mysqli_query() 函数对数据库执行查询。

将第一个查询存储在$sql1,第二个存储在$sql2

mysqli_query($conn, $sql1); mysqli_query($conn, $sql2);

【讨论】:

  • 我已经尝试了几种不同的方法来实施您的建议,但对我来说没有任何效果。我一定不是很清楚。
  • 请在上面的问题中添加您的&lt;form&gt; 代码,这将帮助我在我的电脑上产生相同的错误
  • 格鲁,谢谢。我编辑了我的原始帖子,在底部包含一个指向小提琴的链接。
【解决方案2】:

我不明白你的 php 如何跳过第一个 INSERT INTO 命令并跳转到第二个。你没有使用 mysqli_query() 函数来处理其中的任何一个。将这 2 个查询的输出存储到 2 个不同的变量中,然后将该变量作为参数传递给 mysqli_query()。然后只有你的查询会被执行。

-谢谢,

【讨论】:

    【解决方案3】:

    这里有两件事似乎出了问题。

    首先,简单地将一个看起来像 sql 的字符串分配给一个变量并不能让它在服务器上执行 sql,你需要调用一些方法或函数来实现它。

    其次,我只知道这一点,因为我快速将您的代码复制/粘贴到 IDE 中,但未定义 $cmets 变量。

    【讨论】:

    • 此外,我相信您的代码可以极大地受益于诸如 PDO 之类的东西,也许还有表单库。由于似乎所有值都被转义并且似乎使用了正确的引用,因此它不会直接面临 sql 注入的风险,但它是相当大的。