php/mysql-向mysql发送多个数据

php/mysql-向mysql发送多个数据,php,mysql,forms,Php,Mysql,Forms,我试图在MySQL中存储信息,但遇到了一个问题。MySQL中只存储“name”,尽管我试图同时存储name和total。我试着用email代替total,但它仍然没有被存储,这告诉我这不是一个变量特定的问题 目前我有以下代码: <?php require 'cart.php'; define('DB_NAME', 'orders'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); define('DB_HOST', 'loc

我试图在MySQL中存储信息,但遇到了一个问题。MySQL中只存储“name”,尽管我试图同时存储name和total。我试着用email代替total,但它仍然没有被存储,这告诉我这不是一个变量特定的问题

目前我有以下代码:

<?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();

    ?>

如果为行中的值插入
NULL
blank
,则表示该值未按照@andrewsi在注释中所述正确设置

您需要为尝试使用的
$\u 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
的值,则不应尝试从
$\u POST
分配,除非您通过POST发送。只需删除行
$total=$\u POST['total']

这里有几个相关问题。您的
购物车
功能有效:

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将其视为局部变量—该变量存在于函数本身内部,而不是函数外部。同样,在函数外部设置的变量不能在函数内部使用,除非您显式地使它们可用——这称为变量范围

有几种方法可以访问函数内部设置的变量。由于您已经在使用
$\u会话
,我建议您使用以下方法:

function cart() {
    $total = 0;

    //print some stuff

    foreach($_SESSION as $name => $value) {
        if (! empty($sub)) {
            $total += $sub;
        }
    }

    $_SESSION['total'] = $total;
}
我在函数的开头初始化了
$total
,因此在尝试添加之前,您不需要检查它是否存在。我还在会话中设置一个变量,可以在函数外部使用

第二,你需要先调用你的函数,然后才能使用它。上面的代码都没有调用您的函数-您需要做的就是在
cart()中添加一行代码在上面

然后,在为数据库设置变量时,可以使用:

$name = $_POST['name'];
$total = $_SESSION['total'];
其他一些东西-
mysql\uu
函数已被弃用,并将从未来版本的PHP中删除。你现在真的不应该在新代码中使用它们-
mysqli\uu
函数非常容易切换,并且允许你使用预先准备好的语句,这有助于你使代码更加安全;还有
PDO
库,它不能直接将代码切换到它,但它不绑定到特定的数据库


此外,这也是个人的偏好,您的
cart()
函数将打印出购物车的内容,并对其进行一些计算。我尝试让函数只做一件事,而不是把它们放在一起,即使它们确实合适。在这种情况下,您可以使用
print\u cart()
函数和
get\u cart\u total()
函数-我发现这样编写的代码更容易维护。

是否正确设置了
$total
?危险:您正在使用并且应该使用。您也很容易受到现代API的影响,因为它会使您更容易使用。@andrewsi更新了我的问题,显示了total的位置set@JamesPatterson-但您使用的是
$total=$\u POST['total']-如果您在另一个文件中设置它,则会被重写。@andrewsi Oh:(我怎么才能调用total来存储呢?我不熟悉编程,你能给我一个例子来说明如何解决这个问题吗?我不熟悉编程,所以很难计算出这个问题。我按照andrew的建议删除了那一行,但仍然没有存储任何内容:(这是可行的,但总价计算不正确:(有什么原因吗?我应该再次更新我的代码吗?我怀疑问题在于
$sub
是在循环中设置的,这意味着循环的每次迭代都会重新设置它。您可以尝试
$total+=$get_行['price']*$value;
而不是现有的
$sub=$get_行['price']*$value;
,并在循环后删除最后的
if
语句。我尝试了这一点,现在我得到了一个错误声明:“注意:第92行的/Applications/XAMPP/xamppfiles/htdocs/IT2B/cart.php中的未定义变量:sub:(确认。我没有注意到您也在输出中使用它。尝试将
$sub=$get_行['price']*$value;
返回,并在下一行添加
$total+=$sub;
$name = $_POST['name'];
$total = $_SESSION['total'];