Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать значение из JS в переменную PHP (https://javascript.ru/forum/misc/54913-kak-peredat-znachenie-iz-js-v-peremennuyu-php.html)

arhat78 06.04.2015 13:22

Как передать значение из JS в переменную PHP
 
Всем привет! Стоит задача, с которой пока справиться не смог. Есть:

document.getElementById('product-price').innerHTML = rezultatRadio + totalPrice;

мне нужно передать значение
'product-price'

из
document.getElementById('product-price').innerHTML

в php-переменную, типа
$product_price

Выводить на этой же странице результат получается вот так:
<output id="product-price"></output>

И нужно значение id='product-price' передать новой переменной $product_price функцией mail(), которая находится на этой же странице order.php... Заранее благодарен!

laimas 06.04.2015 13:33

Опшен ваш является элементом списка, а список элементом формы. При отправке формы получайте, присваивайте, отправляйте почтой, какие проблемы?

arhat78 06.04.2015 18:49

Цитата:

Сообщение от laimas (Сообщение 365168)
Опшен ваш является элементом списка, а список элементом формы. При отправке формы получайте, присваивайте, отправляйте почтой, какие проблемы?

Ну а как можно присвоить значение JS переменной PHP???

laimas 06.04.2015 18:55

На сервере не будет никакой js-переменной. Если речь идет о форме, то в зависимости от метода ее передачи ее данные будут на сервере в массиве $_GET или $_POST, можно их получить и из массива $_REQUEST. А чтобы элемент формы передавался на сервер, у него должен быть атрибут name, который будет ключом в вышеуказанных массивах.

arhat78 06.04.2015 19:06

Цитата:

Сообщение от laimas (Сообщение 365283)
Если речь идет о форме, то в зависимости от метода ее передачи ее данные будут на сервере в массиве $_GET или $_POST, можно их получить и из массива $_REQUEST. А чтобы элемент формы передавался на сервер, у него должен быть атрибут name, который будет ключом в вышеуказанных массивах.


laimas, у меня и форма оформления заказа, и код отправки на почту находится на одной странице.


В письме общая сумма заказа отправлялась таким образом:
$tprice =  substr(htmlspecialchars(trim(number_format($product['price'] * $quantity ,2))), 0, 1000000); 
        

$message .= 'Общая сумма: ' . $tprice . '<br />';


Но после добавления функции выбора типа доставки появился этот код:
<input type="radio" name="nameRadio" value="300" > Наш курьер (Стоимость доставки 300 руб)
    <input type="radio" name="nameRadio" value="0">Самовывоз
    
	 <p class="total" align="center">Общая сумма заказа: <span class="product-price"><output id="product-price"></output> руб</span></p>


Вот как теперь $tprice поменять на id="product-price", вот в чём вопрос??????

laimas 06.04.2015 19:17

substr(htmlspecialchars(trim(number_format($produc t['price'] * $quantity ,2))), 0, 1000000); - вы можете объяснить зачем здесь htmlspecialchars, а trim после number_format, и весь этот бедлам еще и должен быть обработан substr?

Вот как теперь $tprice поменять на id="product-price", вот в чём вопрос??????

Поменять где, на сервере? Никак. Вставить видимо нужно $tprice в id="product-price"?

<output id="product-price"><?=$tprice ? $tprice : null?></output>

arhat78 06.04.2015 19:25

Цитата:

Сообщение от laimas (Сообщение 365289)

Поменять где, на сервере? Никак. Вставить видимо нужно $tprice в id="product-price"?

<output id="product-price"><?=$tprice ? $tprice : null?></output>

Ну а какой смысл в этой вставке???? Нужно как раз этой переменной $tprice присвоить значение, которое несёт в себе id="product-price", чтобы отправить общую сумму заказа учитывая стоимость доставки.

laimas 06.04.2015 19:31

Тег output не является элементом формы, более того, он доступен только в современных браузерах. А не являясь элементом формы, он как ее значение не передается на сервер. Если вам нужно передать текст из этого тега, помещайте его в скрытое поле формы на клиенте. Но если этот тег содержит produc t['price'] * $quantity, то какой смысл его передавать?

А вот это substr(htmlspecialchars(trim(number_format($produc t['price'] * $quantity ,2))), 0, 1000000); - полнейшая чушь, выбрасывайте это.

$produc t['price'] - цену продукта должен знать сервер, передавать ее с клиента не стоит. Клиент должен сообщать серверу только количество выбранного.

arhat78 06.04.2015 19:46

Цитата:

Сообщение от laimas (Сообщение 365293)

А вот это substr(htmlspecialchars(trim(number_format($produc t['price'] * $quantity ,2))), 0, 1000000); - полнейшая чушь, выбрасывайте это.

$produc t['price'] - цену продукта должен знать сервер, передавать ее с клиента не стоит. Клиент должен сообщать серверу только количество выбранного.

substr(number_format($produc t['price'] * $quantity ,2), 0, 10);

Существует сессия: $_SESSION['total_price'], так я выводил "общую сумму заказа" до появления выбора типа доставки с JS.

$total_price = $_SESSION['total_price'];

$total_price я заносил в БД "общую сумму заказа"

Теперь с помощью JS общая сумма заказа заносится в id="product-price"
<script>
  window.onload = function(){ totalPrice = "<?=$_SESSION['total_price']?>"; }
  
window.onclick = function onclickRadio() {
  var nameRadio = document.getElementsByName('nameRadio');
  for (var i = 0; i < nameRadio.length; i++) {
    if (nameRadio[i].type === 'radio' && nameRadio[i].checked) {
        rezultatRadio = nameRadio[i].value;       
        
    }
  }
  document.getElementById('rezultatRadio').innerHTML =  rezultatRadio;
  document.getElementById('product-price').innerHTML =  new Number (+rezultatRadio) + new Number (+totalPrice);
  
 
}
</script>

И вот как теперь значение данного id можно передать переменной PHP, чтобы можно было это дальше обрабатывать в PHP?

laimas 06.04.2015 19:52

<script>
window.onload = function(){ totalPrice = "<?=$_SESSION['total_price']?>"; }
var totalPrice = "<?=$_SESSION['total_price']?>";

Хранение данных в сессии никак не оправдывает substr(number_format($produc t['price'] * $quantity ,2), 0, 10), это глупость, ибо в контексте типа данных с которыми вы работаете, этого совсем не требуется, тем более htmlspecialchars и trim.

Об остальном тоже хорошо подумайте. Вы изначально поступаете непотребным способом, и ваш код грешит тем, что может огрести кучу мусора, и скушать его.


Часовой пояс GMT +3, время: 10:35.