Вставка данных корзины покупок в базу данных MySQL с использованием PHP - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть корзина для покупок, которая в данный момент отправляет товары, внесенные клиентом в базу данных, но теперь я включил систему входа в систему, благодаря которой вы должны быть участником, прежде чем купить товар. Я держал вошедшего в систему пользователя в сеансе, и поэтому я пытаюсь отправить переменную сеанса также в базу данных, как только будет сделан заказ. На данный момент у меня есть три таблицы: клиенты, заказы и order_detail (см. Следующий код):

session_start();
?>
<?php
if(!isset($_SESSION["username"]))
{
    header("Location: shoppinglogin.php");
}
?>

<?
    include("includes/db.php");
    include("includes/functions.php");

    if($_REQUEST['command']=='update'){
        $name=$_REQUEST['name'];
        $email=$_REQUEST['email'];
        $address=$_REQUEST['address'];
        $phone=$_REQUEST['phone'];

        $result=mysql_query("insert into customers values('','$name','$email','$address','$phone')");
        $customerid=mysql_insert_id();
        $date=date('Y-m-d');
        $result=mysql_query("insert into order values('','$date','$customerid')");
        $orderid=mysql_insert_id();

        $max=count($_SESSION['cart']);
        for($i=0;$i<$max;$i++){
            $pid=$_SESSION['cart'][$i]['productid'];
            $q=$_SESSION['cart'][$i]['qty'];
            $price=get_price($pid);
            mysql_query("insert into order_detail values ($orderid,$pid,$q,$price)");
        }
        die('Thank You! your order has been placed!');
        session_unset(); 
    }
?>

Я изменил его на следующий код:

 <?php

session_start();
?>
<?php
if(!isset($_SESSION["username"]))
{
    header("Location: shoppinglogin.php");
}
?>

<?
    include("includes/db.php");
    include("includes/functions.php");

    if($_REQUEST['command']=='update'){
        $name=$_REQUEST['name'];
        $email=$_REQUEST['email'];
        $address=$_REQUEST['address'];
        $phone=$_REQUEST['phone'];

$max=count($_SESSION['cart']);
        for($i=0;$i<$max;$i++){
            $orderid=mysql_insert_id();
            $pid=$_SESSION['cart'][$i]['productid'];
            $q=$_SESSION['cart'][$i]['qty'];
            $price=get_price($pid);
            $date=date('Y-m-d');
            $user=$_SESSION['username'];
            mysql_query("insert into order values ($orderid,$pid,$q,$price,$date,$user)");
        }
        die('Thank You! your order has been placed!');
        session_unset(); 
    }
?>

код выше ничего не вставляет в мою таблицу заказов.

Спасибо

Ответы [ 3 ]

0 голосов
/ 08 ноября 2011

Тьфу.Операции с базой данных абсолютно без обработки ошибок.Если предположить, что запрос к БД успешен, вы попадете только в такие ситуации - без понятия о том, что не так.

При абсолютно минимальном минимуме ваши операции с БД должны выглядеть следующим образом:по крайней мере останавливает сценарий мертвым на своем пути, сообщает, что запрос не выполнен, сообщает, ПОЧЕМУ он не выполнен, и сообщает, что запрос был.

Кроме того, ваш код WIDE OPEN SQL-инъекция атаки.Это особенно плохо в том, что очевидно является настройкой электронной коммерции.Я предлагаю вам немедленно ВЫКЛЮЧИТЬ эту систему, пока у вас не будет возможности прочесть об этом и закрыть пробелы.

0 голосов
/ 21 августа 2016

Пожалуйста, убедитесь, что к вашему значению приложен '',

попробуйте заменить на это:

insert into order values ('$orderid','$pid','$q','$price','$date','$user')

И убедитесь, что в таблице order нет других полей, которые не являются нулевыми, если не указано:

insert into order (order_id, product_id, qty, price, order_date, order_user) values ('$orderid','$pid','$q','$price','$date','$user')

0 голосов
/ 08 ноября 2011

Попробуйте or die(mysql_error()) сразу после функции mysql_query. Это, вероятно, даст вам больше информации о проблеме ...

...