
29.11.2017, 18:58
|
Аспирант
|
|
Регистрация: 03.11.2017
Сообщений: 58
|
|
ajax+php некоректно работает POST
Всем привет, вот мой ajax
function showKostenstelle()
{
var matType = document.getElementById("erzeugnisart").value;
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
var kstgrp = "kstgrp=" + matType;
xhr.open("POST", "pos/kosten.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(kstgrp);
xhr.onreadystatechange = display_data;
function display_data() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
//alert(xhr.responseText);
document.getElementById("kostenstelle1").value = xhr.responseText;
} else {
alert('There was a problem with the request.');
}
}
}
}
A вот и сам PHP
<?php
include ("../db/connect.php");
$sql = "SELECT * FROM kosttable WHERE kstgrp LIKE '$kstgrp%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<option class=".$row"kstgrp"]." id=".$row["id"]." name= ".$row["fkto"]." value=".$row["kostvalue"].">".$row["test"]."</option> ";
} }
?>
Файл с id = 'erzeugnisart' тоже select, у которого value от 0 до 4
Т.е я выбираю что-то с значением "1", и в селекте kostenstelle1 у меня будут только элементы, у которых в бд kstgrp = 1;
Но при выполнении этого скрипта ничего не происходит
(ну если посмотреть в f12, то видно, что пост прошёл, в посте kstgrp 1, но в ответ приходят все элементы (у которых kstgrp от 0 до 4 )
Буду признателен за помощь 
|
|

29.11.2017, 22:25
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сервер получит не $kstgrp, а $_POST['$kstgrp'], и LIKE здесь совсем не нужен. А так как в базе не может быть первичного ключа (похоже запрос по нему?) равного 0, то список не должен иметь такого значения тоже.
if($id = (int)$_POST['$kstgrp']) { //обязательно приводить к типу или экранировать внешние данные, либо использовать подготовленные запросы
$sql = "SELECT * FROM kosttable WHERE kstgrp=" . $id;
//.....
}
Вот только как это понимать, что ответ сервера на клиенте помещается сюда
document.getElementById("kostenstelle1"). value = xhr.responseText;
при ответе сервера
echo " <option class=".$row"kstgrp"]." id=".$row["id"]." .... ?
|
|

30.11.2017, 11:26
|
Аспирант
|
|
Регистрация: 03.11.2017
Сообщений: 58
|
|
А я и не обращаюсь к ИД, я обращаюсь к столбцу групп (несколько элементов с значением 0, несколько с 1 и тд..)
Цитата:
|
Вот только как это понимать, что ответ сервера на клиенте помещается сюда
document.getElementById("kostenstelle1").value = xhr.responseText;
|
Это же делается после передачи данных в пхп (там alert закоментирован, иногда смотрю (но эсли ту часть, что исполняется после передачы данных удалить, то скрипт тоже работает))
<?php
include ("../db/connect.php");
$kstgrp = (int)$_POST['kstgrp'];
$sql = "SELECT * FROM kosttable WHERE kstgrp=".$kstgrp;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<option class=".$row"kstgrp"]." id=".$row["id"]." name= ".$row["fkto"]." value=".$row["kostvalue"].">".$row["test"]."</option> ";
} }
?>
Пхп скрипт написал вот так (1
if($id = (int)$_POST['$kstgrp']) { не писал, так как чёт не работает :С)
Но теперь в любом случае возвращаются в Селект данные, где kstgrp = 0 (хотя смотрю в пост, и должны проходить теперь только нормальные данные).
|
|

30.11.2017, 11:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Четко по пунктам можно?
А я и не обращаюсь к ИД, я обращаюсь к столбцу групп - очень печально, если база данных спроектирована так, что к ее числовым данным нужно обращать посредством LIKE, это никуда не годится.
А далее вообще не понятно о чем речь.
|
|

30.11.2017, 13:25
|
Аспирант
|
|
Регистрация: 03.11.2017
Сообщений: 58
|
|
1. БД делал не я (и, к сожалению, ничего там изменить не могу, эти данные потом уходят в САП,т.е изменить нельзя)
2. Ну в этой таблице есть столбец kstgrp, и значения могут быть 0 .. 4
Ну элементов в таблице около 300, и у каждого одна из этих четырёх групп
3.
function showKostenstelle()
{
var matType = document.getElementById("erzeugnisart").value;
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
var kstgrp = "kstgrp=" + matType;
xhr.open("POST", "pos/kosten.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(kstgrp);}
Этот скрипт тоже работает функция display_data только нужна, что бы в самом скрипте посмотреть, какие данные передаются.
4. А вот с пхп проблема  если в выполнить этот ajax скрипт с второй функцией, то алернт показывает, что проходят данные с той группой (0 .. 4), которую мы выбрали.
Если посмотреть, какие данные передаются через POST, то там тоже всё нормально.
А в самом селекте в любом случае (что бы я не делал), всегда лежат данные с kstgrp 0 (даже я перезагружу страницу, они тоже будут там, перед выполнением скрипта)
|
|

30.11.2017, 13:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от maksqwerty
|
и у каждого одна из этих четырёх групп
|
От 0 до 4, это пять значений будет, а не четыре.
Я не понимаю о чем речь, увы, все скомкано. Может быть проще описать что нужно сделать? Например, в базе выбрать записи значения в поле Х которых равно N, где N передается параметром запроса. Эти записи передать клиенту в таком-то формате.
А так не понять чего, что и к чему.
Последний раз редактировалось laimas, 30.11.2017 в 13:34.
|
|

30.11.2017, 13:39
|
Аспирант
|
|
Регистрация: 03.11.2017
Сообщений: 58
|
|
Окей,
в базе есть таблица, в которой много элементов,
на странице есть два селекта,
в одном мы выбирает кое-что с другой таблицы (что именно - не важно, важно, что <option value = 0>/<option value = 1>/<option value = 2>/<option value = 3>/<option value = 4>)
Идея такая, при выборе с первого селекта, с базы во второй селект попадают элементы, у которые значение одного столбца в бд =<option value = > первого селекта (т.е класс опции второго селекта равен значению опции первого).
так то нужно сделать такую выборку по двум параметрам (ещё есть третий селект), но я сперва хочу на этом "простом" случае разобратся
|
|

30.11.2017, 14:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Жаль что нет смайлика "Страдающий Роден". )
Вот что это такое т.е класс опции второго селекта равен значению опции первого и как это понимать в свете рассказанного об опциях?
|
|

30.11.2017, 14:30
|
Аспирант
|
|
Регистрация: 03.11.2017
Сообщений: 58
|
|
<select id= name=первый селект >
<option value = 0>
<option value = 1>
<option value = 2>
<option value = 3>
<option value = 4>
</select>
<select id= name=второй селект >
<option class = 0><option class = 0><option class = 0>
<option class = 1><option class = 1><option class = 1>
<option class = 2><option class = 2><option class = 2>
<option class = 3><option class = 3><option class = 3>
<option class = 4><option class = 4><option class = 4>
</select>
Вот примерно так выглядит
Видно, что у первого селекта значения такое же, как у классов некоторых опций во втором
(но эти данные берутся с бд)
Последний раз редактировалось maksqwerty, 30.11.2017 в 14:34.
|
|

30.11.2017, 14:35
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от maksqwerty
|
Видно, что у первого селекта значения такое же, как у некоторых опций во втором
|
Где это видно, если опции второго списка вообще не имеют значений? Имя класса не может быть цифрой.
Допустим, вы хотите связать нечто во втором списке при выборе в первом, но что это означает и причем тут ответ сервера?
|
|
|
|