Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.11.2017, 18:58
Аспирант
Отправить личное сообщение для maksqwerty Посмотреть профиль Найти все сообщения от maksqwerty
 
Регистрация: 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 )
Буду признателен за помощь
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2017, 22:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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"]." .... ?
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2017, 11:26
Аспирант
Отправить личное сообщение для maksqwerty Посмотреть профиль Найти все сообщения от maksqwerty
 
Регистрация: 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 (хотя смотрю в пост, и должны проходить теперь только нормальные данные).
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2017, 11:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Четко по пунктам можно?

А я и не обращаюсь к ИД, я обращаюсь к столбцу групп - очень печально, если база данных спроектирована так, что к ее числовым данным нужно обращать посредством LIKE, это никуда не годится.

А далее вообще не понятно о чем речь.
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2017, 13:25
Аспирант
Отправить личное сообщение для maksqwerty Посмотреть профиль Найти все сообщения от maksqwerty
 
Регистрация: 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 (даже я перезагружу страницу, они тоже будут там, перед выполнением скрипта)
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2017, 13:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от maksqwerty
и у каждого одна из этих четырёх групп
От 0 до 4, это пять значений будет, а не четыре.

Я не понимаю о чем речь, увы, все скомкано. Может быть проще описать что нужно сделать? Например, в базе выбрать записи значения в поле Х которых равно N, где N передается параметром запроса. Эти записи передать клиенту в таком-то формате.

А так не понять чего, что и к чему.

Последний раз редактировалось laimas, 30.11.2017 в 13:34.
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2017, 13:39
Аспирант
Отправить личное сообщение для maksqwerty Посмотреть профиль Найти все сообщения от maksqwerty
 
Регистрация: 03.11.2017
Сообщений: 58

Окей,
в базе есть таблица, в которой много элементов,
на странице есть два селекта,
в одном мы выбирает кое-что с другой таблицы (что именно - не важно, важно, что <option value = 0>/<option value = 1>/<option value = 2>/<option value = 3>/<option value = 4>)
Идея такая, при выборе с первого селекта, с базы во второй селект попадают элементы, у которые значение одного столбца в бд =<option value = > первого селекта (т.е класс опции второго селекта равен значению опции первого).
так то нужно сделать такую выборку по двум параметрам (ещё есть третий селект), но я сперва хочу на этом "простом" случае разобратся
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2017, 14:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Жаль что нет смайлика "Страдающий Роден". )
Вот что это такое т.е класс опции второго селекта равен значению опции первого и как это понимать в свете рассказанного об опциях?
Ответить с цитированием
  #9 (permalink)  
Старый 30.11.2017, 14:30
Аспирант
Отправить личное сообщение для maksqwerty Посмотреть профиль Найти все сообщения от maksqwerty
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 30.11.2017, 14:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от maksqwerty
Видно, что у первого селекта значения такое же, как у некоторых опций во втором
Где это видно, если опции второго списка вообще не имеют значений? Имя класса не может быть цифрой.

Допустим, вы хотите связать нечто во втором списке при выборе в первом, но что это означает и причем тут ответ сервера?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление вывода PHP по таймеру с помощью Ajax не работает в Internet Explorer Макс1 AJAX и COMET 6 02.09.2015 17:11
Ajax при заходе на страницу из поисковика - не работает Алексей_ГР Ваши сайты и скрипты 2 03.09.2013 00:03
Не работает ajax в паре с jquery DedMa3ajjj AJAX и COMET 1 01.09.2013 14:15
Ajax + PHP + MySQL MadChild AJAX и COMET 2 03.07.2013 17:14
Передать данные через ajax в php djonA Общие вопросы Javascript 3 03.04.2013 00:07