Есть у меня вот такая страничка, которая передает методом 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 написал(а):
Щаз попробуем! Спасибо!
А как выводить результат из такого массива?
АПД. Тю, затупил. Все просто;)
А как выводить результат из такого массива?

АПД. Тю, затупил. Все просто;)
Спустя 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'].
Он пустым не будет.
Мне нужно чтобы при выводе таблицы с результатом выборки, если такого номера накладной нет в бд - вывести пустую строчку.
Остальные записи отобразить в полной мере.
И, насколько я понял, это распространяется на $_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 написал(а):
я думал там и так все очевидно
, ну можно и расписать

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' => ' ',
'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>';
}
}
}
Спустя 12 часов, 48 минут, 50 секунд (6.06.2012 - 09:07) WisesT написал(а):
Прости мне мое столь плохое знание...
Внес твой код. Ввел номера накладных. Сделал выборку. В результате получил вертикальный столбец таблицы с записями
data
poluchatel
ulitsa
dom
kvof
tel
vrem_ramki
primechaniya
kurier
Код:
Внес твой код. Ввел номера накладных. Сделал выборку. В результате получил вертикальный столбец таблицы с записями
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>';
Мне не знакома.
Получилось немножко карявинько (если есть пустые поля)

как бы это исправить?
И можно-ли перевести отрисовку таблицы в такой вид
<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 символ
например так
например так
echo '<table border="1">';
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></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> и добавил селект курьеров с кнопочкой.
Пытаюсь сделать так, что бы можно было выбрать курьера и нажав на кнопку "Назначить курьера" вписать в БД курьера напротив соответствующих записей.
Пытался сделать это вот так
Весь код (на всяк случай)
Смотри, вот еще какую штуку не могу сделать.
засунул я таблицу результата в <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']?
а откуда берётся $_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> изначально этого не было.
Мы же с тобой эту страничку делали) прочти чуть выше. Эта страница (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
ну и собственно сам list.php который мы с тобой делали.
Я пытаюсь дописать в list.php селект с курьерами и кнопку, нажмая на которую можно было бы дописать этого курьера в бд к этим записям.
Есть файл 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-е пустые ячейки

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

Спустя 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
Вообще после ввода данных положено делать редирект, хотя бы для защиты от 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 курьера, а не его имя
ну вообще должна быть отдельная таблица курьеров, у каждого курьера свой уникальный id, и в таблицу доставок писать id курьера, а не его имя

Спустя 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
не пишетЪ
Код можно прочитать парой постов выше.
На нажатие кнопки реагирует, а вот курьера в бд не назначает.
не пишетЪ

Код можно прочитать парой постов выше.
На нажатие кнопки реагирует, а вот курьера в бд не назначает.
Спустя 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);
ААА!!!
mysql_query($query);
ААА!!!
Спустя 2 месяца, 11 дней, 1 час, 45 минут, 37 секунд (29.08.2012 - 17:11) WisesT написал(а):
Небольшое продолжение темы 
Детали.
Есть страничка dost_list.php с кодом
(лишнее срезано)
Эта форма закидывает несколько номеров накладных в страничку list.php c кодом (извините за большой код)
Работает это все так.
В первую страницу вводят несколько номеров накладных. Тыркают на кнопочку. Номера накладных летят на вторую страницу. Во второй странице делается выборка из БД по тем номерам, которые были введены. Если записи с такими нормерами есть - выводятся строки с инф-ей. Если такой записи нет - формируется строка с пустышками и нормером накладной (которая была введена но ее нет в бд).
Далее в выпадающем меню выбирается курьер и назначается ко всем выбраным накладным.
Все работает, все хорошо.
Но нужно чуточку передалть.
Если записи с указаным номером нет - СОЗДАТЬ запись с таким номерм (остальные поля оставить пустышками). Ну и вывести ее в выборке.
Это нужно сделать ДО назначения курьера. Что бы когда назначался курьер он назначался и только что созданную запись с пустышками.
Хотя бы подскажите на каком этапе кода это делается.
П.С. Возможно запутано или неясно выразился (такое бывает). Отпишитесь.
Спасибо.

Детали.
Есть страничка 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' => ' ',
'poluchatel' => ' ',
'tip_ul' => ' ',
'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?
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' => ' ',
'poluchatel' => ' ',
'tip_ul' => ' ',
'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"
Таким образом, после того как этим накладным будет назначен курьер, напротив только-что созданой пустой записи несуществующей накладной будет вписан курьер который ее забраал. А уже потом, когда прийдут данные об этой накладной и они будут внесены в бд - у этой строки уже будет стоять курьер.
Текста много, но старался обьяснить. Спрашивай если что.
С меня причитается;)
П.С. Вижу ты с украины. Возможно проще созвонится?
Как бы тебе обьяснить....
Распишу полностью.
Есть таблица dostavki, которая наполняется импортом из экселя раз в сутки. Но бывается так, что данные о некоторых накладных приходят чуть позже (связано со спецификой работы). Тоесть данные могут прийти уже после того, как доставка по накладной будет выполнена.
В форме dost_list.php вводятся номера накладных, которые выдаются курьеру. Тыркается кнопочка "сделать выборку" и все номера летатя на страницу list.php.
Сейчас принятые номера накладных обрабатываются так.
Делается выборка из таблицы и выводится результат с условием "Если есть запись с таким номером - выводим данные всех столбцов. Если нету - формируем пустую строку (на странице) с номером накладной (которой нет в бд). Пустая строка на странице формируется только для того, чтоб клиент мог напротив нее расписаться.
Когда данные о имеющихся и неимеющихся в таблице накладны выведены на страницу, логист выбирает из выпадающего списка курьера, который берет себе эти доставки и нажимает кнопку "назначить курьера".
После нажатия этой кнопки в таблице dostavki напротив записей с номерами накладных из выборки в определенные поля дописывается что "эту эту эту и вот эту накладную себе взял такой-то курьер. Сделано это был вот такого числа".
Все хорошо. Но действия с накладыми, которых не оказалось в бд, никак не фиксируются. Даже когда позже инф. о них окажется - она будет висеть как необработанная, поскольку записей о курьере нету (а мы то ее уже даже доставили).
Вот я и хочу, чтоб на каком-то этапе (вот тут уже нужна твоя подсказка) срабатывал такой алгоритм
"Если есть информация по номеру (номер накладной введенный в выборку) - вывести ее в таблицу (list.php).
Если записи с таким номером нет - создать запись в бд (строчку с номером накладной. Остальные столбцы оставить пустыми). Дальше вывести эту запись на странице list.php"
Таким образом, после того как этим накладным будет назначен курьер, напротив только-что созданой пустой записи несуществующей накладной будет вписан курьер который ее забраал. А уже потом, когда прийдут данные об этой накладной и они будут внесены в бд - у этой строки уже будет стоять курьер.
Текста много, но старался обьяснить. Спрашивай если что.
С меня причитается;)
П.С. Вижу ты с украины. Возможно проще созвонится?
Спустя 27 минут, 48 секунд (30.08.2012 - 15:49) killer8080 написал(а):
WisesT
в общем, если действительно номер накладной UNIQUE или PRIMARY
в общем, если действительно номер накладной 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 я так понмиаю это номера накладных вписаных в выборку?
Когда нажата кнопка -
Внести в таблицу Доставки, в поля `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 это дата когда накладной был назначен курьер. Что=то типа поля "принято на исполнение"
а формируется так по-дурному из=за
В итоге получается вот такой код?
угу?
АПД. Ругается.
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
а формируется так по-дурному из=за
<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) |
вроде как убирает все кроме цыфр? |
А, ну в принципе да.