отправка реквизитов корзины через php почту - ajax - PullRequest
0 голосов
/ 05 августа 2020

Я работаю на сайте корзины покупок JS, и я пытаюсь отправить сведения о тележке на почту в функции проверки, используя php mail, здесь я передаю данные моей тележки php через ajax.

in php при попытке отправить все значения корзины с помощью foreach я могу получить только последнюю строку корзины, поскольку foreach заменяет предыдущее значение

как мне получить корзину значения и отправьте их в формате

js

function SendMail() {
    var tableContent = localStorage.getItem('productsInCart');
    $.post('read.php', {tableContent: tableContent}, function (data) {
        console.log(tableContent);
    });
}

php

if (isset($_POST['tableContent'])) {
    $tableContent = json_decode($_POST['tableContent']);
    foreach ($tableContent as $tableContent) {
        $name = ($tableContent->name);
        $price = ($tableContent->price);
        $quantity = ($tableContent->inCart);
    }

    $mailTo = "xxxxxxxxxxxxx";
    $Subject = " order details ";
    $headers = "from :" . $contact;
    $txt = "New registration \n Item:" . $name . "\n Quantity:" . $quantity . "\n Price:" . $price . "\n\n\n CUSTOMER DERAILS\n\n Name:" . $contact . "\n Reg No:" . $reg;

    mail($mailTo, $Subject, $txt, $headers);
    header("location: read.php?mailsend");
}

1 Ответ

0 голосов
/ 05 августа 2020

В настоящее время вы перезаписываете одни и те же переменные на каждой итерации l oop, поэтому они будут содержать только последнюю запись.

Вместо этого вы должны добавить значения, делая что-то вроде:

$tableContent = json_decode($_POST['tableContent']);

// Define a variable to store the items in
$items = '';
// Let's add a total sum as well
$total = 0;

// Let's also use different variable names here
foreach ($tableContent as $item) {        
    // Append to the variable (notice the . before the =)
    $items .= 'Item: ' . $item->name . "\n";
    $items .= 'Quantity: ' . $item->inCart . "\n";
    $items .= 'Price: ' . $item->price . "\n\n";
    
    // Add the price to the total (I'm assuming that the price is an integer)
    $total += $tableContent->price;
}

Теперь при выводе тела письма у нас есть все элементы и сумма в этих переменных:

$txt = "New registration \n" . $items . "Sum total: " . $total . "\n\n\n CUSTOMER DERAILS\n\n Name:".$contact."\n Reg No:".$reg;

Как видите, я немного изменил макет письма поскольку кажется, что корзина может содержать несколько товаров, в то время как тело вашего электронного письма было написано так, как если бы могло содержать только один.

Предупреждение об этом подходе

Вы не должны получать значения корзины, например, имя и цена, от клиента в таком POST-запросе. Клиент должен отправить только идентификатор и количество товара, а затем вы получите имя и цену из базы данных или аналогичного элемента в бэкэнде. В противном случае любой может изменить цену до того, как она будет опубликована. Никогда не доверяйте пользовательским данным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...