Si pido dos productos, solo guardará un producto en mi base de datos.

Cuando hago clic en pagar, me enviará un correo electrónico con mi pedido y enviará los productos que pedí a la base de datos mysql. Pero solo un producto (el último producto) se envía y se guarda en la base de datos. ¿Cómo puedo arreglar esto?

//connect to database
$connection = mysql_connect("localhost","root","") or die ("Can't connect");
mysql_select_db("shoppingcart", $connection) or die ("Can't connect");

//get order id ONLY to get order id <<<<<<<
$vol = mysql_query("SELECT orderid FROM ordertracking WHERE email='$email'");
while($volume=mysql_fetch_array($vol))
{
 $orderid = $volume['orderid'];
} // end of getting order id from table ordertracking
    // add new order
    $order = "INSERT INTO `order` (orderid, customerid, productid, brand, model, price, amount, totalcost, image) VALUES ('$orderid', '$customerid', '$productid', '$brand' , '$model', '$price', '$amount', '$totalcost', '$image')";
    if (!mysql_query($order,$connection))
        {
            die('Error: ' . mysql_error());
            echo "Sorry, there was an error";
        }
        echo "New order added" . "<br />";

        mysql_close($connection);

Todo el guión:

<?php
error_reporting(-1);ini_set('display_errors', 'stdout');
var_dump($_GET);

//collect all information
$name = $_GET["name"];
$surname = $_GET["surname"];
$city = $_GET["city"];
$postalcode = $_GET["postalcode"];
$phonenumber = $_GET["phonenumber"];
$email = $_GET["email"];

$i = 1;
while (isset($_GET["Product_ID_".$i])) {
    $productid = $_GET["Product_ID_".$i];
    $brand = $_GET["Brand_".$i];
    $model = $_GET["Model_".$i];
    $price = $_GET["Price_".$i];
    $amount = $_GET["Amount_products_".$i];
    $totalcost = $_GET["Total_cost_".$i];
    $i++;
}

$image = "includes/images/mouse_4.jpg";


$date = date("F j, Y, g:i a");



//connect to database
$connection = mysql_connect("localhost","root","") or die ("Can't connect");
mysql_select_db("shoppingcart", $connection) or die ("Can't connect");  

//check if already customer
$result = mysql_query("SELECT * FROM customer WHERE email='$email'");
$rows = mysql_num_rows($result);


    if ($rows) 
    {
      echo '<br>Welcome back ' . $name .' '. $surname. '<br>';
    }
    else
    {
        //if new customer, add to database
        $customer = "INSERT INTO customer (customerid, name, surname, email, city, postalcode, phonenumber) VALUES ('', '$name', '$surname', '$email', '$city', '$postalcode', '$phonenumber')";
        if (!mysql_query($customer,$connection))
        {
            die('Error: ' . mysql_error());
            echo "Sorry, there was an error";
        }
        echo "New customer added" . "<br />";
        echo '<br>Welcome as our new customer ' . $name . ' '. $surname;

        mysql_close($connection);   
    }

//connect to database
$connection = mysql_connect("localhost","root","") or die ("Can't connect");
mysql_select_db("shoppingcart", $connection) or die ("Can't connect");


//get customer id
$res = mysql_query("SELECT customerid FROM customer WHERE email='$email'");
while($row=mysql_fetch_array($res))
{
 $customerid=$row['customerid'];
}
    //add new ordertracking
    $ordertracking = "INSERT INTO `ordertracking` (orderid, customerid, email, progress, date) VALUES ('', '$customerid', '$email', 'Pending', '$date')";
    if (!mysql_query($ordertracking,$connection))
        {
            die('Error: ' . mysql_error());
            echo "Sorry, there was an error";
        }
        echo "New order added" . "<br />";

        mysql_close($connection);

//connect to database
$connection = mysql_connect("localhost","root","") or die ("Can't connect");
mysql_select_db("shoppingcart", $connection) or die ("Can't connect");

//get order id
$vol = mysql_query("SELECT orderid FROM ordertracking WHERE email='$email'");
while($volume=mysql_fetch_array($vol))
{
 $orderid = $volume['orderid'];
}
    // add new order
    $order = "INSERT INTO `order` (orderid, customerid, productid, brand, model, price, amount, totalcost, image) VALUES ('$orderid', '$customerid', '$productid', '$brand' , '$model', '$price', '$amount', '$totalcost', '$image')";
    if (!mysql_query($order,$connection))
        {
            die('Error: ' . mysql_error());
            echo "Sorry, there was an error";
        }
        echo "New order added" . "<br />";

        mysql_close($connection);


$to = $email;
$subject = "Order information of: ";

$headers = "From: " . "postmaster@localhost" . "\r\n";
$headers .= "Reply-To: ". "postmaster@localhost" . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

$message = '<html><body>';
$message .= '<h1>Dear ' . $name . ' ' . $surname .  ',</h1>' . '<br />';
$message .= 'Order date and time: ' . $date . '<br />';
$message .= 'Thank you for your order at our online shop!' . '<br />';
$message .= 'Your order information: ' . '<br /><br /><br />';
$i = 1;
while (isset($_GET["Product_ID_".$i])) {
    $productid = $_GET["Product_ID_".$i];
    $brand = $_GET["Brand_".$i];
    $model = $_GET["Model_".$i];
    $price = $_GET["Price_".$i];
    $amount = $_GET["Amount_products_".$i];
    $totalcost = $_GET["Total_cost_".$i];

    $message .= ' Product ID: ' . $productid . "<br />" .
                'Brand: '. $brand . "<br />" .
                'Model: ' . $model . "<br />" .
                'Price per item: ' . $price . "<br />" .
                'Amount of item: ' . $amount . "<br />" .
                'Total cost: ' . $totalcost . "<br />" .
                '_________________________________________________| ' . "<br />" .
    $i++;
}
$message .= 'To follow your odertracking please remember your order ID and customer ID' . '<br />';
$message .= 'Order ID: ' . $orderid . '<br />';
$message .= 'Customer ID: ' . $customerid . '<br />';
$message .= 'Link to track your order: ' . '<a href="http://localhost/school/shoppingcart/ordertracking.php">Ordertracking system</a>' . '<br />';

$message .= '</body></html>';

mail($to, $subject, $message, $headers);
?>

preguntado el 01 de julio de 12 a las 10:07

PHP mysql_* las funciones son . Existen alternativas que son compatibles y mucho más seguro. -

2 Respuestas

lo que estás haciendo aquí es esto:

  • obtenga toda la identificación del pedido de la tabla orderTracking donde el correo electrónico es el correo electrónico proporcionado. Supongo que se obtiene más de una fila.

el código

while($volume=mysql_fetch_array($vol))
{
 $orderid = $volume['orderid'];
}

funciona muy bien, pero cuando intenta insertar el valor de orderid en la tabla [order], solo se actualiza una fila porque la variable $orderid ahora contiene solo una cadena (el orderid de la última fila de la consulta).

entonces la solución es ejecutar insertar dentro del ciclo while

algo como esto

$vol = mysql_query("SELECT orderid FROM ordertracking WHERE email='$email'");
while($volume=mysql_fetch_array($vol))
{
 $orderid = $volume['orderid'];
// add new order
    $order = "INSERT INTO `order` (orderid, customerid, productid, brand, model, price, amount, totalcost, image) VALUES ('$orderid', '$customerid', '$productid', '$brand' , '$model', '$price', '$amount', '$totalcost', '$image')";
    if (!mysql_query($order,$connection))
        {
            die('Error: ' . mysql_error());
            echo "Sorry, there was an error";
        }
}

Espero que te hagas una idea.

la segunda solución puede ser que, en lugar de usar la variable simple $orderid, puede usar una variable de matriz. luego recorra la variable para obtener los ID de pedido.

en resumen, de acuerdo con su código, necesita un bucle para insertar más de un registro en la base de datos.

Respondido 01 Jul 12, 10:07

Sí, envía dos pedidos ahora, pero ambos son el mismo producto. Ejemplo, pido producto1 y producto2. Enviará product2 dos veces a mi base de datos. - CÓDIGO MOTIVO

@F4LLCON esto debería funcionar hasta ya menos que los datos no sean correctos. Aún así, probaré el script con una base de datos ficticia y volveré. - Ankit Suhail

el código debería funcionar ya que funciona bien con algunos datos ficticios. Verifique los valores de su base de datos. El código Php es correcto según yo. - Ankit Suhail

Solo está ejecutando la consulta una vez ya que está cerrando su bucle while demasiado pronto:

while($volume=mysql_fetch_array($vol))
{
 $orderid = $volume['orderid'];
}

deberías cerrarlo después de la línea:

 echo "New order added" . "<br />";

Respondido 01 Jul 12, 10:07

No funcionó, todavía está enviando el último producto, pero más veces - CÓDIGO MOTIVO

Haz un print_r($volume) para que puedas ver lo que obtienes. - Tomer

No mucho, pero en realidad while($volume=mysql_fetch_array($vol)) { $orderid = $volume['orderid']; } es solo para obtener el ID de pedido del ID de pedido agregado anteriormente en el seguimiento de pedidos. No tiene nada que ver con la adición del orden en orden. Obtengo el ID de pedido de la tabla de seguimiento de pedidos y agrego ese ID de pedido a orderid en orden de mesa. Creo que el problema está en otra parte, voy a editar un poco mi pregunta: CÓDIGO MOTIVO

Lo que quiero decir es que es posible que tenga los mismos datos dos veces en la matriz de volúmenes, y el problema radica en obtener los datos del seguimiento de pedidos y no en la inserción. - Tomer

Me doy por vencido, este script tiene dos problemas, uno no envía todos los productos a mi base de datos, solo el último producto y otro es que el correo electrónico no muestra todos los datos. solo los primeros 4 productos. Es como si el correo electrónico tuviera un límite de líneas o algo así. Bueno, tengo que mostrar esto mañana en la escuela y me doy por vencido con los dos problemas. El maestro tiene que lidiar con eso. Gracias. Votaré a favor de sus publicaciones, pero no puedo marcarlas como terminadas. CÓDIGO MOTIVO

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.