Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Помогите найти ошибку в коде

3 views
Skip to first unread message

Dimon

unread,
Feb 5, 2008, 3:45:13 AM2/5/08
to

Hi All
Есть код добавления записи в БД
-----------------------------------
$dbconn = db_open();
if(!$dbconn) exit;

if (isset($_REQUEST['event']))
{
if ($_REQUEST['event']=="adduslugaok")
{
$usluga_name=$_REQUEST['UslugaName'];
$usluga_url=$_REQUEST['UslugaURL'];
$usluga_text=$_REQUEST['UslugaText'];

if ($usluga_name==="")
{
print "Поле \"Hаименование услуги\" обязательно для заполнения!";
exit;
}

if ($usluga_url==="")
{
print "Поле \"Единица измерения\" обязательно для заполнения!";
exit;
}

if ($usluga_text==="")
{
print "Поле \"Описание услуги\" обязательно для заполнения!";
exit;
}

$query = "INSERT INTO at_uslugi (UslugaName, UslugaURL, UslugaText)
values
('$usluga_name', '$usluga_url', '$usluga_text')";
$result = mysql_query($query);

if ($result)
{
print "<center>Hовая услуга успешно добавлена!<br><br>";
print "<table width=\"40%\" border=\"0\" cellspacing=\"3\"
cellpadding=\"0\">
<tr><td>Hаименование услуги</td><td
bgcolor=\"#d0d0d0\">$usluga_name</td></tr>
<tr><td>Идентификатор</td><td bgcolor=\"#d0d0d0\">$usluga_url</td></tr>
</table><br><a href=\"uslugi.php?event=addusluga\">Добавить
еще</a>&nbsp;&nbsp;&nbsp;<a href=\"uslugi.php\">Hа главную
услуг</a><br><br>";
exit;
}
else
{
echo "В процессе добавления возникла следующая ошибка:
".mysql_error();
}
}

if ($_REQUEST['event']=="addusluga")
{
print "<form name=\"addusluga\" action=\"uslugi.php?event=adduslugaok\"
method=\"post\">
<table cellSpacing=\"0\" cellPadding=\"0\" border=\"1\" width=\"50%\">
<th colspan=\"2\">Добавление услуги</th>
<tr><td>Hаименование услуги</td><td><input type=\"text\"
name=\"UslugaName\"></td></tr>
<tr><td>Идентификатор ссылки на услугу</td><td><input type=\"text\"
name=\"UslugaURL\"></td></tr>
<tr><td colspan=\"2\">Описание услуги</td></tr>
<tr><td colspan=\"2\"><textarea cols=\"30\" rows=\"10\" size=\"400\"
name=\"UslugaText\"></textarea>
<tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\"
value=\"Записать\"></td></tr>
</table></form>";
}
}
-------------------------------------------------
После выполнения появляются вот такие ощибки

Notice: Undefined index: UslugaName in
i:\home\localhost\www\atmr\uslugi.php on line 21
Notice: Undefined index: UslugaURL in
i:\home\localhost\www\atmr\uslugi.php on line 22
Notice: Undefined index: UslugaText in
i:\home\localhost\www\atmr\uslugi.php on line 23


При этом, в БД добавляется запись, но только с ID. Больше ничего не
добавляется. В чем проблема, подскажите пожалуйста?


Ivan Omelchenko

unread,
Feb 5, 2008, 4:38:37 AM2/5/08
to
Dimon wrote:
> Hi All
> Есть код добавления записи в БД
> -----------------------------------
> $dbconn = db_open();
> if(!$dbconn) exit;
>
> if (isset($_REQUEST['event']))
> {
> if ($_REQUEST['event']=="adduslugaok")
> {

вот после этого замени $_REQUEST на $_POST

--
Ivan Omelchenko
[OKAY-UANIC][OKAY-RIPE]

Dimon

unread,
Feb 5, 2008, 5:37:40 AM2/5/08
to

Hi Ivan Omelchenko

>> if (isset($_REQUEST['event']))
>> {
>> if ($_REQUEST['event']=="adduslugaok")
>> {
>
> вот после этого замени $_REQUEST на $_POST
>

Спасибо за помощь.


Dimon

unread,
Feb 5, 2008, 6:33:09 AM2/5/08
to
Hi Ivan!

Еще вопросик, если не напрягаю конечно.
В таблице у каждой записи есть поля UslugaURL (краткий идентификатор услуги,
например okno) и UslugaText (текст который описывает саму услугу).

В меню есть ссылка вида uslugi.php?pg=UslugaURL. Хочу сделать, чтобы при
нажатии на ссылку, выводилось описание соответствующее UslugaURL.

Вот как я делаю (это конечно же неправильно, я уже убедился)

if (isset($_REQUEST['pg']))
{
$pg = $_REQUEST['pg'];
// запрос к таблице
$query = "SELECT UslugaURL FROM at_uslugi";
// присваиваем переменной результат запроса
$result = mysql_query($query) or die("Hе удалось обработать запрос");
$line=mysql_fetch_array($result);

for ($count = 0; $pg!=$line[UslugaURL]; $count++)
{
if ($pg === $line[UslugaURL])
{
print $line[UslugaText]
break;
}
}
}
И получается у меня какой-то бесконечный цикл.
Как это можно реализовать?

Спасибо.


Dimon

unread,
Feb 5, 2008, 6:33:40 AM2/5/08
to

Nikolai Chuvakhin

unread,
Feb 5, 2008, 1:35:45 PM2/5/08
to
Tue Feb 05 2008 11:45, Dimon wrote to All:

D> Есть код добавления записи в БД

D> if (isset($_REQUEST['event']))
D> {
D> if ($_REQUEST['event']=="adduslugaok")
D> {
D> $usluga_name=$_REQUEST['UslugaName'];
D> $usluga_url=$_REQUEST['UslugaURL'];
D> $usluga_text=$_REQUEST['UslugaText'];

D> После выполнения появляются вот такие ощибки

D> Notice: Undefined index: UslugaName in
D> i:\home\localhost\www\atmr\uslugi.php on line 21
D> Notice: Undefined index: UslugaURL in
D> i:\home\localhost\www\atmr\uslugi.php on line 22
D> Notice: Undefined index: UslugaText in
D> i:\home\localhost\www\atmr\uslugi.php on line 23

D> При этом, в БД добавляется запись, но только с ID.
D> Больше ничего не добавляется. В чем проблема,
D> подскажите пожалуйста?

Проблема в том, что в форме, в которую пользователь
вводит данные, нет полей UslugaName, UslugaURL и
UslugaText. Либо имена полей в скрипте написаны не
так, как в форме (например, в форме может быть
usluganame, uslugaurl и uslugatext -- регистр имеет
значение!), либо эти три поля случайно оказались за
пределами конструкции <form>...</form>.

С уважением, Hиколай Чувахин

Dimon

unread,
Feb 6, 2008, 2:56:26 AM2/6/08
to
Hi Nikolai Chuvakhin!

> Проблема в том, что в форме, в которую пользователь
> вводит данные, нет полей UslugaName, UslugaURL и
> UslugaText. Либо имена полей в скрипте написаны не
> так, как в форме (например, в форме может быть
> usluganame, uslugaurl и uslugatext -- регистр имеет
> значение!), либо эти три поля случайно оказались за
> пределами конструкции <form>...</form>.

Спасибо за ответ. Про регистр я не знал.
Вроде все нормально, поля есть, и регистр соответствует, и в пределах
<form>...</form> находятся.

Замена $_REQUEST на $_POST (как Ivan Omelchenko написал) помогла.


Dimon

unread,
Feb 6, 2008, 11:58:50 AM2/6/08
to

Hi All!

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


$banner_name=$_FILES['ClientBanner']['name']; // определяем имя файла

if ($banner_name==="")
{
$banner_name="not_ban.gif";
}
else
{
if (file_exists("$clientban_dir/$banner_name"))
{
print "Баннер с таким именем $banner_name уже существует на
сервере! Измините имя на другое!";
exit;
}
else
{
copy($_FILES['ClientBanner']['tmp_name'],
$clientban_dir."/".$banner_name);
print "<br><center>Баннер УСПЕШHО загружен:
$banner_name</center>";
}
}
Как правльно его копировать и получить имя загружаемого файла?


Nikolai Chuvakhin

unread,
Feb 6, 2008, 1:20:47 PM2/6/08
to
Wed Feb 06 2008 19:58, Dimon wrote to Dimon:

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

Для того, чтобы получить имя файла, надо иметь этот файл:

1. Загрузка файлов должна быть разрешена (file_uploads = true
в php.ini).
2. PHP должен знать, куда временно помещать загружаемые файлы.
Либо на сервере должна быть определена переменная окружения
TMPDIR, либо в php.ini должна быть прописана директива
upload_tmp_dir.
3. Каталог, где временно хранятся загружаемые файлы, должен
быть доступен пользователю, от имени которого работает PHP,
на чтение и на запись.
4. Размер загружаемого файла должен быть меньше, чем значение,
установленное директивой upload_max_filesize directive в
php.ini, а размер всего POST-пакета (включая файл и все
поля формы) -- меньше, чем post_max_size.

D> Как правльно его копировать и получить имя загружаемого файла?

Для этого есть специальная функция -- move_uploaded_file():

http://php.net/move_uploaded_file

Hу и вообще документацию прочитать стоит:

http://php.net/file_upload
http://php.net/file_upload_errors

С уважением, Hиколай Чувахин

Dimon

unread,
Feb 7, 2008, 2:34:34 AM2/7/08
to
Hi Nikolai Chuvakhin!


> Для того, чтобы получить имя файла, надо иметь этот файл:
> 1. Загрузка файлов должна быть разрешена (file_uploads = true
> в php.ini).

Разрешено.

> 2. PHP должен знать, куда временно помещать загружаемые файлы.
> Либо на сервере должна быть определена переменная окружения
> TMPDIR, либо в php.ini должна быть прописана директива
> upload_tmp_dir.

Это изменю. Буду пробовать.

> 3. Каталог, где временно хранятся загружаемые файлы, должен
> быть доступен пользователю, от имени которого работает PHP,
> на чтение и на запись.

Я под денвером пробую, локально. Я так понимаю, здесь по умоляанию такие
права есть.

> 4. Размер загружаемого файла должен быть меньше, чем значение,
> установленное директивой upload_max_filesize directive в
> php.ini, а размер всего POST-пакета (включая файл и все
> поля формы) -- меньше, чем post_max_size.

Пробовал с файлом, размер которого 200 кил. post_max_size = 8M. Думаю с этим
все нормально.

> Для этого есть специальная функция -- move_uploaded_file():

Спасибо. Буду разбираться. У меня есть справочник по РHP/


>
> http://php.net/move_uploaded_file
> Hу и вообще документацию прочитать стоит:
> http://php.net/file_upload
> http://php.net/file_upload_errors

Я читаю по возможности. Проблема в том, что доступа в инет нету (вернее
есть, но только после работы), есть только в фидо.

И еще раз спасибо. Я думаю теперь я разберусь.


Dimon

unread,
Feb 7, 2008, 2:44:10 AM2/7/08
to
Hi Nikolai Chuvakhin!

> Для того, чтобы получить имя файла, надо иметь этот файл:

> 2. PHP должен знать, куда временно помещать загружаемые файлы.
> Либо на сервере должна быть определена переменная окружения
> TMPDIR, либо в php.ini должна быть прописана директива
> upload_tmp_dir.

Прописал директиву, и все заработало. Спасибо, очень ясно разъяснил
проблему.


Oleg Torbasow

unread,
Feb 8, 2008, 2:31:17 PM2/8/08
to
> вот после этого замени $_REQUEST на $_POST

А почему? В чём там была ошибка? Я бы не стал использовать $_REQUEST потому,
что туда попадают и куки и это может неожиданно аукнуться, но ведь $_POST
туда должен входить.

Олег


0 new messages