|
|
|
| Здравствуйте!
Мне нужно обновить запись в базе. Для этого должна открыться форма с ранее заполненными полями, данные для которых берутся из базы. У меня есть ссылка:
<A class=link href="edit.php?id="<?print $id;?> target="_blank">Edit</A>
|
Но в файл edit.php не передается id нужной записи. Подскажите пожалуйста как правильно сделать. | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 13:00)
| | Когда Вы подводите мышь к ссылке, в строке статуса должен быть виден адрес ...edit.php?id=... . В нем id правильный?
Если правильный - то id в скрипт передается правильно (и вероятно уже в скрипте edit.php не[правильно] принимается ).
Если в строке статуса id неправильный - значит в переменной $id в том фрагменте, который Вы привели, лежит совсем не id нужной записи, а что-то другое. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2006 в 13:16)
| | Там вообще где id= ничего не выводится, а остается вот так. Может записано неправильно? | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 13:21)
| | Значит в $id - пустая строка. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2006 в 13:32)
| | А как туда подставить id выбранной для редактирования записи?
У меня в этом файле в самом начале стоит $id = $_GET["id"]; а потом по этому же id выводится нужная запись из базы. Куда же он девается? | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 13:37)
| | Попробуйте спускать оператор
<?php
echo "id = ".$id;
?>
|
начиная от записи $id = $_GET["id"]; вниз - так можно будет локализовать место, где переменная $id обнуляется. | |
|
|
|
|
|
|
|
для: cheops
(27.03.2006 в 13:43)
| | id нигде не обнуляется! До конца файла выводится. Но там где нужно все равно пусто. | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 13:37)
| | Очень тяжело искать черную кошку в темной комнате. Показали бы файл чтоли.... аттачем желательно. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2006 в 14:24)
| | Прикрепила | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 14:42)
| |
<A class=link href="edit.php?id=<?print $id;?>" target="_blank">Edit</A>
|
В общем-то, Вы были правы. Ошибка была именно в этой строке. Значение $id подставлялось за пределами кавычек. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2006 в 15:13)
| | Спасибо. Теперь все передается. Только теперь "ругается" на строку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\SERVER\MyExamples\notebook_old\edit.php on line 339
|
А написано так:
$id = intval($_GET["id"]);
$query = "SELECT * FROM vsm_notebook where f_id =" .$id;
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
|
Самое главное, что в других файлах сделано точно также. А тут что-то не нравится. Прикрепляю файл. | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 16:22)
| | Это происходит потому, что у у Вас не выполняется подключение к БД.
Этот фрагмет
//-----------------------------------------------------------
// Подключаем файл "connect_db.php" для соединения с базой данных
// include "connect_db.php";
|
Вы почему-то поместили внутри условного оператора
if (isset($HTTP_POST_VARS["submit"]) and $HTTP_POST_VARS["submit"])
{
..............
..............
..............
}
|
А поскольку данные POST-формы при GET-запросе не передаются, весь код внутри фигурных скобок пропускается. Пропускается и include. В результате нет коннекта с БД, нет нормального результата запроса - есть null, который Вы скармливаете функции mysql_fetch_array() - вот она и ругается. | |
|
|
|
|
|
|
|
для: juliya
(27.03.2006 в 16:22)
| | Поставьте проверку
<?php
$id = intval($_GET["id"]);
$query = "SELECT * FROM vsm_notebook where f_id =" .$id;
$result = mysql_query($query);
if(!$result) exit($query." -- ".mysql_error());
while ($row = mysql_fetch_array($result))
?>
|
Что-нибудь дополнительно выводится? | |
|
|
|
|
|
|
|
для: cheops
(27.03.2006 в 17:31)
| | Выводится:
SELECT * FROM vsm_notebook where f_id =172 -- No Database Selected | |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 08:41)
| | Мне нужно сделать редактирование записи в базе. Для этого должна открыться форма с заполненными полями, данные для которых беруться из базы. Далее изменяются поля, идет проверка на правильность и отправляется в базу. Подскажите, пожалуйста, можно ли сделать вывод в форму и проверку на правильность в одном файле? | |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 10:21)
| | Всё это можно сделать в одном файле. И сохранение обратно в базу тоже можно сделать там же.
Теоретически, любой проект можно запихнуть в один файл. Практически, в нем будет трудно потом разбираться.
В Вашем случае строки подключения к БД (266-267 строки аттача 27.03.2006 в 16:22)
// Подключаем файл "connect_db.php" для соединения с базой данных
include "connect_db.php";
|
нужно перенести вверх и поместить их после 32 строки, т.е. между
и
if (isset($HTTP_POST_VARS["submit"]) and $HTTP_POST_VARS["submit"])
|
PS И между нами... чтобы понять, что именно у Вас не работает, неплохо было бы поглядеть на дамп базы. Или хотя бы часть его. А то когда из нескольких дестятков полей есть только пять, проверять код весьма несладко. | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 10:43)
| | Подскажите, пожалуйста, можно ли по нажатию на кнопке "submit" передать id записи в другой файл? Делала
$id = $_POST["id"];
print "id = ".$id;
|
В ответ:
Notice: Undefined index: id in D:\SERVER\notebook\edit_contact.php on line 35
id =
|
И в базе ничего не обновляется. | |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 13:24)
| | А в HTML-форме у вас имеется скрытое поле id?
<input type=hidden name=id value=<?php echo $id; ?>>
|
| |
|
|
|
|
|
|
|
для: cheops
(28.03.2006 в 13:47)
| | Спасибо! Теперь все обновляется!
if(isset($_FILES['photo']) && !empty($_FILES['photo']['tmp_name']))
{
ini_set("max_execution_time", 999999);
$photo = $_FILES['photo']['tmp_name'];
// otkrivaem
$file = fopen($photo, "rb");
// chitaem
$buffer = fread($file, filesize($photo));
// zakrivaem
fclose($file);
}
echo '<pre>';
print_r($_FILES);
if (empty($error))
{ $query = "UPDATE vsm_notebook SET f_surname='$HTTP_POST_VARS[surname]', f_name='$HTTP_POST_VARS[name]', f_patronymic='$HTTP_POST_VARS[patronymic]', f_country='$HTTP_POST_VARS[country]', f_city='$HTTP_POST_VARS[city]', f_zip='$HTTP_POST_VARS[zip]', f_street='$HTTP_POST_VARS[street]', f_house='$HTTP_POST_VARS[house]', f_flat='$HTTP_POST_VARS[flat]', f_home_tel='$HTTP_POST_VARS[home_tel]', f_working_tel='$HTTP_POST_VARS[working_tel]', f_mobile_tel='$HTTP_POST_VARS[mobile_tel]', f_email='$HTTP_POST_VARS[email]', f_additional_info='$HTTP_POST_VARS[additional_info]', f_date_time=NOW(), f_photo='".mysql_escape_string($buffer)."'
WHERE (f_id='$id')";
$result = mysql_query($query);
|
Если не заполнено поле фото, то он ругается
Notice: Undefined variable: buffer in D:\SERVER\notebook\edit_contact.php on line 290
|
Можно ли от этого избавиться? | |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 13:56)
| | Notice является своеобразным советом и выводится, когда выставлена максимальная чувствительность PHP к ошибкам - её следует понизить, как это сделано на всех хостингах, иначе они не дадут работать. Для этого, следует выставить соответствующее значение для директивы error_reporting http://www.softtime.ru/info/articlephp.php?id_article=23, в конфигурационном файле php.ini
error_reporting = E_ALL & ~E_NOTICE
|
Так же можно изменить уровень обработки ошибок локально, для этого в начало скрипта следует поместить функцию
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
?>
|
В качестве параметра, которой передать соответствующий уровень обработки ошибок.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4985 | |
|
|
|
|
|
|
|
для: cheops
(28.03.2006 в 14:01)
| | По-моему, это был как раз один из тех случаев, когда warning предотвратил зарывание ошибки в логике скрипта в трясину наслоений исправлений этого скрипта.
Вот сижу теперь и думаю, а стоит ли отключать эти самые Warning'и.... | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 14:43)
| | По уму конечно их не стоил бы отключать, но для их устранения придётся шибко код расширять... | |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 13:56)
| | Если не заполнено фото, то всю конструкцию
, f_photo='".mysql_escape_string($buffer)."'
|
нужно из запроса выкинуть. Иначе Вы разрушите старую фотографию. | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 14:04)
| |
$buffer = '';
if(isset($_FILES['photo']) && !empty($_FILES['photo']['tmp_name']))
{
ini_set("max_execution_time", 999999);
$photo = $_FILES['photo']['tmp_name'];
// otkrivaem
$file = fopen($photo, "rb");
// chitaem
$buffer = fread($file, filesize($photo));
$buffer = ", f_photo='".mysql_escape_string($buffer)."'";
// zakrivaem
fclose($file);
}
|
и
$query = "UPDATE vsm_notebook SET f_surname='$HTTP_POST_VARS[surname]', f_name='$HTTP_POST_VARS[name]', f_patronymic='$HTTP_POST_VARS[patronymic]', f_country='$HTTP_POST_VARS[country]', f_city='$HTTP_POST_VARS[city]', f_zip='$HTTP_POST_VARS[zip]', f_street='$HTTP_POST_VARS[street]', f_house='$HTTP_POST_VARS[house]', f_flat='$HTTP_POST_VARS[flat]', f_home_tel='$HTTP_POST_VARS[home_tel]', f_working_tel='$HTTP_POST_VARS[working_tel]', f_mobile_tel='$HTTP_POST_VARS[mobile_tel]', f_email='$HTTP_POST_VARS[email]', f_additional_info='$HTTP_POST_VARS[additional_info]', f_date_time=NOW() $buffer
WHERE (f_id='$id')";
|
| |
|
|
|
|
|
|
|
для: juliya
(28.03.2006 в 13:24)
| | Можно. Для этого нужно в форму добавить еще одно поле. Скрытое.
<form enctype=multipart/form-data method="post">
<input type=hidden name=id value=<?echo $id; ?> >
|
| |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 13:49)
| | Ура!!! Всем Спасибо!!! Все работает!!! Вы просто гении!!! | |
|
|
|