Вывод в форму из MySQL ...

bovkun

Новичок
Вывод в форму из MySQL ...

Подскажите плиз, как решит задачу.

Есть база. Там, скажем 3 поля - `inf_1`, `inf_2` и `inf_3`.
Хочу вывести для редактирования (в форме) одну из записей, которая находится в базе. Делаю выборку, выбирает, но каждый раз коректно...

Например, если вывод касается записи в поле которой есть запись состоящая из одних цифр (без пробелов), т.е. "12345", а не "123 45", то все происходит упешно - все три значения подставлюятся в форму. Если же нужно проделать это же с записями где есть текст или цифры (с пробелами), то выводится ошибки.

Вроде как все просто, а я не могу догнать как ларчик этот открыть... :(

PHP:
...
$query = "SELECT * FROM $userstable WHERE inf_1 = '$inf_1'"; 
$result = MYSQL_QUERY($query);
WHILE ($i < 1){
$inf_1 = mysql_result ($result,$i,"inf_1");
$inf_2 = mysql_result ($result,$i,"inf_2");
$inf_3 = mysql_result ($result,$i,"inf_3");
$i++;
}
PRINT "<FORM ACTION=update.php?cmd=edit&nif_1=$inf_1 METHOD=POST>
Инф.1:<input type=text name=inf_1 size=25 maxlength=20 value=$inf_1><br>
Инф.2:<input type=text name=inf_2 size=25 maxlength=35 value=$inf_2><br>
Инф.3:<input type=text name=inf_3 size=25 maxlength=8 value=$inf_3><br>
</FORM>";
...
Гм, не судите строго. Учусь! Предполагаю, что нагородил...
 

Demiurg

Guest
Re: Вывод в форму из MySQL ...

Автор оригинала: bovkun
Подскажите плиз, как решит задачу.
Есть база. Там, скажем 3 поля - `inf_1`, `inf_2` и `inf_3`.
Хочу вывести для редактирования (в форме) одну из записей, которая находится в базе. Делаю выборку, выбирает, но каждый раз коректно...
Например, если вывод касается записи в поле которой есть запись состоящая из одних цифр (без пробелов), т.е. "12345", а не "123 45", то все происходит упешно - все три значения подставлюятся в форму. Если же нужно проделать это же с записями где есть текст или цифры (с пробелами), то выводится ошибки.
Вроде как все просто, а я не могу догнать как ларчик этот открыть... :(
PHP:
...
$query = "SELECT * FROM $userstable WHERE inf_1 = '$inf_1'"; 
$result = MYSQL_QUERY($query);
WHILE ($i < 1){
$inf_1 = mysql_result ($result,$i,"inf_1");
$inf_2 = mysql_result ($result,$i,"inf_2");
$inf_3 = mysql_result ($result,$i,"inf_3");
$i++;
}
PRINT "<FORM ACTION=update.php?cmd=edit&nif_1=$inf_1 METHOD=POST>
Инф.1:<input type=text name=inf_1 size=25 maxlength=20 value=$inf_1><br>
Инф.2:<input type=text name=inf_2 size=25 maxlength=35 value=$inf_2><br>
Инф.3:<input type=text name=inf_3 size=25 maxlength=8 value=$inf_3><br>
</FORM>";
...
Гм, не судите строго. Учусь! Предполагаю, что нагородил...
Если ты передаешь данные методом POST то передавай им все данные. <input type = hidden name = nif_1 value = "$inf_1">...

и еще ... как ты пердставляешь работает конструкция:
PHP:
WHILE ($i < 1){
$inf_1 = mysql_result ($result,$i,"inf_1");
$inf_2 = mysql_result ($result,$i,"inf_2");
$inf_3 = mysql_result ($result,$i,"inf_3");
$i++;
}
 

bovkun

Новичок
Re: Re: Вывод в форму из MySQL ...

Если ты передаешь данные методом POST то передавай им все данные. <input type = hidden name = nif_1 value = "$inf_1">...
Ну хорошо, точно намудрил )). Тогда еще раз по порядку... Создал таблицу. Ввел две записи.
PHP:
# Структура таблицы `inf`
CREATE TABLE inf (
  inf_1 varchar(12) NOT NULL default '',
  inf_2 varchar(12) NOT NULL default '',
  inf_3 varchar(12) NOT NULL default '',
  UNIQUE KEY inf_1 (inf_1)
) TYPE=MyISAM;

# Дамп данных таблицы `inf`
INSERT INTO inf VALUES ('ivanov', 'ivan', 'ivanovich');
INSERT INTO inf VALUES ('ivanov 2', 'sidor', 'petrovich');
Сделал выборку (SELECT * FROM $userstable WHERE 1 ORDER BY `inf_1`) и загнал полученные данные в таблицу. В конце каждого ряда есть ссылка на редактирование _этой_ записи <a href=update.php?cmd=edit&inf_1=$inf_1>edit</a>. Я решил что ссылаться на "inf_1" будет вполне достаточно. Я предполагал, что запись в этом поле должна быть уникальной и она не должна быть пустой. Кроме того, другие поля не всегда будут заполнены. Поэтому я посчитал, что сделать так будет логично.

Сам же файл (index.php), который в себе все это содержит, выглядит так:
PHP:
...
$query = "SELECT * FROM $userstable WHERE 1 ORDER BY `inf_1` ASC LIMIT 0, 100"; 
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
$i = 0;
IF ($number == 0) {
PRINT "$add_form";
} ELSEIF ($number > 0) 
{
WHILE ($i < $number){
$inf_1 = mysql_result($result,$i,"inf_1");
$inf_2 = mysql_result($result,$i,"inf_2");
$inf_3 = mysql_result($result,$i,"inf_3");
PRINT "$inf_1 $inf_2 $inf_3 <a href=update.php?cmd=edit&inf_1=$inf_1>edit</a><br>";
$i++; 
} 
PRINT "Всего: $number";
...
Кликая на ссылку перехожу в update.php. Там форма в которую попадают все записи из трех полей.
Что в себе содержит update.php я уже писал выше.

Если определить проблему с которой
я столкнулся точно, то в двух предложениях это выглядит так:

Нажимая на линк (edit) рядом с записью 'ivanov', 'ivan', 'ivanovich' и
'ivanov 2', 'sidor', 'petrovich' я получаю один и тот же результат ((
В форму для дальнейшей редакции попадает первая запись (та, что содержит
в поле inf_1 значение "ivanov").

Т.е. все что после пробела в счет не идет. Но ведь это же совершенно разные записи.

Пытался я сделать проще, как мне сразу показалось, но результата
нормального я не получил.
Саму ссылку я описал побробнее -
<a href=update.php?cmd=edit&inf_1=$inf_1&&inf_2=$inf_2&&inf_3=$inf_3>,
а мудреж с "$inf_1 = mysql_result($result,$i,"inf_1") и т.д." я удалил.
Абсолютно согласен, что так гараздо логичнее, но результат-то _почти_ тотже (((

В первом варианте ("ivanov") формируется нормальноая и полная ссылка -
"update.php?cmd=edit&inf_1=ivanov&&inf_2=ivan&&inf_3=ivanovich" , а во втором случае ссылка получается не полная - ее сразу обрубает как только обнаруживается "пробел". "update.php?cmd=edit&inf_1=ivanov"
Получается, что в форму передается только лишь значение = inf_1 и все.

и еще ... как ты пердставляешь работает конструкция:
PHP:
WHILE ($i < 1){
$inf_1 = mysql_result ($result,$i,"inf_1");
$inf_2 = mysql_result ($result,$i,"inf_2");
$inf_3 = mysql_result ($result,$i,"inf_3");
$i++;
}
Что же фактически делает "$inf_1 = mysql_result($result,$i,"inf_1") и т.д." я, честно говоря, не совсем четко представляю, хотя по моим рассуждениям оно должно работать %)
А содрал я его из index.php (выше) который выводит все записи. Там то это работает и передает данные в таблицу правильно.
Не совсем логично. Но ответил честно. Учусь! :)
 

bovkun

Новичок
Люди добрые, ответьте плиз.

Люди добрые, ответьте плиз.
 

Demiurg

Guest
Re: Люди добрые, ответьте плиз.

Автор оригинала: bovkun
Люди добрые, ответьте плиз.
Маленький совет: старайся описывать проблему четко и кратко, а то никто не захочет читать несколько страниц текста.

Проблема твоя вообщем то проста. Когда ты пишешь в ссылке &param=$value все работает, пока в $value не встречается пробелов, амперсентов и прочей нечисти. Все, что нужно сделать, что бы избежать влияние этих символов - это использовать функцию urlencode().
что то типа:
PHP:
echo '<a href = .....?param=' ,  urlencode($value) , '>...</a>';
Хотя обычно для идентификации записи в таблице используется первичный ключ. Соответственно все ссылки можно делать через него.

И еще для вытаскивания данных из базы обычно используется такая конструкция.
PHP:
$result = mysql_query('select field1 , field2 from ....');
while($row = mysql_fetch_array($result))
{
 //....
 $field1 = $row['field1'];
 //....
}
 

bovkun

Новичок
Re: Re: Люди добрые, ответьте плиз.

Автор оригинала: Demiurg
echo '<a href = .....?param=' , urlencode($value) , '>...</a>';
СПАСИБООООО !!! ))

Ссылку формирует полностью. Вместо "пробелов" подставляет "+".
Но когда значения возвращает в форму, то "плюсы" остаются.
Как я понимаю, тут нужно сделать обратное действие.

PHP:
$inf_1d = htmlspecialchars (urldecode($inf_1));
...
<input type=text name=inf_1 size=10 value=$inf_1d>
...
Но в таком случае все, что после пробела уже не показывается в форме ((

Как это правильно разрешить?
 

RomikChef

Guest
блин да в кавычки надо валуе взять, и ВСЕ!!!!!
 

bovkun

Новичок
СПАСИБО!

Ура! Работает!
Demiurg и RomikChef , спасибо за помощь!
 
Сверху