[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: подтащить данные в инпуты без перезагрузки стра-цы
WisesT
Доброго дня!
Бьюсь вот над какой задачей...

Естьстраница следующего содержания
<?php
include("../config.php");
if($connect = mysql_connect($dbhost,$dbuser,$dbpassword)){
echo('yes');
}else{
echo('no');
}
if(mysql_select_db($dbname,$connect)){
echo('yes');
}else{
echo('no');
}
if(mysql_query($query, $connect)){
echo('yes');
}else{
echo($query);
}
if (isset($_POST['vvod'])) {
$kurier = $_POST['kurier'];
$nom_nak = $_POST['nom_nak'];

$value = implode("', '", $nom_nak);
$query = "UPDATE dostavki SET kurier='".$kurier."' WHERE nom_nak IN ('".$value."')";
mysql_query($query);
}
if(mysql_query($query, $connect)){
echo('yes');
}else{
echo($query);
}
?>
<form name="dostav" method="post" action="?">
<
tr>
<
td>Курьер</td>
<
td>
<
SELECT NAME="kurier" id="kurier">
<?php
require("../include/kuriers.txt");
?>
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
</
td>
</
tr>

<
table width="100%" border="1" id="_new_table" cellspacing="0">
<
tr align="center">
<
td>№ п/п</td>
<
td>№ Нак</td>
<
td>Получатель</td>
<
td>Улица</td>
<
td>Дом</td>
<
td>Кв.Оф</td>
<
td>Телефон</td>
<
td>Временные рамки</td>
<
td>Примечание</td>
<
td>Дата</td>
<
td>Время</td>
<
td>Фамилия</td>
<
td>Роспись</td>

</
tr>
</
table>

<
input type="button" value="+" onclick="new_line();">
<
input type="submit" name="vvod" value="Ввести">
<
script>
var count=0;
var table=document.getElementById('_new_table');
function new_line() {
count++;
var tbody = document.createElement('tbody');
table.appendChild(tbody);
tbody.innerHTML="<tr align='center'><td><input id='nom_pp' type='text' value='"+count+"' name='nom_pp[]' maxlength='2' size='5%'/></td><td><input id='nom_nak' type='text' name='nom_nak[]' maxlength='8' size='8'/></td><td><input id='poluchatel' type='text' name='poluchatel[]' maxlength='50' size='50'/></td><td><input id='ulitsa' type='text' name='ulitsa[]' maxlength='25' size='25'/></td><td><input id='dom' type='text' name='dom[]' maxlength='10' size='10'/></td><td><input id='kvof' type='text' name='kvof[]' maxlength='10' size='10'/></td><td><input id='tel'type='text' name='tel[]' maxlength='50' size='50'/></td><td><input id='vrem_ramki' type='text' name='vrem_ramki[]' maxlength='25' size='25'/></td><td><input id='primechaniya' type='text' name='primechaniya[]' maxlength='100' size='50'/></td><td><input id='data' type='text' name='data[]' maxlength='5' size='5'/></td><td><input id='vremya' type='text' name='vremya[]' maxlength='5' size='5'/></td><td><input id='familiya' type='text' name='familiya[]' maxlength='10' size='10'/></td><td><input id='rospis' type='text' name='rospis[]' maxlength='5' size='5'/></td></tr>";
}
</script>
</
form>

<
tr>
<
td>
</
td>
<
td>
</
td>
<
td>
</
td>
</
tr>

Посредством скрипта, в таблице добавляются новый строчки (с инпутами). Инпуты обьеденены в массивы.
Что делает страничка.

Сотрудник создает нужное колличество строк и в поля "№ накладной" вносит номера накладных. Далее выбирает курьера и по нажатию кнопки назначает всем этим накладным в БД курьера.
Все данные о накладных "получатель", "улица", "дом"... и тд есть в базе данных.

Нужно сделать следующее. Сотрудник ввел номера накладных. Нажал некую кнопку и в инпуты подтянулись данные из бд (если есть. Если нету - оставить пустым).

Возможно нужны не инпуты, но...
Чем-то подобный функционал у меня есть в форме ввода заказа. Там введя Фирму, сотрудник нажимает кнопку и из бд по имени фирмы подтаскивается ее адрес и телефон.
Делается это следующим скриптом.

<?
$dbname= "dimex";
$dbuser= "root";
$dbpassword="753951";
$dbhost= "localhost";
$connect = mysql_connect($dbhost,$dbuser,$dbpassword);
@mysql_select_db($dbname,$connect);
// mysql_query("SET NAMES 'utf-8'");
// mysql_query("SET CHARACTER SET 'cp1251'");



$act = $_POST['act'];
$what = $_POST['what'];
$what=iconv("UTF-8", "utf-8", "".addslashes($what)."");
if($act == "prov"){
$firma = mysql_query("select * from clients where firma='".$what."'");
if(mysql_num_rows($firma) != 0) {
$firm = mysql_fetch_array($firma);
$js .="$('#adress').val('".$firm['adress']."');";
$js .="$('#tel').val('".$firm['tel']."');";
$js .="$('#oplata1').val('".$firm['oplata1']."');";
}
else {
$js .="alert('Нету. Добавьте клиента через форму добавления.');";
}
}



echo $js;

?>


Писал его не я, но может это вам о чем-то скажет.

Нужно по сути реализовать тоже самое но для множества инпутов.

_ИЛИ ВОЗМОЖНО_ можно не через инпуты делать?

Буду очень благодарен за помощь.

п.с. Возможно что-то будет не ясно. Срашивайте:)



Спустя 22 минуты, 6 секунд (28.05.2012 - 10:30) Игорь_Vasinsky написал(а):
много данных в БД?

Спустя 6 минут, 54 секунды (28.05.2012 - 10:37) WisesT написал(а):
перечень полей которые нужно подтянуть

Получатель
Улица
Дом
Кв.Оф
Телефон
Временные рамки
Примечание

таблица с данными по накладным будет постоянно пополняться. Около 150-200 записей в день.
А что?

Спустя 4 минуты, 31 секунда (28.05.2012 - 10:41) Игорь_Vasinsky написал(а):
так. я бы сделал следущее. предполагается, что у каждой записи есть уникальный номер

я бы в оброботчике вытаскивал все нужное по номерам накладных, грузил это фоново в основную страницу с формой, делал бы DIV ID = №накладной и потом по этому № через innerHTML() вставлял в инпуты форм где есть совпадения. т.к. полей у одной накладной много - я бы делал даже DIV ID=name-№номер накладной, DIV ID=phone-№накладной и т.д. написал бы funcion (№накладной) - и ей бы всё делал.

Спустя 9 минут, 48 секунд (28.05.2012 - 10:51) WisesT написал(а):
обрати внимание. Единственное, что делает эта "форма" это назначает введенным номерам накладных - курьеров (дописывает их в БД)
Подтянуть данные о накладной мне нужно только для того, что бы потом распечатать эту страницу.

Раскажу чуток детальнее (может это как-то поможет).

Что есть сейчас.
Есть БД с номерами накладных и данными по этим накладным. Тамже есть пустое поле "курьер".
Есть страничка (код которой я выложил выше). Сотрудник берет некое колличество накладных. Ввводит из номера в поля на страничке (предварительно создав нужно колличетво строк).
Выбрал из селекта курьера. Нажал "Сохранить" и в БД в поле "Курьер" вписался выбраный курьер для этих накладных.

Но нужно дописать фичу, которая заполнила бы все поля на странице подтащив данные о накладных. А потом уже можно будет нажать кнопку и распечатать страницу (сделать этакий Доставочный лист).

Ввел номера накладных - подтянул о них информацию в поля (если есть) - распечатал - Сохранил в бд курьера.

Спустя 3 минуты, 52 секунды (28.05.2012 - 10:55) Игорь_Vasinsky написал(а):
ну я описал свой алгоритм уже, селект или инпут не важно, данные подставятся, так даже всё проще - получил список курьеров, собрал селект с опциЯми и один селект на все накладные можно использовать, выбирать и записывать.

Спустя 2 минуты, 30 секунд (28.05.2012 - 10:58) WisesT написал(а):
можешь написать, как это делается?

Спустя 9 минут, 43 секунды (28.05.2012 - 11:07) Игорь_Vasinsky написал(а):
во первых вё упрощается с использованием селекта

при выводе формы со списком накладных - можно сразу рисовать её с готовым селектом (курьерами), добавляя новую накладную - опять же ри совать её уже с селектом курьеров.

что тут сложного?

Спустя 3 минуты, 56 секунд (28.05.2012 - 11:11) WisesT написал(а):
Курьер назначается с этой страницы, а не при вводе.
Данные об накладных импортируются в бд с экселя.
Мне нужно только на основании номеров накладных сформировать доставочный лист на печать и вписать к этим накладным курьера.

Похоже ты не понял, что нужно. Прочти пожалуйста еще раз;)

Спустя 10 минут, 6 секунд (28.05.2012 - 11:21) Игорь_Vasinsky написал(а):
есть форма допустим с 5 накладными, сотрудник може увеличивать кол-во накладных в форме кнопочкой - он должен выбрать и назначить курьера для каждой накладной. - так? накладные в БД, список курьеров тоже - так?

Спустя 6 минут, 42 секунды (28.05.2012 - 11:28) WisesT написал(а):
нет. Он вносит номера накладных в инпуты (они в массиве). Выбирает из одного (общего) селекта курьера. Нажимает "Сохранить" и вуаля. В бд, нпротив указаных накладных дописан выбраный курьер. Это уже есть.

Единственно, что мне нужно, это подтянуть в таблицу (которая на странице) данные о введенных накладных. Для того, что бы можно было распечатать страницу. И все.

Спустя 1 минута, 19 секунд (28.05.2012 - 11:29) WisesT написал(а):
посмотри вот это.

АПД. по введенным номера накладных нужно только кодтянуть инфу (если есть) и все.

Спустя 14 минут, 56 секунд (28.05.2012 - 11:44) Игорь_Vasinsky написал(а):
так. вижу. не совсем юзабильно выходит.

удобней - когда добавляется накладная - запрашивать номер накладной (может даже автокомплит) - после выбора номера рисовать уже все остальные данные.

а на верху селект - должен быть уже сформирован при загрузке страницы.

и выходит - добавил не сколько накладных, указал курьера, id накладных передал в форме, принял и записал в БД вместе с эти курьером (id курьера)

Спустя 4 минуты, 3 секунды (28.05.2012 - 11:48) WisesT написал(а):
я похоже пока в живую не увижу - не пойму)
Напиши. Я посмотрю. Пока ничего не понял.

Как по-мне - так нормально)
ввел нужное колличество номеров. Подтащил по ним иформацию. Выбрал в селекте курьера. Распечатал. Нажал "сохранить" и ко всем накладным в бд записался курьер.

Спустя 6 минут, 48 секунд (28.05.2012 - 11:55) Игорь_Vasinsky написал(а):
у тя при заходе на страницу я вижу шапку таблицы, пустой селек и кнопки внизу

нажимаю + - добавляется строка с пустыми инпутами

вместо этого при нажатии на + - я бы промтом (js promt) - запросил номер накладной, ввел бы его, при нажатии на ок - выдернул бы все данные из БД по номеру введённой накладной - и так со всеми накладными.

селект курьеров - у тя формируется пустой - сделай чтоб при загрузке страницы - он уже формировался со списком курьеров.


что тут не понятного?

Спустя 17 минут, 8 секунд (28.05.2012 - 12:12) WisesT написал(а):
Цитата
селект курьеров - у тя формируется пустой - сделай чтоб при загрузке страницы - он уже формировался со списком курьеров.

это только пример моей страницы. Как видишь, там не все поля. Список курьеров у меня подтаскивается через include.

Цитата
вместо этого при нажатии на + - я бы промтом (js promt) - запросил номер накладной, ввел бы его, при нажатии на ок - выдернул бы все данные из БД по номеру введённой накладной - и так со всеми накладными.

кажется начинаю понимать. Но js мне вовсе не знаком. Можешь помочь с этим делом?

И да. Как будет с присвоением курьера к накладным в бд?

Спустя 18 минут, 51 секунда (28.05.2012 - 12:31) Игорь_Vasinsky написал(а):
тебе нужно ко всем накладным 1 курьер или к каждой?

Спустя 6 минут, 50 секунд (28.05.2012 - 12:38) WisesT написал(а):
к какждой накладной, введенной в этой форме.

ввели n накладных. выбрали курьера. и ко всм этим накладным в БД записался курьер такой-то.

Спустя 28 минут, 51 секунда (28.05.2012 - 13:07) bodja написал(а):
Обходим все инпуты в цикле и отправляем одним запросом,все равно идет на распечатку.

ЗЫ если я правильно понял biggrin.gif

Спустя 22 минуты, 11 секунд (28.05.2012 - 13:29) WisesT написал(а):
Да, но в инпуты нужно втащить инфу по накладной. Необязательно инпут. Как угодно. Абы было что распечатать:)

Спустя 1 час, 8 минут, 13 секунд (28.05.2012 - 14:37) bodja написал(а):
берем из таблицы данные накладной и впихиваем в инпуты.
Вообще динамическое добавление элементов их обработка на стороне клиента - это задача яваскрипта. На ПХП вы такое делать запаритесь.

Спустя 8 минут, 4 секунды (28.05.2012 - 14:45) WisesT написал(а):
а кто говорит о РНР. Прочтите шапку)

Спустя 42 минуты, 24 секунды (28.05.2012 - 15:28) inpost написал(а):
WisesT
Раздел:
Форум PHP программистов ► PHP практикум ► PHP + SQL

Спустя 6 минут, 31 секунда (28.05.2012 - 15:34) WisesT написал(а):
ок. куда переехать?

Спустя 7 минут, 33 секунды (28.05.2012 - 15:42) inpost написал(а):
WisesT
А зачем, тебе же ответили, динамически добавлять объекты по средством JS.

Спустя 5 минут, 13 секунд (28.05.2012 - 15:47) Игорь_Vasinsky написал(а):
вы чё ещё к реализации не приступили? читаем про Promt JS - понимаем что это такое, читаем мой пост касаемо PROMT - пытаемся состряпать.

Спустя 15 минут, 6 секунд (28.05.2012 - 16:02) WisesT написал(а):
Как создать prompt с запросом номера накладных - разобрался.
Но как теперь дорисовать в таблицу строку с данными по этому номеру нкладных?
<head>
<
script type="text/javascript">
<!--

function prompter() {
var nom_nak = prompt("Введите номер накладной (6 цыфр)", "")
alert ( "Вы ввели " + nom_nak + "!")
}
//-->
</script>

<input type="button" onclick="prompter()" value="Добавить накладную">

тоесть как использовать "nom_nak" из скрипта в РНР?

Спустя 1 час, 32 минуты, 58 секунд (28.05.2012 - 17:35) Игорь_Vasinsky написал(а):
берёшь эту переменную JS - делаешь из неё переменную PHP и шлёш в БД (безопасно) - получаешь выборку из БД и ставишь в инпуты аяксом.

Спустя 2 минуты, 3 секунды (28.05.2012 - 17:37) WisesT написал(а):
брррр... черт ногу сломает

Спустя 22 минуты, 9 секунд (28.05.2012 - 17:59) Игорь_Vasinsky написал(а):
)))) ну а как ты хотел. хочешь без рефреша - значит JS (ajax or jquery) + PHP

Спустя 15 часов, 2 минуты, 38 секунд (29.05.2012 - 09:02) WisesT написал(а):
а как на счет другого варианта...
Первая страничка.
textarea в которую вводятся номера накладных (разделитель - enter)
и кнопочка, после нажатия на которую, все номера передаются в запрос.
Из результатов запроса, на второй страничке выстраивается таблица с данными по этим номерам накладных + селект с курьерами.
на этой же странице кнопка распечатки + кнопка сохраняющая курьера к этим накладным.

?

п.с. Носью осенило)

Спустя 1 минута, 19 секунд (29.05.2012 - 09:03) Игорь_Vasinsky написал(а):
зачем так усложнять?

Спустя 2 минуты, 57 секунд (29.05.2012 - 09:06) WisesT написал(а):
ну, так ввел все номера накладных (скорее всего мы это будем делать сканером).
Тыркнул кнопку и выстроил таблицу с данными.

А если с промптом, то нужно вызывать диалоговое окно на каждую накладную.

Да и в моем варианте похоже только РНР нужно. А с JS (ajax or jquery) + PHP я практически не знаком.

Спустя 1 час, 8 минут, 5 секунд (29.05.2012 - 10:14) Игорь_Vasinsky написал(а):
http://www.hdkinozavr.ru/temp/orders/test.php


orders.txt

Номер|Содержимое|Откгрузил|Принял|Дата
2|Перчатки 2 пары|Иванов И.И.|Петров П.П.|22/12/11
2|Молоко 200 литров|Сидоров И.И.|Малютин П.П.|25/12/11
2|Кирпич 2000 штук|Иванчук И.И.|Петренко П.П.|26/12/11
2|Профнастил 15 листов|Григоренко И.И.|Сидарчук П.П.|22/12/11



<?php
header("Content-type: text/html; charset=utf-8");
//Выборка из БД по запросу аяксом
$orders = file('orders.txt');

echo '<script type="text/javascript">'.PHP_EOL;

echo 'order = [];'.PHP_EOL;

foreach($orders as $key=>$value)
{
$order = explode('|', $value);

if($key !== 0)
{
echo 'order['.$key.'] = ["'.$order[1].'", "'.$order[2].'", "'.$order[3].'"];'.PHP_EOL;
}
}


echo '</script>';
?>

<form action="" method="POST">
<
select name="agent">
<
option value="Курьер 1">Курьер 1</option>
<
option value="Курьер 2">Курьер 2</option>
<
option value="Курьер 3">Курьер 3</option>
<
option value="Курьер 4">Курьер 4</option>
<
option value="Курьер 5">Курьер 5</option>
</
select>
<
div id="creatitem"></div>
<
br />
<
button onclick="takeNum(); return false;"> + </button><input type="submit" value="Назначить курьера"/>
</
form>


<
script type="text/javascript">
function takeNum()
{
num = prompt('Введите номер накладной:');
creatitem = document.getElementById('creatitem');

if(order[num])
return creatitem.innerHTML = creatitem.innerHTML + '<input type="text" name="num[]" value="'+ num +'"><input type="text" name="wheris[]" value="'+ order[num][0] +'"><input type="text" name="from[]" value="'+ order[num][1] +'"><input type="text" name="to[]" value="'+ order[num][2] +'"><br />';
else
alert('Накладная с номером ' + num + ' не найдена!');
}

</script>

Спустя 4 минуты, 4 секунды (29.05.2012 - 10:18) Игорь_Vasinsky написал(а):
создаётся многомерный "массив" orders['номер накладной']['подробности'], остальное дело техники.

у тя проще - тебе нужно передават с promt JS в обработчик, делать выборку, смотреть что пришло и либо составлять строку с инпутами, либо ругаться.


после того как все накладные указаны, выбран курьер - форма знаешь как работает. - примешь весь POST - и запишешь всё куда надо.



это просто пример на файле.

Спустя 7 минут, 57 секунд (29.05.2012 - 10:26) WisesT написал(а):
Ого! Спасибо!
А как быть с накладными, которых нет в бд? в таком случае мне нужно добавлять строчку с пустыми полями (на странице).
Ну, а при сохранении курьера в бд - просто не реагировать на номер накладной, которой нет в бд.

П.С. Еще раз спасибо за код. Щас попробую подпилить под себя.

Спустя 4 минуты, 52 секунды (29.05.2012 - 10:31) Игорь_Vasinsky написал(а):
Цитата
alert('Накладная с номером ' + num + ' не найдена!');


заменяешь эту строку на

return creatitem.innerHTML = creatitem.innerHTML + '<input type="text" name="num[]" value="'+ num +'"><input type="text" name="wheris[]" value="'+ order[num][0] +'"><input type="text" name="from[]" value="'+ order[num][1] +'"><input type="text" name="to[]" value="'+ order[num][2] +'"><br />';



тока с пустыми инпутами



и потом - тебе нужно вытаскивать по 1й строке - именно по совпадению с номером накладной, если создаж такой же массив со всей выборкой - то повесишь браузер.


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

Спустя 18 минут, 43 секунды (29.05.2012 - 10:50) WisesT написал(а):
Капец, как с этими JS и Ajax все сложно. Хотя может из-за того что я сним не знаком =/
Давай по-порядку.
Есть у меня таблица dostavki со следующими полями
id (счетчик)
nom_nak (по которым мы делаем выборку)
poluchatel
ulitsa
dom
kvof
tel
vrem_ramki
primechaniya
kurier (сюда сохранится курьер, которого мы назначим)
status (сюда будет вписываться статус из отдельной формы редактирования)

В этой базе будут данные о накладных (не о всех).

Как его правильно написать, что бы оно делало выборку из бд по введеному номеру накладной + если этой накладной нет в БД - выводило пустую строчку?

Помоги, пожалуйста. А то я себе голову сломаю)

Спустя 19 минут, 51 секунда (29.05.2012 - 11:10) Игорь_Vasinsky написал(а):
уф. основы работы с аяксом тебе объяснять не стану. это нуторно. и с аяксом я сам мало работал.


так.


смотри, на данном этапе научись получать данные с обработчика - не перегружая страницу, для этого достаточно сгенерировать url на обработчик, а № наладной - передавай в GET - чтобы без труда считать его в обработчике, обработать и подставить в условие запроса в БД на выборку нужной строки с накладной и формирования JS массива.

т.е. к обработчику ты обратишся так:
 var url = 'getorder.php?num='  + num;


можешь не использовать чистый аякс, можешь попробывать с JQuery

Спустя 13 минут, 4 секунды (29.05.2012 - 11:23) WisesT написал(а):
таааксь.
А обработчик будет следующим

<?

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "******"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

$result = mysql_query("SELECT * FROM dostavki WHERE nom_nak=".$_GET['num']);
?>



Верно?

Спустя 1 минута, 1 секунда (29.05.2012 - 11:24) Игорь_Vasinsky написал(а):
result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` =".(int)$_GET['num']);


аяксом подкгружаешь весь контент обработчика на страницу с формой

а далее по моему примеру создаёшь JS массив

Спустя 5 минут, 4 секунды (29.05.2012 - 11:29) WisesT написал(а):
Погоди-погоди.
Создал я страницу с кодом из твоего поста с примером на кинозавре.
куда нужно вставить
var url = 'getorder.php?num='  + num;
?

Создал обработчик obrabotchik.php

Спустя 10 минут, 46 секунд (29.05.2012 - 11:40) Игорь_Vasinsky написал(а):
)))


лан вот инструмент для получения контента обработчика (да любой страницы) без рефреша


Свернутый текст
 <script type="text/javascript" >

function showContent(link) {



var cont = document.getElementById('contentBody');

var loading = document.getElementById('loading');



cont.innerHTML = loading.innerHTML;



var http = createRequestObject();

if( http )

{

http.open('get', link);

http.onreadystatechange = function ()

{

if(http.readyState == 4)

{

cont.innerHTML = http.responseText;

}

}


http.send(null);

}

else

{

document.location = link;

}

}




// создание ajax объекта

function createRequestObject()

{

try { return new XMLHttpRequest() }

catch(e)

{

try { return new ActiveXObject('Msxml2.XMLHTTP') }

catch(e)

{

try { return new ActiveXObject('Microsoft.XMLHTTP') }

catch(e) { return null; }

}

}

}


</script>


создай на странице формы два div , один с id = contentBody - сюда выгрузится всё полученное с обработчика, 2й с id = loading - будет показывать момент получения данных.


тебе нужно с promt JS - получить номер накладной и подставить (вызвать функцию)

showContent('/obrabotchik.php?num=' + num); 



НО. нужно разбить мою первую функцию - на 2 части: 1 - получить с promt JS - num и вызвать
showContent('/obrabotchik.php?num=' + num); 


а вторую половину собрать в обработчике с GET вместо promt, собрать массив.


как нянька ей богу.

Спустя 6 минут, 50 секунд (29.05.2012 - 11:46) WisesT написал(а):
Открыл я первый спойлер и (О_О)
мне аж поплохело)

может ты его соберешь до кучи? у меня уже рука к пистолету тянется. А я ж только читаю.

Спустя 1 минута, 42 секунды (29.05.2012 - 11:48) Игорь_Vasinsky написал(а):
biggrin.gif biggrin.gif biggrin.gif

Спустя 15 минут, 4 секунды (29.05.2012 - 12:03) Игорь_Vasinsky написал(а):
ЗАПУСТИ ЧТОБЫ ПОНЯТЬ ЧТО ПРОИСХОДИТ

ФОРМА

<?php
header("Content-type: text/html; charset=utf-8");
?>
<html>
<
head>
<
script type="text/javascript" >
function showContent(link) {
var cont = document.getElementById('contentBody');
var loading = document.getElementById('loading');

cont.innerHTML = loading.innerHTML;

var http = createRequestObject();

if( http )
{
http.open('get', link);

http.onreadystatechange = function ()
{
if(http.readyState == 4)
{
cont.innerHTML = http.responseText;
}
}

http.send(null);
}
else
{
document.location = link;
}
}


// создание ajax объекта

function createRequestObject()
{
try { return new XMLHttpRequest() }
catch(e)

{
try { return new ActiveXObject('Msxml2.XMLHTTP') }
catch(e)
{
try { return new ActiveXObject('Microsoft.XMLHTTP') }
catch(e) { return null; }
}
}
}


<!--Получили номер накладной -->
function takeNum()
{
num = prompt('Введите номер накладной:');

/**Подставили номер и сфорировали GET в обработчик */
showContent('obrabotchik.php?num=' + num);

}

</script>
</
head>
<
body>
<
form action="" method="POST">
<
select name="agent">
<
option value="Курьер 1">Курьер 1</option>
<
option value="Курьер 2">Курьер 2</option>
<
option value="Курьер 3">Курьер 3</option>
<
option value="Курьер 4">Курьер 4</option>
<
option value="Курьер 5">Курьер 5</option>
</
select>
<
div id="creatitem"></div>
<
br />
<
button onclick="takeNum(); return false;"> + </button><input type="submit" value="Назначить курьера"/>
</
form>
<
div id="contentBody"></div>
<
div id="loading"></div>
</
body>
</
html>


obrabotchik.php

<?php
echo $_GET['num'];
// + выборка из БД
// + Формирование массива JS по аналогии с

/**
echo '
<script type="text/javascript">'.PHP_EOL;

echo 'order = [];'.PHP_EOL;

foreach($orders as $key=>$value)
{
$order = explode('|', $value);

if($key !== 0)
{
echo 'order['.$key.'] = ["'.$order[1].'", "'.$order[2].'", "'.$order[3].'"];'.PHP_EOL;
}
}
echo '
</script>';
*/

?>

Спустя 1 минута, 14 секунд (29.05.2012 - 12:04) Игорь_Vasinsky написал(а):
понятно? тут уже бутылкой не отмажешься.

Спустя 12 минут, 38 секунд (29.05.2012 - 12:17) WisesT написал(а):
таксь. Приняли в промпт номер накладной. Передали его в обработчик. Поскольку там все закомментировано и есть только
echo $_GET['num'];
мы из него вернули только "напечатать num".

Тоесть в обработчике вместо echo $_GET['num']; нужно написать выборку.
Тоесть теперь обработчик будет выглядеть вот так


<?

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "******"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

//Делаем выборку по num принятому из страницы
$result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` =".(int)$_GET['num']);
?>


Сделали мы запрос. Результат засунули в $result.
А как теперь перекинуть его в нашу страницу так, что бы отобразилась строчка таблицы?

П.С.
Цитата
тут уже бутылкой не отмажешься.
=) сообразим

Спустя 13 минут, 38 секунд (29.05.2012 - 12:31) Игорь_Vasinsky написал(а):

<?php
$num = isset($_GET['num']) ? (int)$_GET['num'] : false;

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "******"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";


if($num)
{
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

//Делаем выборку по num принятому из страницы
$result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` = ".$num." LIMIT 1");

if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);

echo '<script type="text/javascript">'.PHP_EOL;


echo 'order = [];'.PHP_EOL;

echo 'order['.$num.'] = ["'.$row['ячейка1'].'", "'.$row['ячейка2'].'", "'.$row['ячейка3'].'"];'.PHP_EOL;

echo '</script>';
}
///Если совпадения по номеру не найдено - то элемент объектк order[n] - не создастся и эта функция на странице с формой сработает как нужно.

/**
function takeNum()
{
num = prompt('Введите номер накладной:');

showContent('obrabotchik.php?num=' + num);

creatitem = document.getElementById('creatitem');

if(order[num])
return creatitem.innerHTML = creatitem.innerHTML + '
<input type="text" name="num[]" value="'+ num +'"><input type="text" name="wheris[]" value="'+ order[num][0] +'"><input type="text" name="from[]" value="'+ order[num][1] +'"><input type="text" name="to[]" value="'+ order[num][2] +'"><br />';
else
alert('Накладная с номером ' + num + ' не найдена!');
}

</script>
*/
}
?>

Спустя 7 минут, 49 секунд (29.05.2012 - 12:39) WisesT написал(а):
function takeNum() так и должна бить заслешована?

АПД.
и
 echo 'order['.$num.'] = ["'.$row['ячейка1'].'", "'.$row['ячейка2'].'", "'.$row['ячейка3'].'"];'.PHP_EOL;

я так понимаю это вывод содерижмого полей записи?
тоесть
 echo 'order['.$num.'] = ["'.$row['nom_nak'].'", "'.$row['poluchatel'].'", "'.$row['ulitsa'].'"];'.PHP_EOL;

и тд.
правильно понял?

Спустя 14 минут, 56 секунд (29.05.2012 - 12:53) Игорь_Vasinsky написал(а):
Цитата
я так понимаю это вывод содерижмого полей записи?
тоесть

да.

echo 'order['.$num.'] = ["'.$row['nom_nak'].'", "'.$row['poluchatel'].'", "'.$row['ulitsa'].'"];'.PHP_EOL;
редактор ошибку не подсвечивает.

Спустя 8 минут, 7 секунд (29.05.2012 - 13:02) WisesT написал(а):
что-то не получается.

Страница dost_list1.php
Свернутый текст

<?php
header("Content-type: text/html; charset=utf-8");
?>
<html>
<
head>
<
script type="text/javascript" >
function showContent(link) {
var cont = document.getElementById('contentBody');
var loading = document.getElementById('loading');

cont.innerHTML = loading.innerHTML;

var http = createRequestObject();

if( http )
{
http.open('get', link);

http.onreadystatechange = function ()
{
if(http.readyState == 4)
{
cont.innerHTML = http.responseText;
}
}

http.send(null);
}
else
{
document.location = link;
}
}


// создание ajax объекта

function createRequestObject()
{
try { return new XMLHttpRequest() }
catch(e)

{
try { return new ActiveXObject('Msxml2.XMLHTTP') }
catch(e)
{
try { return new ActiveXObject('Microsoft.XMLHTTP') }
catch(e) { return null; }
}
}
}


<!--Получили номер накладной -->
function takeNum()
{
num = prompt('Введите номер накладной:');

/**Подставили номер и сфорировали GET в обработчик */
showContent('obrabotchik.php?num=' + num);

}

</script>
</
head>
<
body>
<
form action="" method="POST">
<
select name="agent">
<
option value="Курьер 1">Курьер 1</option>
<
option value="Курьер 2">Курьер 2</option>
<
option value="Курьер 3">Курьер 3</option>
<
option value="Курьер 4">Курьер 4</option>
<
option value="Курьер 5">Курьер 5</option>
</
select>
<
div id="creatitem"></div>
<
br />
<
button onclick="takeNum(); return false;"> + </button><input type="submit" value="Назначить курьера"/>
</
form>
<
div id="contentBody"></div>
<
div id="loading"></div>
</
body>
</
html>



obrabotchik.php
Свернутый текст

<?php
$num = isset($_GET['num']) ? (int)$_GET['num'] : false;

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "753951"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";


if($num)
{
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

//Делаем выборку по num принятому из страницы
$result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` = ".$num." LIMIT 1");

if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);

echo '<script type="text/javascript">'.PHP_EOL;


echo 'order = [];'.PHP_EOL;


echo 'order['.$num.'] = ["'.$row['nom_nak'].'", "'.$row['poluchatel'].'", "'.$row['ulitsa'].'"];'.PHP_EOL;
echo '</script>';
}
///Если совпадения по номеру не найдено - то элемент объектк order[n] - не создастся и эта функция на странице с формой сработает как нужно.

/**
function takeNum()
{
num = prompt('Введите номер накладной:');

showContent('obrabotchik.php?num=' + num);

creatitem = document.getElementById('creatitem');

if(order[num])
return creatitem.innerHTML = creatitem.innerHTML + '
<input type="text" name="num[]" value="'+ num +'"><input type="text" name="wheris[]" value="'+ order[num][0] +'"><input type="text" name="from[]" value="'+ order[num][1] +'"><input type="text" name="to[]" value="'+ order[num][2] +'"><br />';
else
alert('Накладная с номером ' + num + ' не найдена!');
}

</script>
*/
}
?>



Где напортачил - не пойму.

Спустя 2 минуты, 24 секунды (29.05.2012 - 13:04) Игорь_Vasinsky написал(а):
не читабильно. сделай 2 поста по листингу с подсветкой.

Спустя 27 минут, 5 секунд (29.05.2012 - 13:31) Игорь_Vasinsky написал(а):
<?php
$num = isset($_GET['num']) ? (int)$_GET['num'] : false;

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "753951"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";


if($num)
{
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

//Делаем выборку по num принятому из страницы
$result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` = ".$num." LIMIT 1");

if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);

echo '<script type="text/javascript">'.PHP_EOL;


echo 'order = [];'.PHP_EOL;


echo 'order['.$num.'] = ["'.$row['nom_nak'].'", "'.$row['poluchatel'].'", "'.$row['ulitsa'].'"];'.PHP_EOL;
echo '</script>';
}
?>


чё бардак то устроил...

Спустя 1 час, 7 минут, 39 секунд (29.05.2012 - 14:39) WisesT написал(а):
номер накладной запрашивает. Но после ввода ничего не выводит.
Сообщение об ошибке не бьет. просто молчит.

Спустя 13 минут, 14 секунд (29.05.2012 - 14:52) Игорь_Vasinsky написал(а):
<!--Получили номер накладной -->
function takeNum()
{
num = prompt('Введите номер накладной:');

/**Подставили номер и сфорировали GET в обработчик */
showContent('obrabotchik.php?num=' + num);

alert(order[num][1]);
}


что говорит???

ошибки JS в консоле есть?

Спустя 19 минут (29.05.2012 - 15:11) WisesT написал(а):
в браузере ничего не говорит. Просто сьедает номер, который ввел и все.
К логам пока доступа нет (но если критично - могу постараться)

АПД. Погоди ка...

Спустя 7 минут, 31 секунда (29.05.2012 - 15:18) WisesT написал(а):
Нет, ничего не делает. С твоим "дописаным" кодом браузер глотает введенный номер накладной, но ничего не выводит. Страничка обновляется на мгновение. И все.

Спустя 1 минута, 54 секунды (29.05.2012 - 15:20) Игорь_Vasinsky написал(а):
в хроме открой - F12 - консоль - там все ошибки JS

Спустя 3 минуты, 48 секунд (29.05.2012 - 15:24) WisesT написал(а):
Что-то проскакивает,но неуспеваю прочитать biggrin.gif

Спустя 52 секунды (29.05.2012 - 15:25) WisesT написал(а):
Uncaught ReferenceError: order is not defined
dost_list.php
Свернутый текст


<?php
header("Content-type: text/html; charset=utf-8");
?>
<html>
<
head>
<
script type="text/javascript" >
function showContent(link) {
var cont = document.getElementById('contentBody');
var loading = document.getElementById('loading');

cont.innerHTML = loading.innerHTML;

var http = createRequestObject();

if( http )
{
http.open('get', link);

http.onreadystatechange = function ()
{
if(http.readyState == 4)
{
cont.innerHTML = http.responseText;
}
}

http.send(null);
}
else
{
document.location = link;
}
}


// создание ajax объекта

function createRequestObject()
{
try { return new XMLHttpRequest() }
catch(e)

{
try { return new ActiveXObject('Msxml2.XMLHTTP') }
catch(e)
{
try { return new ActiveXObject('Microsoft.XMLHTTP') }
catch(e) { return null; }
}
}
}


<!--Получили номер накладной -->
function takeNum()
{
num = prompt('Введите номер накладной:');

/**Подставили номер и сфорировали GET в обработчик */
showContent('obrabotchik.php?num=' + num);

alert(order[num][1]);
}
</script>
</
head>
<
body>
<
form action="" method="POST">
<
select name="agent">
<
option value="Курьер 1">Курьер 1</option>
<
option value="Курьер 2">Курьер 2</option>
<
option value="Курьер 3">Курьер 3</option>
<
option value="Курьер 4">Курьер 4</option>
<
option value="Курьер 5">Курьер 5</option>
</
select>
<
div id="creatitem"></div>
<
br />
<
button onclick="takeNum(); return false;"> + </button><input type="submit" value="Назначить курьера"/>
</
form>
<
div id="contentBody"></div>
<
div id="loading"></div>
</
body>
</
html>




obrabotchik.php
Свернутый текст


<?php
$num = isset($_GET['num']) ? (int)$_GET['num'] : false;

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = "753951"; // пароль пользователя
$dbName = "dimex"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "dostavki";


if($num)
{
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

//Делаем выборку по num принятому из страницы
$result = mysql_query("SELECT * FROM `dostavki` WHERE `nom_nak` = ".$num." LIMIT 1");

if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);

echo '<script type="text/javascript">'.PHP_EOL;


echo 'order = [];'.PHP_EOL;


echo 'order['.$num.'] = ["'.$row['nom_nak'].'", "'.$row['poluchatel'].'", "'.$row['ulitsa'].'"];'.PHP_EOL;
echo '</script>';
}
?>



Спустя 4 минуты, 9 секунд (29.05.2012 - 15:29) Игорь_Vasinsky написал(а):
так. объект order - содался в обработчике и повешен динамически в файл формы.

либо ты чё то намутил с JS

строку покажи с ошибкой.

Спустя 4 минуты, 52 секунды (29.05.2012 - 15:34) WisesT написал(а):
жаулется на 56

но 56 это

Цитата
  /**Подставили номер и сфорировали GET в обработчик */

Спустя 7 минут, 16 секунд (29.05.2012 - 15:41) Игорь_Vasinsky написал(а):
))) нееет.

так. проблема с видимостью динамического объекта JS может быть.

запусти обработчик сразу, зделай вывод из БД

так запускай

obrabotchik.php?num=номер существующей анкеты, посмотри есть ли ошибки JS

Спустя 9 минут, 34 секунды (29.05.2012 - 15:51) WisesT написал(а):
Сделал вот так

showContent('obrabotchik.php?num=2');

запускаю dost_list.php - ничего нового не отображает. В бд есть 5 записей 1 2 3 4 5

UPD. А если в браузере вписать,то в консоли выдает

GET http://192.168.1.165/kniga_dostavok/obrabotchik.php?num=2 500 (Internal Server Error)

а страничка не грузится.

АПД 2. Ну его. Перекур. Давай завтра. Я с ума сойду.

Спустя 1 час, 8 минут, 47 секунд (29.05.2012 - 17:00) Игорь_Vasinsky написал(а):
))) я уже с работы успел домой попасть.

Цитата
UPD. А если в браузере вписать,то в консоли выдает

GET http://192.168.1.165/kniga_dostavok/obrabotchik.php?num=2 500 (Internal Server Error)


да ну... файл с кодом есть же.

я тебе говорю - ты сделай вывод на php из бд по выборке, если false или null - вернулось из БД - object order - пустой

Спустя 19 часов, 3 минуты, 8 секунд (30.05.2012 - 12:03) bodja написал(а):
Игорь_Vasinsky
Особенность аякса в том ,что он яваскрипт загружает как данные ,но он его не выполняет. rolleyes.gif
Вам нужно или распарсить скрипт и выполнить через eval или принять JSON и тоже выполнить через eval .
innerHTML вам здесь не поможет.

Спустя 21 час, 29 минут, 52 секунды (31.05.2012 - 09:33) WisesT написал(а):
Цитата (Игорь_Vasinsky @ 29.05.2012 - 14:00)
))) я уже с работы успел домой попасть.

Цитата
UPD. А если в браузере вписать,то в консоли выдает

GET http://192.168.1.165/kniga_dostavok/obrabotchik.php?num=2 500 (Internal Server Error)


да ну... файл с кодом есть же.

я тебе говорю - ты сделай вывод на php из бд по выборке, если false или null - вернулось из БД - object order - пустой

Делаю

$result = mysql_query("SELECT * FROM dostavki where nom_nak=2 LIMIT $start, $num");

Что-то вроде странички вывода инфы о накладных - откликается и выдает результат.
А наша сраничка, почему-то мертва.
Попробуем разобраться?

Спустя 20 минут, 20 секунд (31.05.2012 - 09:53) Игорь_Vasinsky написал(а):
пробывал, bodja прав - данные поймать не смог. пробывал с сессиями php, тоже половинно работает, но просто не допиливал. Видимо нужно всё таки пересмотреть формат данных и юзать json. щас буду тестить. есть часик.

Спустя 3 минуты, 24 секунды (31.05.2012 - 09:56) WisesT написал(а):
буду очень благодарен.

П.С. На всякий случай напомню второй вариант, может окажется легче.
textarea с введенными в нее номерами накладных через enter.
Дальше как-то запихнуть их в выборку, и по результатам выстроить таблицу. Нет?
Туту вроде только РНР нужно, это мне чуть более знакома. Только как вот правильно передать этот набор номеров накладных и как сделать выборку?

Спустя 27 минут, 58 секунд (31.05.2012 - 10:24) Игорь_Vasinsky написал(а):
зачем лишние телодвижения на клиенте? я имею ввиду что данные с текстареи придётся распарсивать регуляркой + работать в цикле потом на JS.

последовательность - если опираться на неё можно сделать удобный интерфейс используя promt js/

Спустя 53 минуты, 21 секунда (31.05.2012 - 11:18) Игорь_Vasinsky написал(а):
не. я пас. с json не работал вообще, не было такой необходимости. башка кипит.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.