php/ mysql - 发送多个数据到 MySQL
php/ mysql - Sending multiple data to MySQL
我正在尝试将信息存储在 MySQL 中,并 运行 成为一个问题。只有 'name' 存储在 MySQL 中,即使我试图同时存储名称和总数。我尝试使用电子邮件而不是总计,但它仍然没有存储,这告诉我这不是一个特定于变量的问题?
目前我有这个代码:
<?php
require 'cart.php';
define('DB_NAME', 'orders');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);
if(!$db_selected) {
die('Unable to use ' . DB_NAME . ': ' . mysql_error());
}
...
$name = $_POST['name'];
$total = $_POST['total'];
$sql = "INSERT INTO orders (name, total) VALUES ('$name', '$total')";
if (!mysql_query($sql)) {
die ('Error: ' . mysql_error());
}
mysql_close();
?>
这是我的全部cart.php:
<?php
session_start();
$page = 'index.php';
mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('cart') or die(mysql_error());
if (isset($_GET['add'])) {
$quantity = mysql_query('SELECT id, quantity FROM products WHERE id='.mysql_real_escape_string((int)$_GET['add']));
while ($quantity_row = mysql_fetch_assoc($quantity)) {
if ($quantity_row['quantity']!=$_SESSION['cart_'.(int)$_GET['add']]) {
$_SESSION['cart_' . (int)$_GET['add']] +='1';
header('Location: order.php');
}
}
header('Location: order.php');
}
if (isset($_GET['remove'])) {
$_SESSION['cart_'.(int)$_GET['remove']]--;
header ('Location: order.php');
}
if (isset($_GET['delete'])) {
$_SESSION['cart_' . (int)$_GET['delete']]='0';
header ('Location: order.php');
}
function products() {
$get = mysql_query('SELECT id, name, description, price FROM products WHERE quantity > 0 ORDER BY id ASC');
if (mysql_num_rows($get) == 0) {
echo "There are no products to display.";
}
else {
echo "<center>\n";
echo " <table class='menufinal' border=0 width=75%>\n";
echo " <tr>\n";
echo " <th>View</th>\n";
echo " <th>Dish</th>\n";
echo " <th>Description</th>\n";
echo " <th>Item Price</th>\n";
echo " </tr>\n";
while ($get_row = mysql_fetch_assoc($get)) {
?>
<tr>
<td><img src="template.png" height="110" width="110"/> </td>
<td> <?echo '<p><strong>'.$get_row['name'] . '</strong>'?> </td>
<td> <?echo $get_row['description']?> </td>
<td><strong> <?echo '<br>£'.number_format($get_row['price'],2).'<br><br> <a href="cart.php?add='.$get_row['id'].'"><button>Add</button></a></p>';?> </strong></td>
</tr>
<?
}
echo "</table>\n";
echo "</center>\n";
}
}
function cart() {
$output = '';
$output .= '<center>';
$output .= '<table class="menufinal" border=0 width=75%>';
$output .= '<tr>';
$output .= '<th>Remove Item</th>';
$output .= '<th>Item Name</th>';
$output .= '<th>Item Price</th>';
$output .= '<th>Quantity</th>';
$output .= '<th>Line Total</th>';
$output .= '</tr>';
foreach($_SESSION as $name => $value) {
if ($value>0){
if (substr($name, 0, 5)=='cart_') {
$id = substr($name, 5, (strlen($name)-5));
$get = mysql_query('SELECT id, name, price FROM products WHERE id='.mysql_real_escape_string((int)$id));
while ($get_row = mysql_fetch_assoc($get)) {
$sub = $get_row['price']*$value;
$output .= '<tr>';
$output .= '<td><a href="cart.php?delete=' .$id.'"><img src="x.png"></a><br></td>';
$output .= '<td>' . $get_row['name'] . '</td>';
$output .= '<td>£ ' . number_format($get_row['price'], 2) . '</td>';
$output .= '<td><a href="cart.php?remove=' .$id. '"style="text-decoration:none"><strong>- </strong></a>' .$value. '<a href="cart.php?add=' .$id. '"style="text-decoration:none"> +</a></td>';
$output .= '<td>£ ' . number_format($sub, 2) . '</td>';
$output .= '</tr>';
}
}
if (empty($total)) {
if (empty($sub)) {
//do nothing
} else {
$total = $sub;
}
} else {
$total += $sub;
}
}
}
$output .= '</table>';
if (empty($total)){
header ('Location: index.php');
exit;
}
$output .= '<br><br><br><br><div id="finalPrice">Total: £ ' . number_format($total, 2) . '<br></div>';
$output .= '<br><br><br><p><a href="index.php"><img src="dishes.png" width="240" height="152"></a> <img src="spacer.png" width="110"> <a href="checkout.php"><img src="checkout.png" width="240" height="151"></a>';
echo $output;
}
?>
如果我需要显示更多代码,请告诉我。
如果为行中的值插入 NULL
或 blank
,则表示该值未正确设置,正如@andrewsi 在评论中所说的那样。
您需要为您尝试使用的 $_POST
变量添加检查,以验证它们是否被正确发送。
您还需要检查请求此特定 PHP 的表格(或其他地方)。
在上面的代码中,您可以使用以下答案:
示例:
if(isset($_POST['total']) && "" != trim($_POST['total'])){
echo "Do what you need here";
}
else
{
die("Incorrect input sent to POST variable total.");
}
更新
如果您在 cart.php
中设置 total
的值,您不应尝试从 $_POST
分配,除非您通过 post 发送。只需删除行 $total = $_POST['total'];
.
这里有几个相互关联的问题。您的 cart
函数实际上是:
function cart() {
//print some stuff
foreach($_SESSION as $name => $value) {
if (empty($total)) {
if (empty($sub)) {
//do nothing
} else {
$total = $sub;
}
} else {
$total += $sub;
}
}
}
您在函数内部设置了一个名为 $total
的变量,但 PHP 将其视为所谓的局部变量 - 这是一个存在于函数本身内部但不存在于函数外部的变量它。同样,在函数外部设置的变量不能在函数内部使用,除非您明确使它们可用 - 这称为 变量范围.
有几种方法可以访问函数内部设置的变量。既然你已经在使用 $_SESSION
,我建议使用这个:
function cart() {
$total = 0;
//print some stuff
foreach($_SESSION as $name => $value) {
if (! empty($sub)) {
$total += $sub;
}
}
$_SESSION['total'] = $total;
}
我在函数的开头初始化 $total
,因此您无需在尝试添加之前检查它是否存在。我还在会话中设置了一个变量,您可以在函数外使用它。
其次 - 您需要先调用您的函数,然后才能使用它。上面的 None 代码正在调用您的函数 - 您需要做的就是在上面添加一行 cart();
。
然后,当您为数据库设置变量时,您可以使用:
$name = $_POST['name'];
$total = $_SESSION['total'];
其他一些东西 - mysql_
函数已弃用,并将从 PHP 的未来版本中删除。您现在真的不应该将它们用于新代码 - mysqli_
函数很容易切换到,并且允许您使用准备好的语句,这有助于使您的代码更安全;还有 PDO
库,它不能直接将代码切换到,但它没有绑定到特定的数据库。
此外 - 这是个人喜好 - 您的 cart()
函数正在打印购物车的内容,并对其进行一些计算。我试着让函数只做一件事情,而不是把它们混在一起,即使它们确实合适。在这种情况下,您可以有一个 print_cart()
函数和一个 get_cart_total()
函数——我发现以这种方式编写的代码更容易维护。
我正在尝试将信息存储在 MySQL 中,并 运行 成为一个问题。只有 'name' 存储在 MySQL 中,即使我试图同时存储名称和总数。我尝试使用电子邮件而不是总计,但它仍然没有存储,这告诉我这不是一个特定于变量的问题?
目前我有这个代码:
<?php
require 'cart.php';
define('DB_NAME', 'orders');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);
if(!$db_selected) {
die('Unable to use ' . DB_NAME . ': ' . mysql_error());
}
...
$name = $_POST['name'];
$total = $_POST['total'];
$sql = "INSERT INTO orders (name, total) VALUES ('$name', '$total')";
if (!mysql_query($sql)) {
die ('Error: ' . mysql_error());
}
mysql_close();
?>
这是我的全部cart.php:
<?php
session_start();
$page = 'index.php';
mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('cart') or die(mysql_error());
if (isset($_GET['add'])) {
$quantity = mysql_query('SELECT id, quantity FROM products WHERE id='.mysql_real_escape_string((int)$_GET['add']));
while ($quantity_row = mysql_fetch_assoc($quantity)) {
if ($quantity_row['quantity']!=$_SESSION['cart_'.(int)$_GET['add']]) {
$_SESSION['cart_' . (int)$_GET['add']] +='1';
header('Location: order.php');
}
}
header('Location: order.php');
}
if (isset($_GET['remove'])) {
$_SESSION['cart_'.(int)$_GET['remove']]--;
header ('Location: order.php');
}
if (isset($_GET['delete'])) {
$_SESSION['cart_' . (int)$_GET['delete']]='0';
header ('Location: order.php');
}
function products() {
$get = mysql_query('SELECT id, name, description, price FROM products WHERE quantity > 0 ORDER BY id ASC');
if (mysql_num_rows($get) == 0) {
echo "There are no products to display.";
}
else {
echo "<center>\n";
echo " <table class='menufinal' border=0 width=75%>\n";
echo " <tr>\n";
echo " <th>View</th>\n";
echo " <th>Dish</th>\n";
echo " <th>Description</th>\n";
echo " <th>Item Price</th>\n";
echo " </tr>\n";
while ($get_row = mysql_fetch_assoc($get)) {
?>
<tr>
<td><img src="template.png" height="110" width="110"/> </td>
<td> <?echo '<p><strong>'.$get_row['name'] . '</strong>'?> </td>
<td> <?echo $get_row['description']?> </td>
<td><strong> <?echo '<br>£'.number_format($get_row['price'],2).'<br><br> <a href="cart.php?add='.$get_row['id'].'"><button>Add</button></a></p>';?> </strong></td>
</tr>
<?
}
echo "</table>\n";
echo "</center>\n";
}
}
function cart() {
$output = '';
$output .= '<center>';
$output .= '<table class="menufinal" border=0 width=75%>';
$output .= '<tr>';
$output .= '<th>Remove Item</th>';
$output .= '<th>Item Name</th>';
$output .= '<th>Item Price</th>';
$output .= '<th>Quantity</th>';
$output .= '<th>Line Total</th>';
$output .= '</tr>';
foreach($_SESSION as $name => $value) {
if ($value>0){
if (substr($name, 0, 5)=='cart_') {
$id = substr($name, 5, (strlen($name)-5));
$get = mysql_query('SELECT id, name, price FROM products WHERE id='.mysql_real_escape_string((int)$id));
while ($get_row = mysql_fetch_assoc($get)) {
$sub = $get_row['price']*$value;
$output .= '<tr>';
$output .= '<td><a href="cart.php?delete=' .$id.'"><img src="x.png"></a><br></td>';
$output .= '<td>' . $get_row['name'] . '</td>';
$output .= '<td>£ ' . number_format($get_row['price'], 2) . '</td>';
$output .= '<td><a href="cart.php?remove=' .$id. '"style="text-decoration:none"><strong>- </strong></a>' .$value. '<a href="cart.php?add=' .$id. '"style="text-decoration:none"> +</a></td>';
$output .= '<td>£ ' . number_format($sub, 2) . '</td>';
$output .= '</tr>';
}
}
if (empty($total)) {
if (empty($sub)) {
//do nothing
} else {
$total = $sub;
}
} else {
$total += $sub;
}
}
}
$output .= '</table>';
if (empty($total)){
header ('Location: index.php');
exit;
}
$output .= '<br><br><br><br><div id="finalPrice">Total: £ ' . number_format($total, 2) . '<br></div>';
$output .= '<br><br><br><p><a href="index.php"><img src="dishes.png" width="240" height="152"></a> <img src="spacer.png" width="110"> <a href="checkout.php"><img src="checkout.png" width="240" height="151"></a>';
echo $output;
}
?>
如果我需要显示更多代码,请告诉我。
如果为行中的值插入 NULL
或 blank
,则表示该值未正确设置,正如@andrewsi 在评论中所说的那样。
您需要为您尝试使用的 $_POST
变量添加检查,以验证它们是否被正确发送。
您还需要检查请求此特定 PHP 的表格(或其他地方)。
在上面的代码中,您可以使用以下答案:
示例:
if(isset($_POST['total']) && "" != trim($_POST['total'])){
echo "Do what you need here";
}
else
{
die("Incorrect input sent to POST variable total.");
}
更新
如果您在 cart.php
中设置 total
的值,您不应尝试从 $_POST
分配,除非您通过 post 发送。只需删除行 $total = $_POST['total'];
.
这里有几个相互关联的问题。您的 cart
函数实际上是:
function cart() {
//print some stuff
foreach($_SESSION as $name => $value) {
if (empty($total)) {
if (empty($sub)) {
//do nothing
} else {
$total = $sub;
}
} else {
$total += $sub;
}
}
}
您在函数内部设置了一个名为 $total
的变量,但 PHP 将其视为所谓的局部变量 - 这是一个存在于函数本身内部但不存在于函数外部的变量它。同样,在函数外部设置的变量不能在函数内部使用,除非您明确使它们可用 - 这称为 变量范围.
有几种方法可以访问函数内部设置的变量。既然你已经在使用 $_SESSION
,我建议使用这个:
function cart() {
$total = 0;
//print some stuff
foreach($_SESSION as $name => $value) {
if (! empty($sub)) {
$total += $sub;
}
}
$_SESSION['total'] = $total;
}
我在函数的开头初始化 $total
,因此您无需在尝试添加之前检查它是否存在。我还在会话中设置了一个变量,您可以在函数外使用它。
其次 - 您需要先调用您的函数,然后才能使用它。上面的 None 代码正在调用您的函数 - 您需要做的就是在上面添加一行 cart();
。
然后,当您为数据库设置变量时,您可以使用:
$name = $_POST['name'];
$total = $_SESSION['total'];
其他一些东西 - mysql_
函数已弃用,并将从 PHP 的未来版本中删除。您现在真的不应该将它们用于新代码 - mysqli_
函数很容易切换到,并且允许您使用准备好的语句,这有助于使您的代码更安全;还有 PDO
库,它不能直接将代码切换到,但它没有绑定到特定的数据库。
此外 - 这是个人喜好 - 您的 cart()
函数正在打印购物车的内容,并对其进行一些计算。我试着让函数只做一件事情,而不是把它们混在一起,即使它们确实合适。在这种情况下,您可以有一个 print_cart()
函数和一个 get_cart_total()
函数——我发现以这种方式编写的代码更容易维护。