[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка по номерам введенным в TEXTAREA
WisesT
Доброго дня, товарищи!

Есть у меня вот такая страничка, которая передает методом POST номера накладных, введенных в TEXTAREA через Enter.
nom_nak.php
<html>
<head>
<title>
Номера накладных</title>
</head>
<body>
<form
action="list.php" method="post">
<p><b>
Введите до 15 номеров накладных через Enter:</b></p>
<textarea
cols="10" rows="15" name="nom_nak" id="nom_nak">
Тут будут номера накладных через Enter
</textarea>
<INPUT
TYPE="submit" VALUE="Сделать выборку">
</form>
</body>
</html>

Данные передаются страничке list.php:
<?php

echo $_POST['nom_nak'];
?>

Подскажите, как правильно обработать номера накладных, чтобы можно было сделать выборку по этим номерам и вывести таблицу с результатом запроса?

Вопрос номер два.
Как сделать следующее. Если в таблице не обнаружено записи с таким номером накладной - вывести в таблице результатов пустую строчку (только с номером накладной).

Вопрос номер три (вытекающий):
Потом нужно бдует во всех записях с этими номерами накладных дописать в поле kerier курьера, которого нужно будет выбрать из селекта. Как правильнее?

Буду благодарен за подсказки.



Спустя 1 час, 6 минут, 9 секунд (5.06.2012 - 12:11) vagrand написал(а):

// Разбиваем номера и приводим к типу int
$numbers = array_map('intval', explode("\n", $_POST['nom_nak']));

$result = mysql_query('select * from table where nak_id in (' . join(',', $numbers) . ')');
while ($row = mysql_fetch_assoc($result)) {
var_dump($row);
}

Спустя 16 минут, 21 секунда (5.06.2012 - 12:27) WisesT написал(а):
Щаз попробуем! Спасибо!

А как выводить результат из такого массива? ph34r.gif
АПД. Тю, затупил. Все просто;)

Спустя 10 минут, 3 секунды (5.06.2012 - 12:37) WisesT написал(а):
А как со вторым вопросом?

Спустя 1 час, 49 минут, 9 секунд (5.06.2012 - 14:26) killer8080 написал(а):
if(!empty($_POST['nom_nak'])){
$numbers = array();
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
$numbers = array_unique($numbers[0]);
sort($numbers);

$result = mysql_query("
SELECT *
FROM `table`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);
if(mysql_num_rows($result)){
$numbers = array_fill_keys($numbers, '');
while($row = mysql_fetch_assoc($result))
$numbers[$row['nom_nak']] = $row;

}
echo '<pre>'.print_r($numbers, 1).'</pre>';
}
}

Спустя 23 минуты, 8 секунд (5.06.2012 - 14:49) WisesT написал(а):
Если бы еще с обьяснениями.

И, насколько я понял, это распространяется на $_POST['nom_nak'].
Он пустым не будет.

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

Спустя 3 минуты, 1 секунда (5.06.2012 - 14:52) WisesT написал(а):
Пока все вот так

<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
// Разбиваем номера и приводим к типу int
$numbers = array_map('intval', explode("\n", $_POST['nom_nak']));

$result = mysql_query('select * from dostavki where nom_nak in (' . join(',', $numbers) . ')');

while ($row = mysql_fetch_assoc($result)) {
echo " <tr>
<td>"
.$row['nom_nak']."</td>
<td>"
.$row['data']."</td>
<td>"
.$row['poluchatel']."</td>
<td>"
.$row['ulitsa']."</td>
<td>"
.$row['dom']."</td>
<td>"
.$row['kvof']."</td>
<td>"
.$row['tel']."</td>
<td>"
.$row['vrem_ramki']."</td>
<td>"
.$row['primechaniya']."</td>
<td>"
.$row['kurier']."</td></tr>
"
;
}

?>

Спустя 17 минут, 39 секунд (5.06.2012 - 15:10) killer8080 написал(а):
я думал там и так все очевидноuser posted image, ну можно и расписать
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT *
FROM `table`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);
if(mysql_num_rows($result)){
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, '');
while($row = mysql_fetch_assoc($result))
// заполняем массив полученными значениями, по завершении цикла
// массив будет содержать полученные данные, а номера которых нет в базе
// остануться пустыми. При выводе html циклом перебираешь все элементы
// если элемент пустой, выводишь то, что надо по умолчанию

$numbers[$row['nom_nak']] = $row;

}
echo '<pre>'.print_r($numbers, 1).'</pre>';
}
}

Спустя 39 минут, 45 секунд (5.06.2012 - 15:50) WisesT написал(а):
Отлично. Спасибо!
При выводе через
echo '<pre>'.print_r($numbers, 1).'</pre>';

отображает содержимео (даже несуществующей в бд накладной).
Но не могу понять, как вывести это в таблицу.

Спустя 11 минут, 57 секунд (5.06.2012 - 16:02) WisesT написал(а):
<?php
include "../config.php";
//echo "Вы ввели следующие номера накладных: ";
//echo $_POST['nom_nak'];

if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT *
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);
if(mysql_num_rows($result)){
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, '');
while($row = mysql_fetch_assoc($result))
{
echo $row["nom_nak"];
echo $row["poluchatel"];
echo $row["ulitsa"];
}
// заполняем массив полученными значениями, по завершении цикла
// массив будет содержать полученные данные, а номера которых нет в базе
// остануться пустыми. При выводе html циклом перебираешь все элементы
// если элемент пустой, выводишь то, что надо по умолчанию

$numbers[$row['nom_nak']] = $row;

}

}
}

?>

Как выввести - разобрался.
Но как формировать пустую строку таблицы с номером несуществующей в бд накладной - не пойму.

Спустя 4 часа, 15 минут, 56 секунд (5.06.2012 - 20:18) killer8080 написал(а):
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT *
FROM `table`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);
if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'data' => '&nbsp;',
'poluchatel' => '&nbsp;',
'ulitsa' => '&nbsp;',
'dom' => '&nbsp;',
'kvof' => '&nbsp;',
'tel' => '&nbsp;',
'vrem_ramki' => '&nbsp;',
'primechaniya' => '&nbsp;',
'kurier' => '&nbsp;'
);
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}

echo '<table border="1">';
foreach($default as $k => $v){
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td></tr>';
}
echo '</table>';
}

}
}

Спустя 12 часов, 48 минут, 50 секунд (6.06.2012 - 09:07) WisesT написал(а):
Прости мне мое столь плохое знание...
Внес твой код. Ввел номера накладных. Сделал выборку. В результате получил вертикальный столбец таблицы с записями
data
poluchatel
ulitsa
dom
kvof
tel
vrem_ramki
primechaniya
kurier

Код:
Свернутый текст


<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT *
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);
if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'data' => ' ',
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ',
'kurier' => ' '
);
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}

echo '<table border="1">';
foreach($default as $k => $v){
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td></tr>';
}
echo '</table>';
}

}
}

?>



Спустя 3 минуты, 57 секунд (6.06.2012 - 09:10) killer8080 написал(а):
там опечатка была, надо так
            echo '<table border="1">';
foreach($numbers as $k => $v){
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td></tr>';
}
echo '</table>';

Спустя 56 минут, 35 секунд (6.06.2012 - 10:07) WisesT написал(а):
О да!
Только вот такая отрисовка таблицы

echo '<table border="1">';
foreach($numbers as $k => $v){
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td></tr>';
}
echo '</table>';

Мне не знакома.
Получилось немножко карявинько (если есть пустые поля)
user posted image
как бы это исправить?

И можно-ли перевести отрисовку таблицы в такой вид


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


Ну а ниже - строки с результатами выборки.
Мне так просто проще добавлять\убирать столбцы, которые мне нужно\ненужно отображать.
Или раскажи как это делается в твоем варинте. Я вижу ты его часто используешь)

П.С. Походу это можно контролировать выборкой. Вместо * - поля которые мне нужны. Верно?

Спустя 37 минут, 52 секунды (6.06.2012 - 10:45) killer8080 написал(а):
потому что в пустые ячейки, нужно вставлять пробельный html символ &nbsp;
например так
            echo '<table border="1">';
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? "&nbsp;" : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td></tr>';
}
echo '</table>';
Цитата (WisesT @ 6.06.2012 - 10:07)
И можно-ли перевести отрисовку таблицы в такой вид


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

ну так какие проблемы? Пропиши это в echo.

Спустя 9 минут, 41 секунда (6.06.2012 - 10:55) WisesT написал(а):
Все отлично! Спасибо!

Спустя 8 дней, 56 минут, 3 секунды (14.06.2012 - 11:51) WisesT написал(а):
Привет еще раз.
Смотри, вот еще какую штуку не могу сделать.

засунул я таблицу результата в <form> и добавил селект курьеров с кнопочкой.
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</form></table>';

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


Но где-то допустил ошибку похоже.if (isset($_POST['vvod'])) {
$kurier = $_POST['kurier'];
$nom_nak = $_POST['nom_nak'];

$query = "UPDATE dostavki SET kurier='".$kurier."' WHERE nom_nak IN ('".$nom_nak."')";
mysql_query($query);
}


Весь код (на всяк случай)
Свернутый текст
<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);

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 ('".$nom_nak."')";
mysql_query($query);
}





if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</form></table>';
}

}
}

?>

Спустя 3 часа, 41 минута, 12 секунд (14.06.2012 - 15:32) killer8080 написал(а):
WisesT
а откуда берётся $_POST['nom_nak']?

Спустя 1 час, 46 минут, 36 секунд (14.06.2012 - 17:18) WisesT написал(а):
Ой, сорри. Из файла nom_nak.php

<html>
<head>
<title>
Номера накладных</title>
</head>
<body>
<form
action="list.php" method="post">
<p><b>
Введите до 15 номеров накладных через Enter:</b></p>
<textarea
cols="10" rows="15" name="nom_nak" id="nom_nak">
Тут будут номера накладных через Enter
</textarea>
<INPUT
TYPE="submit" VALUE="Сделать выборку">
</form>
</body>
</html>

Спустя 3 дня, 15 часов, 52 минуты, 50 секунд (18.06.2012 - 09:11) WisesT написал(а):
кто подскажет?

Спустя 12 минут, 18 секунд (18.06.2012 - 09:24) killer8080 написал(а):
WisesT
добавь в вывод накладных чекбоксы или радиокнопки (если курьеру можно назначать только одну накладную). Нужно же как то выбирать какую накладную привязывать к курьеру.
Цитата (WisesT @ 14.06.2012 - 17:18)
Ой, сорри. Из файла nom_nak.php

<html>
<head>
<title>Номера накладных</title>
</head>
<body>
<form action="list.php" method="post">
<p><b>Введите до 15 номеров накладных через Enter:</b></p>
<textarea cols="10" rows="15" name="nom_nak" id="nom_nak">
Тут будут номера накладных через Enter
</textarea>
<INPUT TYPE="submit" VALUE="Сделать выборку">
</form>
</body>
</html>

А причем здесь эта форма?

Спустя 21 минута, 50 секунд (18.06.2012 - 09:45) WisesT написал(а):
Цитата
а откуда берётся $_POST['nom_nak']?

из этой формы данные летят в list.php

list.php
<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);

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 ('".$nom_nak."')";
mysql_query($query);
}





if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</form></table>';
}

}
}

?>

Спустя 1 час, 16 минут, 36 секунд (18.06.2012 - 11:02) killer8080 написал(а):
Цитата (WisesT @ 18.06.2012 - 09:45)
из этой формы данные летят в list.php

И что? В list.php своя форма, она шлет свои данные, в которых нет никакого nom_nak
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;

Спустя 4 минуты, 54 секунды (18.06.2012 - 11:07) WisesT написал(а):
это уже я пытался....
Мы же с тобой эту страничку делали) прочти чуть выше. Эта страница (list.php) выводит результат выборки по номерам накладных из nom_nak.php

Мне нужно было дописать, что бы в базу к этим номерам накладных был назначен курьер из селекта. Поэтому я дописал <form> изначально этого не было.

Спустя 5 минут, 3 секунды (18.06.2012 - 11:12) WisesT написал(а):
<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);


if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</table>';
}

}
}

?>


Изначально старница была вот такой. Я дописал селект с курьерами
<SELECT NAME="kurier"  id="kurier">
//
<OPTION value="Не указан" SELECTED>Не указан
//тут инклюд списка курьеров
</SELECT>

и кнопочку
<input type="submit" name="vvod" value="Назначить курьера">


Нужно, что бы по нажатию на эту кнопочку, ко всем накладным из выборки был дописан курьер из селекта.
Как-то так.

Спустя 1 час, 13 минут, 31 секунда (18.06.2012 - 12:26) killer8080 написал(а):
Цитата (WisesT @ 18.06.2012 - 11:12)
Нужно, что бы по нажатию на эту кнопочку, ко всем накладным из выборки был дописан курьер из селекта.
Как-то так.

Для этого нужно передать в форму эти номера. Ну например так
<input type="hidden" name="nom_nak" value="<?=implode(' ', array_keys($numbers));?>" />

Спустя 1 минута, 6 секунд (18.06.2012 - 12:27) WisesT написал(а):
Блин. я все напутал. (нужно поудалять старые попытки=) )
Есть файл dost_list.php
<html>
<head>
<title>
Номера накладных</title>
</head>
<body>
<form
action="list.php" method="post">
<p><b>
Введите до 15 номеров накладных через Enter:</b></p>
<textarea
cols="10" rows="15" name="nom_nak" id="nom_nak">
Тут будут номера накладных через Enter
</textarea>

<INPUT
TYPE="submit" VALUE="Сделать выборку">
</form>
</body>
</html>
r


ну и собственно сам list.php который мы с тобой делали.

<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);







if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</table>';
}

}
}

?>


Я пытаюсь дописать в list.php селект с курьерами и кнопку, нажмая на которую можно было бы дописать этого курьера в бд к этим записям.

Спустя 6 минут, 35 секунд (18.06.2012 - 12:33) killer8080 написал(а):
Цитата (WisesT @ 18.06.2012 - 12:27)
Я пытаюсь дописать в list.php селект с курьерами и кнопку, нажмая на которую можно было бы дописать этого курьера в бд к этим записям.


И где он? Я не вижу в этом коде ни формы, ни селекта.

Спустя 2 минуты, 58 секунд (18.06.2012 - 12:36) WisesT написал(а):
Ок пишу. Щас выложу код.

Спустя 3 минуты, 15 секунд (18.06.2012 - 12:39) WisesT написал(а):
<?php
include "../config.php";
echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);

if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;


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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '</form></table>';
}

}
}

?>




Спустя 8 минут, 26 секунд (18.06.2012 - 12:48) killer8080 написал(а):
WisesT
ну вот и добавь в конец формы скрытый инпут с номерами накладных.

Цитата (WisesT @ 18.06.2012 - 12:39)
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}

вот здесь не понял, зачем в конец таблицы добавляются 4-е пустые ячейки blink.gif

Спустя 3 минуты, 39 секунд (18.06.2012 - 12:51) WisesT написал(а):
Так нужно)))
list.php формирует что-то типа бланка с данными о заказе (инфа накладной) для курьера. А пустые ячейки для письменых пометок.

Спустя 1 минута, 51 секунда (18.06.2012 - 12:53) WisesT написал(а):
Пытаюсь как ты советовал

<input type="hidden" name="nom_nak" value="<?=implode(' ', array_keys($numbers));?>" />
но все это дело у меня в echo и начинается конфликт кавычек.

Спустя 7 минут, 6 секунд (18.06.2012 - 13:00) killer8080 написал(а):
            foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td>'.
'<td> </td><td> </td><td> </td> </tr>';
}
echo '<input type="hidden" name="nom_nak" value="'.
implode(' ', array_keys($numbers)).'" />'.
'</form></table>';



UPD подправил

Спустя 4 минуты, 40 секунд (18.06.2012 - 13:05) WisesT написал(а):
где-то ошибка. Ищу.

Спустя 50 секунд (18.06.2012 - 13:06) killer8080 написал(а):
точку с запятой убери, от копипаста проскочила smile.gif

Спустя 11 минут, 51 секунда (18.06.2012 - 13:18) WisesT написал(а):
а кнопочку вот так обрабатывать?
if (isset($_POST['vvod'])) {
$kurier = $_POST['kurier'];
$nom_nak = $_POST['nom_nak'];

$query = "UPDATE dostavki SET kurier='".$kurier."' WHERE nom_nak IN ('".$nom_nak."')";
mysql_query($query);
}

?

АПД. Неа, не канает. Что-то делаю не так.

Спустя 1 час, 54 секунды (18.06.2012 - 14:19) killer8080 написал(а):
Не забываем о защите
$kurier = mysql_real_escape_string($_POST['kurier']);
$nom_nak = array_map(
create_function('$v', 'return intval($v);'),
explode(' ', $_POST['nom_nak'])
);

$query = "UPDATE `dostavki` SET `kurier`='".$kurier."' WHERE `nom_nak` IN (".implode(',', $nom_nak).")";

Спустя 6 минут, 1 секунда (18.06.2012 - 14:25) WisesT написал(а):
Где писать обработчик? Можно вверху, там где и все РНР или где-то в/после формы?
Обработчик кнопки назначения курьера

Спустя 1 минута, 27 секунд (18.06.2012 - 14:26) killer8080 написал(а):
Цитата (WisesT @ 18.06.2012 - 14:25)
Где писать обработчик?


Обработку всегда нужно делать до вывода контента.

Спустя 6 минут, 17 секунд (18.06.2012 - 14:32) WisesT написал(а):
Запер уже под самый верх, а не хочет.
<?php
include "../config.php";
if (isset($_POST['vvod'])) {
$kurier = mysql_real_escape_string($_POST['kurier']);
$nom_nak = array_map(
create_function('$v', 'return intval($v);'),
explode(' ', $_POST['nom_nak'])
);

$query = "UPDATE dostavki SET kurier='".$kurier."' WHERE nom_nak IN (".implode(',', $nom_nak).")";
}

echo "Вы ввели следующие номера накладных: ";
echo $_POST['nom_nak'];
if(!empty($_POST['nom_nak'])){
// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, poluchatel, ulitsa, dom, kvof, tel, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);



if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'poluchatel' => ' ',
'ulitsa' => ' ',
'dom' => ' ',
'kvof' => ' ',
'tel' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}
echo '<form name="dostav" method="post" action="?">
<tr>
<td>Курьер</td>
<td>
<SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">
</td>
</tr>'
;

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

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '<input type="hidden" name="nom_nak" value="'.
implode(' ', array_keys($numbers)).'" />'.
'</form></table>';
// echo '</form></table>';

}

}
}

?>

Спустя 10 минут, 30 секунд (18.06.2012 - 14:43) killer8080 написал(а):
WisesT
Вообще после ввода данных положено делать редирект, хотя бы для защиты от F5

Спустя 6 минут, 10 секунд (18.06.2012 - 14:49) WisesT написал(а):
Да погоди пока с редиректом. Оно пока еще не назначет курьеров(

Спустя 2 минуты, 58 секунд (18.06.2012 - 14:52) killer8080 написал(а):
WisesT
смотри что приходит в пост.

Спустя 5 минут, 44 секунды (18.06.2012 - 14:58) WisesT написал(а):
echo $query;

выдает то что нужно вроде.

Цитата
UPDATE dostavki SET kurier='Джуваго Ольга' WHERE nom_nak IN (1,2,3,4)

а в базу не пишет....

Спустя 6 минут, 25 секунд (18.06.2012 - 15:04) killer8080 написал(а):
WisesT
ну вообще должна быть отдельная таблица курьеров, у каждого курьера свой уникальный id, и в таблицу доставок писать id курьера, а не его имя smile.gif

Спустя 3 минуты, 20 секунд (18.06.2012 - 15:08) WisesT написал(а):
Нет нет. Пока мне это не нужно. может в дальнейшем, в процессе оптимизации.
А пока мне нужно только запись текста (курьера) в ячейку.

Спустя 3 минуты, 24 секунды (18.06.2012 - 15:11) killer8080 написал(а):
Цитата (WisesT @ 18.06.2012 - 15:08)
Нет нет. Пока мне это не нужно. может в дальнейшем, в процессе оптимизации.

Это не оптимизация а нормализация бд нужно изначально делать по уму.

Цитата (WisesT @ 18.06.2012 - 15:08)
А пока мне нужно только запись текста (курьера) в ячейку.

ну и в чем проблема?

Спустя 2 минуты, 37 секунд (18.06.2012 - 15:14) WisesT написал(а):
killer8080
не пишетЪ user posted image
Код можно прочитать парой постов выше.
На нажатие кнопки реагирует, а вот курьера в бд не назначает.

Спустя 4 минуты, 37 секунд (18.06.2012 - 15:18) killer8080 написал(а):
WisesT
сделай
mysql_query(...) or die(mysql_error());

Спустя 7 минут, 28 секунд (18.06.2012 - 15:26) WisesT написал(а):
Твою ты **/**! Второй раз уже забываю про

mysql_query($query);

ААА!!!

Спустя 2 месяца, 11 дней, 1 час, 45 минут, 37 секунд (29.08.2012 - 17:11) WisesT написал(а):
Небольшое продолжение темы user posted image
Детали.
Есть страничка dost_list.php с кодом
<form action="list.php" method="post">
<p><b>
Введите до 15 номеров накладных через Enter:</b></p>
<p><textarea
cols="10" rows="15" name="nom_nak" id="nom_nak"></textarea>
<p><INPUT
TYPE="submit" VALUE="Сделать выборку"></p>
</form>


(лишнее срезано)

Эта форма закидывает несколько номеров накладных в страничку list.php c кодом (извините за большой код)
Свернутый текст


<html>
<
HEAD>
<
META http-equiv=content-type content="text/html; charset=UTF-8">



<
title>Доставочный лист</title>

<
link rel="stylesheet" type="text/css" href="../css/style.css" />
<
link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />

</
HEAD>
<
body>


<
table width="100%" >

<?php
require("../include/header_html.txt");
?>
<tr>
<
td width="205px" valign="top" >
<
div class="noprint">
<?php
require("../include/menu_html.txt");
?>
</div>
</
td>

<
td valign="top" width="100%"><table width="100%" border="1" cellspacing="0">






<?php
include "../config.php";
if (isset($_POST['vvod'])) {
$in_progress = $_POST['in_progress'];
$date = explode("-", $_POST['in_progress']);
$in_progress = $date[2]."-".$date[1]."-".$date[0];

$kurier = mysql_real_escape_string($_POST['kurier']);
$nom_nak = array_map(
create_function('$v', 'return intval($v);'),
explode(' ', $_POST['nom_nak'])
);

$query = "UPDATE dostavki SET status='Выдано', in_progress='$in_progress', kurier='".$kurier."' WHERE nom_nak IN (".implode(',', $nom_nak).")";

mysql_query($query)or die(mysql_error());
echo "Курьер - ". $kurier;
echo "<script language=javascript>alert('Накладные назначены курьеру $kurier');</script>";
echo $js;
}

//echo "Вы ввели следующие номера накладных: ";
//echo $_POST['nom_nak'];

if(!empty($_POST['nom_nak'])){

// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, predpriyatie, poluchatel, tip_ul, ulitsa, dom, korpus, kvof, tel, sluzhebnyi, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);



if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'predpriyatie' => '&nbsp',
'poluchatel' => ' ',
'tip_ul' => '&nbsp',
'ulitsa' => ' ',
'dom' => ' ',
'korpus' => ' ',
'kvof' => ' ',
'tel' => ' ',
'sluzhebnyi' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

while($row = mysql_fetch_assoc($result)){
// заполняем массив полученными значениями
$numbers[$row['nom_nak']] = $row;
// удаляем элемент ['nom_nak'] из массива, т.к. это значение
// уже содержиться в ключе

unset($numbers[$row['nom_nak']]['nom_nak']);
}
echo '<form name="dostav" method="post" action="?">

<tr>
<td><div class="noprint">Курьер</div></td>
<td>
<div class="noprint"><SELECT NAME="kurier" id="kurier">
'
;
require("../include/kuriers.txt");
echo'
<OPTION value="Не указан" SELECTED>Не указан
</SELECT>
<input type="submit" name="vvod" value="Назначить курьера">    <INPUT TYPE="button" style="background-color:#BC8F8F" VALUE="Распечатать" onClick=location.href="javaScript:window.print();">

<input type="hidden" size="50" maxlength="10" name="in_progress" id="in_progress" value="'
; echo date('d-m-Y'); echo'"/>
</div>
</td>
</tr>'
;
echo '<table border="1" cellpadding="0" cellspacing="0" width="100%"><tr align="center">
<td><b>№ Накл</b></td>
<td><b>Фирма</b></td>
<td><b>Получатель</b></td>
<td><b>Тип<br>ул.</b></td>
<td><b>Улица</b></td>
<td><b>Дом</b></td>
<td><b>Корпус</b></td>
<td><b>Кв. Оф.</b></td>
<td><b>Телефон</b></td>
<td><b>Служебный</b></td>
<td><b>Спец Услуга</b></td>
<td><b>Примечание</b></td>
<td width="60"><b>Дата</b></td>
<td width="60"><b>Время</b></td>
<td width="120"><b>Фамилия</b></td>
<td width="60"><b>Роспись</b></td>

</tr>'
;
foreach($numbers as $k => $v){
$v = array_map(create_function('$v', 'return $v == "" ? " " : $v;'), $v);
echo '<tr><td>'.$k.'</td><td>'.implode('</td><td>', $v).'</td><td> </td><td> </td><td> </td><td> </td> </tr>';
}
echo '<input type="hidden" name="nom_nak" value="'.
implode(' ', array_keys($numbers)).'" />'.
'</form></table>';

}

}
}

?>





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

</
body>
</
html>




Работает это все так.
В первую страницу вводят несколько номеров накладных. Тыркают на кнопочку. Номера накладных летят на вторую страницу. Во второй странице делается выборка из БД по тем номерам, которые были введены. Если записи с такими нормерами есть - выводятся строки с инф-ей. Если такой записи нет - формируется строка с пустышками и нормером накладной (которая была введена но ее нет в бд).
Далее в выпадающем меню выбирается курьер и назначается ко всем выбраным накладным.
Все работает, все хорошо.

Но нужно чуточку передалть.

Если записи с указаным номером нет - СОЗДАТЬ запись с таким номерм (остальные поля оставить пустышками). Ну и вывести ее в выборке.
Это нужно сделать ДО назначения курьера. Что бы когда назначался курьер он назначался и только что созданную запись с пустышками.

Хотя бы подскажите на каком этапе кода это делается.

П.С. Возможно запутано или неясно выразился (такое бывает). Отпишитесь.
Спасибо.

Спустя 5 часов, 39 минут, 17 секунд (29.08.2012 - 22:51) killer8080 написал(а):
WisesT
nom_nak это уникальное поле в таблице dostavki?

Спустя 10 часов, 34 минуты, 58 секунд (30.08.2012 - 09:26) WisesT написал(а):
Да, это ключ.

Спустя 5 часов, 27 минут, 56 секунд (30.08.2012 - 14:53) WisesT написал(а):
я так понимаю нужно где-то вот тут копать
if(!empty($_POST['nom_nak'])){

// инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

// запрашиваем в бд заданные накладные
$result = mysql_query("
SELECT nom_nak, predpriyatie, poluchatel, tip_ul, ulitsa, dom, korpus, kvof, tel, sluzhebnyi, vrem_ramki, primechaniya
FROM `dostavki`
WHERE `nom_nak` IN ("
.implode(',', $numbers).")
"
);



if(mysql_num_rows($result)){
// массив значений ячеек таблицы поумолчанию, вставляем туда html пробел
// если ячейка дожна быть пустой, или нужный тескт или html код
// именованные ключи нужны только для удобства

$default = array(
'predpriyatie' => '&nbsp',
'poluchatel' => ' ',
'tip_ul' => '&nbsp',
'ulitsa' => ' ',
'dom' => ' ',
'korpus' => ' ',
'kvof' => ' ',
'tel' => ' ',
'sluzhebnyi' => ' ',
'vrem_ramki' => ' ',
'primechaniya' => ' ' );
// модифицируем мссив так, чтоб его значения стали ключами
// таким образом каждый ключ массива будет соотвествовать номеру накладной

$numbers = array_fill_keys($numbers, $default);

Но как заставить при выборке сделать разделение на существующие накладные и те, которых нет. А потом еще и создать несуществующие?

Спустя 3 минуты, 14 секунд (30.08.2012 - 14:57) killer8080 написал(а):
Цитата (WisesT @ 30.08.2012 - 15:53)
Но как заставить при выборке сделать разделение на существующие накладные и те, которых нет

А какой в этом смысл? Почему бы тогда просто не вставлять все номера введенные в форму. Зачем нужно предварительно вставлять пустышки?

Спустя 24 минуты, 47 секунд (30.08.2012 - 15:21) WisesT написал(а):
Сейчас пустышки делаются только для бланка, который выдается курьеру. В ней клиент расписывается.

Как бы тебе обьяснить....

Распишу полностью.


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

В форме dost_list.php вводятся номера накладных, которые выдаются курьеру. Тыркается кнопочка "сделать выборку" и все номера летатя на страницу list.php.

Сейчас принятые номера накладных обрабатываются так.
Делается выборка из таблицы и выводится результат с условием "Если есть запись с таким номером - выводим данные всех столбцов. Если нету - формируем пустую строку (на странице) с номером накладной (которой нет в бд). Пустая строка на странице формируется только для того, чтоб клиент мог напротив нее расписаться.

Когда данные о имеющихся и неимеющихся в таблице накладны выведены на страницу, логист выбирает из выпадающего списка курьера, который берет себе эти доставки и нажимает кнопку "назначить курьера".
После нажатия этой кнопки в таблице dostavki напротив записей с номерами накладных из выборки в определенные поля дописывается что "эту эту эту и вот эту накладную себе взял такой-то курьер. Сделано это был вот такого числа".

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

Вот я и хочу, чтоб на каком-то этапе (вот тут уже нужна твоя подсказка) срабатывал такой алгоритм
"Если есть информация по номеру (номер накладной введенный в выборку) - вывести ее в таблицу (list.php).

Если записи с таким номером нет - создать запись в бд (строчку с номером накладной. Остальные столбцы оставить пустыми). Дальше вывести эту запись на странице list.php"

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

Текста много, но старался обьяснить. Спрашивай если что.

С меня причитается;)

П.С. Вижу ты с украины. Возможно проще созвонится?

Спустя 27 минут, 48 секунд (30.08.2012 - 15:49) killer8080 написал(а):
WisesT
в общем, если действительно номер накладной UNIQUE или PRIMARY
Цитата (WisesT @ 30.08.2012 - 10:26)
Да, это ключ.

то заменяем запрос UPDATE, на INSERT, то есть вместо
UPDATE `dostavki` 
SET `status` = 'Выдано',`in_progress` = '$in_progress', `kurier` = '$kurier'
WHERE `nom_nak` IN (1, 2)

На такой
INSERT INTO `dostavki` 
(`nom_nak`, `status`, `in_progress`, `kurier`)
VALUES
(1, 'Выдано', '$in_progress', '$kurier'),
(
2, 'Выдано', '$in_progress', '$kurier'),
(
3, 'Выдано', '$in_progress', '$kurier')
ON DUPLICATE KEY UPDATE
`status` = 'Выдано',`in_progress` = '$in_progress', `kurier` = '$kurier'

Спустя 13 минут, 10 секунд (30.08.2012 - 16:02) WisesT написал(а):
Будь любезен, распиши пожалуйста. Чтоб было ясно, то-ли оно делает) Спасибо.

Спустя 3 минуты, 16 секунд (30.08.2012 - 16:06) WisesT написал(а):
Как я понимаю, будет так.
Когда нажата кнопка -

Внести в таблицу Доставки, в поля `nom_nak`, `status`, `in_progress`, `kurier` данные
(1, 'Выдано', '$in_progress', '$kurier'),
(2, 'Выдано', '$in_progress', '$kurier'),
(3, 'Выдано', '$in_progress', '$kurier')

Если найдутся совпадения - обновить (тоесть добавить только вот эти данные `status` = 'Выдано',`in_progress` = '$in_progress', `kurier` = '$kurier')

Верно?

П.С. 1 2 3 я так понмиаю это номера накладных вписаных в выборку?

Спустя 5 минут, 52 секунды (30.08.2012 - 16:12) killer8080 написал(а):
Цитата (WisesT @ 30.08.2012 - 17:06)
Верно?

П.С. 1 2 3 я так понмиаю это номера накладных вписаных в выборку?

Да. Если номеров нет, записи будут добавлены, если есть, обновлены.

Спустя 9 минут, 3 секунды (30.08.2012 - 16:21) WisesT написал(а):
INSERT INTO `dostavki` 
(`nom_nak`, `status`, `in_progress`, `kurier`)
VALUES
(1, 'Выдано', '$in_progress', '$kurier'),
(
2, 'Выдано', '$in_progress', '$kurier'),
(
3, 'Выдано', '$in_progress', '$kurier')
ON DUPLICATE KEY UPDATE
`status` = 'Выдано',`in_progress` = '$in_progress', `kurier` = '$kurier'


А как сделать чтобы вместо 1, 2, 3 были номера накладных введенных в форму из dost_list.php

Раньше было


WHERE nom_nak IN ...

А теперь каК?

Спустя 13 минут, 43 секунды (30.08.2012 - 16:34) killer8080 написал(а):
Цитата (WisesT @ 30.08.2012 - 17:21)
А теперь каК?

а теперь циклом
$nombers = array();
foreach($nom_nak as $n){
$nombers []= "($n, 'Выдано', '$in_progress', '$kurier')";
}
$sql = "INSERT INTO `dostavki`
(`nom_nak`, `status`, `in_progress`, `kurier`)
VALUES "
.implode(',', $numbers)." ON DUPLICATE KEY UPDATE
`status` = 'Выдано',`in_progress` = '
$in_progress', `kurier` = '$kurier'";


PS я так и не понял, in_progress это дата? Тогда зачем она формируется таким странным образом?

Спустя 16 минут, 58 секунд (30.08.2012 - 16:51) WisesT написал(а):
in_progress это дата когда накладной был назначен курьер. Что=то типа поля "принято на исполнение"
а формируется так по-дурному из=за
<input type="hidden" size="50" maxlength="10" name="in_progress" id="in_progress" value="'; echo date('d-m-Y'); echo'"/>


В итоге получается вот такой код?
if (isset($_POST['vvod'])) {
$in_progress = $_POST['in_progress'];
$date = explode("-", $_POST['in_progress']);
$in_progress = $date[2]."-".$date[1]."-".$date[0];

$kurier = mysql_real_escape_string($_POST['kurier']);
$nom_nak = array_map(
create_function('$v', 'return intval($v);'),
explode(' ', $_POST['nom_nak'])
);

$nombers = array();
foreach($nom_nak as $n){
$nombers []= "($n, 'Выдано', '$in_progress', '$kurier')";
}
$query = "INSERT INTO `dostavki`
(`nom_nak`, `status`, `in_progress`, `kurier`)
VALUES "
.implode(',', $numbers)." ON DUPLICATE KEY UPDATE
`status` = 'Выдано',`in_progress` = '
$in_progress', `kurier` = '$kurier'";

mysql_query($query)or die(mysql_error());

угу?


АПД. Ругается.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON DUPLICATE KEY UPDATE ' at line 3

Спустя 5 часов, 12 минут, 11 секунд (30.08.2012 - 22:03) killer8080 написал(а):
Цитата (WisesT @ 30.08.2012 - 17:51)
АПД. Ругается.

там опечатка в имени переменной $numbers

Цитата (WisesT @ 30.08.2012 - 17:51)
а формируется так по-дурному из=за
<input type="hidden" size="50" maxlength="10" name="in_progress" id="in_progress" value="'; echo date('d-m-Y'); echo'"/>

Так и я о том же, нафига слать даты из формы, причем вначале сформировать её в одном виде, чтоб потом преобразовывать в другой. В MySQL для работы с датами есть свои функции, нет смысла так извращаться.

Еще вот здесь
        $nom_nak = array_map(
create_function('$v', 'return intval($v);'),
explode(' ', $_POST['nom_nak'])
);

Есть вероятность, что в тексте окажется несколько пробелов подряд, а значит в массиве будут пустые элементы. Лучще сделать так
        $nom_nak = array_map(
create_function('$v', 'return intval($v);'),
array_filter( explode(' ', $_POST['nom_nak']) ) );

Спустя 12 часов, 24 минуты, 8 секунд (31.08.2012 - 10:28) WisesT написал(а):
за numbers спасибо.

а про пробелы.

 // инициируем переменную
$numbers = array();
// ищем все целые числа в тексте
if(preg_match_all('#\d+#', $_POST['nom_nak'], $numbers)){
// фильтруем массив полученных номеров от дублей
$numbers = array_unique($numbers[0]);
// сортируем массив по порядку номеров
sort($numbers);

вроде как убирает все кроме цыфр?

Спустя 6 минут, 7 секунд (31.08.2012 - 10:34) killer8080 написал(а):
Цитата (WisesT @ 31.08.2012 - 11:28)
вроде как убирает все кроме цыфр?

А, ну в принципе да.
Быстрый ответ:

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