Загрузите код PHP в файл Excel - отображает только первую запись запроса, но не возвращает их все - PullRequest
0 голосов
/ 20 октября 2018

У меня есть этот код, который должен отображать каждую запись в отдельной записи в Microsoft Excel.Однако он помещает только первую запись в Excel, хотя у меня есть цикл while, поэтому все записи будут вставлены.Однако это не работает, у меня есть какие-либо проблемы в моем коде?Или цикл не будет работать так?Я делал это раньше, и это работало без проблем, но по какой-то причине это не работает.

<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$filename = "Charge Report";
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: filename=".$filename.".csv");
if($conn->connect_error)
{
    die("Connection failed: " . $conn->connect_error);
}
$query = "SELECT
first_name, 
orders.user_id AS 'user_id',
last_name, 
email, 
city,
line1,
line2,
delivery_zip, 
orders.id AS 'orders_id',
charge_status,
subtotal,
charge_date, 
delivery_fee,
tax,
tax_amount,
total,
stripe_customer_id,
discount_code_id,
discount
FROM
    orders
INNER JOIN subscriptions ON orders.subscription_id = subscriptions.id
INNER JOIN users on subscriptions.user_id = users.id
LEFT JOIN addresses on users.id = addresses.user_id
ORDER BY users.id";


$result = mysqli_query($conn,$query);
?>
Client ID,First/Last Name,Email,Address,City,Zipcode,Order ID,Charge Date,Charge Status,Subtotal,Delivery Fee, Delivery Fee Discount,Discount Code, Discount Type,Promo Code Discount Amount,Tax Rate, Tax Amount,Net Charge Amount,Net Total Amount,Total Amount, Number of Meals,Client ID Stripe
<?php 
while ($row = mysqli_fetch_assoc($result)) 
{
$name = $row['first_name']. " " . $row['last_name'];
$address = $row['line1']. " " . $row['line2'];
$subtotal = $row['subtotal'];
$delivery_fee = $row['delivery_fee'];

if($subtotal >= 30000)
{
    $delivery_fee_discount = $delivery_fee + 1000;
}
elseif($subtotal >= 20000)
{
    $delivery_fee_discount = $delivery_fee;
}
elseif($subtotal >= 10000)
{
    $delivery_fee_discount = 1000;
}
else{
    $delivery_fee_discount = 0;
}
$tax_amount = $row['tax_amount'];
$total = $row['total'];
$discount_code_id = $row['discount_code_id'];
$net_total_amount = $total - $tax_amount;
$discount = $row['discount'];

$total_amount = $subtotal + $tax_amount +$delivery_fee;

$query_discount="select * from discount_codes where id = '{$discount_code_id}'";
$result = mysqli_query($conn,$query_discount);
$row_discount = mysqli_fetch_assoc($result);
$discount_name = $row_discount['code'];
$discount_type = $row_discount['discount_type'];


$discount_amount = $discount - $delivery_fee_discount;
if($discount <= 0)
{
    $discount_amount = 0;

}
if($discount_type == 3)
{
    $discount_amount = $row['delivery_fee'];
}

$get_orders= "select SUM(num_meals) as `meal_total` from orders left join deliveries on orders.id = deliveries.order_id where orders.id = '{$row['orders_id']}'";
$r_get_orders = mysqli_query($conn, $get_orders);
$qty = mysqli_fetch_assoc($r_get_orders);

$meal_counter = $qty['meal_total'];
$user_id = $row['user_id'];
$user_id = (explode(" ",$user_id));

?>
    <?=@$user_id[0] ?>,<?=$name ?>,<?=$row['email'] ?>,<?=$address?>,<?=$row['city']?>,<?=$row['delivery_zip']?>,<?=$row['orders_id']?>,<?=$row['charge_date']?>,<?=$row['charge_status']?>,<?=$subtotal?>,<?=$delivery_fee?>,<?=$delivery_fee_discount?>,<?=$discount_name?>,<?=$discount_type?>,<?=$discount_amount?>,<?=$row['tax']?>,<?=$row['tax_amount']?>,<?=$row['total']?>,<?=$net_total_amount?>,<?=$total_amount?>,<?=$meal_counter?>,<?=$row['stripe_customer_id']?>

<?php
}
?>

1 Ответ

0 голосов
/ 20 октября 2018

Вы перезаписываете $result внутри while($row = mysqli_fetch_assoc($result)) {} при вашем втором запросе:

$result = mysqli_query($conn,$query_discount);

Так что переименуйте его здесь и в следующей строке что-то вроде $result_discount:

$result_discount = mysqli_query($conn,$query_discount);
$row_discount = mysqli_fetch_assoc($result_discount);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...