Проблема: моя php-форма не отправляется.
Это моя страница:
Он имеет отображаемый php список цветов:
<div class = "table-container">
<div>
<table class = "myTable" id = "myTable">
<tr class = "header">
<th>Variants</th>
<th>Size</th>
<th>Price (€)</th>
</tr>
<?php
$current_name = $_GET['prod-name'];
$get_product_det = "SELECT * FROM product_details WHERE product_name='$current_name' ORDER BY position";
$run_product_det = mysqli_query($con, $get_product_det);
while ($row_product_det = mysqli_fetch_array($run_product_det)){
$id = $row_product_det['id'];
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];
$position = $row_product_det['position'];
echo "<tr data-index='$id' data-position='$position'>
<td><a id='$id'>$product_variant</a></td>
<td>$product_size</td>
<td>$product_price</td>
</tr>";
};
?>
</table>
</div>
Каждый цвет имеет уникальный идентификатор. При нажатии на цвет запускается скрипт AJAX, который отлично работает:
<div class='product-det-div' id='product_details'>
<script>
var links = document.getElementsByTagName('a');
for (var i = 0, il = links.length; i < il; i++) {
links[i].onclick = function() {
var id = this.id;
var product_details = document.getElementById('product_details');
var request = new XMLHttpRequest();
request.open('POST', 'product_details.php?variant_id=' + id, true);
request.onreadystatechange = function() {
if (request.readyState === 4 & request.status === 200) {
product_details.innerHTML = request.responseText;
} else {
product_details.innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText;
}
};
request.send();
};
};
</script>
</div>
Когда происходит вызов ajax, что происходит с URL-адресом страницы? Я передаю идентификатор цвета через URL-адрес, но при попытке ПОЛУЧИТЬ его с помощью PHP кажется, что он его не находит. Вот код страницы:
$current_id = $_REQUEST['variant_id'];
$get_product_det = "SELECT * FROM product_details WHERE id=$current_id";
$run_product_det = mysqli_query($con, $get_product_det);
while ($row_product_det = mysqli_fetch_array($run_product_det)){
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];
echo "
<form action='' method='post'>
<h2 style='margin-bottom: 20px;'>$product_variant</h2>
<div><label>Nome Prodotto</label><input value='$product_variant'></div>
<div><label>Dimensione</label><input value='$product_size' type='number' name='product_size'></div>
<div><label>Prezzo (€)</label><input value='$product_price' id='product_price' name='product_price'></div>
<button type='submit' name='edit_variant_btn'>Send</button>
</form>
";
if (isset($_POST['edit_variant_btn'])) {
$variant = $_POST['product_size'];
$current_id = $_REQUEST['variant_id'];
$update_size = "UPDATE product_details SET size = '$variant' WHERE id = '$current_id'";
$run_update = mysqli_query($con, $update_size);
if ($run_update) {
echo "<script>window.open('variable_product.php?prod-name=Polycolor', '_self');</script>";
}
}
};
?>
Спасибо за ваше время, любая помощь приветствуется.
Обновлено: Я попробовал все изменения, которые вы все советовали, также попробовал $ _REQUEST ["option_id"], как сказал Бануджан Балендракумар, но все равно безрезультатно. Единственный способ заставить его работать - это изменить действие формы следующим образом:
<form action='' method='post'>
к
<form action='product_details.php?variant_id=$current_id' method='post'>
Таким образом, это работает, потому что при нажатии кнопки он открывает эту страницу и получает оттуда значение идентификатора, но это просто способ обойти проблему ... Есть другие идеи?
Я пробовал, но при получении идентификатора $ current_id = $ _GET ['variant_id']; он все равно не найдет и не выполнит запрос
Вы проверили id в консоли, если нет, то проверьте консоль: console.info(id)
Если это: $ current_id = $ _GET ['option_id'] быть: $ current_id = $ _POST ['variant_id'], поскольку ваш метод публикации - POST вместо GET .;
Все еще не работает
Отредактировал свой вопрос, зацените.






У меня работает ....
<div class = "table-container">
<div>
<table class = "myTable" id = "myTable">
<tr class = "header">
<th>Variants</th>
<th>Size</th>
<th>Price (€)</th>
</tr>
<?php
$con = new mysqli('localhost','root','','check');
$get_product_det = "SELECT * FROM product_details ORDER BY position";
$run_product_det = mysqli_query($con, $get_product_det);
while ($row_product_det = mysqli_fetch_array($run_product_det)){
$id = $row_product_det['id'];
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];
$position = $row_product_det['position'];
echo "<tr data-index='$id' data-position='$position'>
<td><a id='$id'>$product_variant</a></td>
<td>$product_size</td>
<td>$product_price</td>
</tr>";
};
?>
</table>
</div>
<div class='product-det-div' id='product_details'>
<script>
var links = document.getElementsByTagName('a');
for (var i = 0, il = links.length; i < il; i++) {
links[i].onclick = function() {
var id = this.id;
var product_details = document.getElementById('product_details');
var request = new XMLHttpRequest();
request.open('POST', 'product_details.php?variant_id=' + id, true);
request.onreadystatechange = function() {
if (request.readyState === 4 & request.status === 200) {
product_details.innerHTML = request.responseText;
} else {
product_details.innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText;
}
};
request.send();
};
};
</script>
</div>
информация о продукте
<?php
$current_id = $_REQUEST['variant_id'];
$con = new mysqli('localhost','root','','check');
$get_product_det = "SELECT * FROM product_details WHERE id=$current_id";
$run_product_det = mysqli_query($con, $get_product_det);
while ($row_product_det = mysqli_fetch_array($run_product_det)){
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];
echo "
<form action='' method='post'>
<h2 style='margin-bottom: 20px;'>$product_variant</h2>
<div><label>Nome Prodotto</label><input value='$product_variant'></div>
<div><label>Dimensione</label><input value='$product_size' type='number' name='product_size'></div>
<div><label>Prezzo (€)</label><input value='$product_price' id='product_price' name='product_price'></div>
<button type='submit' name='edit_variant_btn'>Send</button>
</form>
";
if (isset($_POST['edit_variant_btn'])) {
$variant = $_POST['product_size'];
$current_id = $_REQUEST['variant_id'];
$update_size = "UPDATE product_details SET size = '$variant' WHERE id = '$current_id'";
$run_update = mysqli_query($con, $update_size);
if ($run_update) {
echo "<script>window.open('variable_product.php?prod-name=Polycolor', '_self');</script>";
}
}
};
?>
Друг, я просто скопировал / вставил тот же самый сценарий, который вы опубликовали, изменив значения базы данных $ con, как и мои, но все же форма не будет отправлена ... как у вас работает, я не могу понять
Привет, братан, можешь опубликовать снимок экрана консоли javascript?
Вы отправляете запрос POST, попробуйте изменить его на GET