Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Ошибки "Undefined variable" (http://forum.oszone.net/showthread.php?t=116915)

FoXLee 11-09-2008 15:14 896413

Ошибки "Undefined variable"
 
Здравствуйте. Сделал небольшой набор кодов для того, чтобы можно было добавлять, смотреть, обновлять и удалять данные из таблиц, код работает, но в некоторых местах выдает уведомление: "Undefined variable" и кое-где не работает как надо.

Ошибка: Notice: Undefined variable: display_block in C:\apache\localhost\www\sel_bydate.php on line 31

PHP код:

<?
$db_name 
"GoDB";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwerty")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT * FROM $table_name ORDER BY date DESC";
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");

while (
$row mysql_fetch_array($result)) {

$vac_id $row['vac_id'];
$vac_name $row['vac_name'];
$age $row['age'];
$formation $row['formation'];
$exp $row['exp'];
$duties $row['duties'];
$conditions $row['conditions'];
$contacts $row['contacts'];
$date $row['date'];

$display_block .= "
<p><strong>$vac_name</strong><br>
<strong>Требования: </strong> Возраст: $age $formation $exp<br>
<strong>Обязанности: </strong> $duties<br>
<strong>Условия: </strong> $conditions $contacts<br>
<strong>Дата добавления вакансии: </strong> $date
</p>
"
;


}

?>
<html>
<head>
<title>Список Вакансий (сортировка по номеру)</title>
</head>
<body>
<h1>Список Вакансий</h1>
<?
echo "$display_block";
?>
<p><a href ="index.php">Назад</a></p>
</body>
</html>

Ошибка: Notice: Undefined variable: option_block in C:\apache\localhost\www\pick_modvac.php on line 15

PHP код:

<?
$db_name 
"GoDB";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwerty")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT vac_id, vac_name, date FROM $table_name ORDER BY date";
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");
while (
$row mysql_fetch_array($result)) {
    
$vac_id $row['vac_id'];
    
$vac_name $row['vac_name'];
    
$date $row['date'];
    
$option_block .= "<option value=\"$vac_id\">$vac_name, $date</option>";
}
$display_block "
<FORM METHOD=\"post\" ACTION=\"show_modvac.php\">
<p><strong>Вакансия:</strong>
<select name=\"vac_id\">
$option_block
</select>
<p><INPUT TYPE=\"SUBMIT\" NAME=\"submit\" VALUE=\"Изменить\"></P>
</form>
"
;
?>
<html>
    <head>
        <title>Управление вакансиями: Изменение вакансии</title>
    </head>
    <body>
        <h1>Управление вакансиями</h1>
        <h2><em>Изменение вакансии - Выбор из списка</em></h2>
        <p>Выберите вакансию из списка, чтобы изменить записанную информацию</p>
        <? echo "$display_block"?>
        <p><a href="index.php">Возврат к главному меню</a></p>
    </body>
</html>

Ну и самый главный гемор, который весь вечер вчерашний пытался вылечить (поскольку только он мешает нормальной работе "системы управления БД"):
На странице при открытии, в полях ввода должны уже находиться данные, которые хранятся в базе данных для выбранной вакансии. Чтобы было удобно обновлять информацию, не вбивая её всю заново. При открытии вместо данных из базы данных в полях ввода ошибка:
<br /> <b>Notice</b>: Undefined variable: vac_name in <b>C:\apache\localhost\www\show_modvac.php</b> on line <b>38</b><br />

в каждом поле соответственно вместо "vac_name" и линии другие переменные. НО в первом поле (vac_id - "номер вакансии") есть цифра 1 - т.е. первое поле заполнилось как надо. Далее код этой страницы:

PHP код:

<?
$db_name 
"GoBD";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwerty")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT vac_id, vac_name, age, formation, exp, duties, conditions, contacts, date
FROM $table_name
WHERE vac_id = \"vac_id\"
"
;
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");
while (
$row mysql_fetch_array($result)) {
    
$vac_id $row['vac_id'];
    
$vac_name $row['vac_name'];
    
$age $row['age'];
    
$formation $row['formation'];
    
$exp $row['exp'];
    
$duties $row['duties'];
    
$conditions $row['conditions'];
    
$contacts $row['contacts'];
    
$date $row['date'];
}
?>
<html>
    <head>
        <title>Управление вакансиями: Изменение вакансии</title>
    </head>
    <body>
        <h1>Управление вакансиями</h1>
        <h2><em>Изменение вакансии</em></h2>
        <FORM METHOD="post" ACTION="do_modvac.php">
            <INPUT TYPE="hidden" name="vac_id" value="<? echo "$vac_id"?>">
            <P><STRONG>Номер вакансии :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_id" VALUE="<? echo "$vac_id"?>" SIZE=5 MAXLENGHT=5></p>
            <P><STRONG>Должность :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_name" VALUE="<? echo "$vac_name"?>" SIZE=100 MAXLENGHT=150></p>
            <P><STRONG>Возраст :</STRONG><BR>
            <INPUT TYPE="text" NAME="age" VALUE="<? echo "$age"?>" SIZE=20 MAXLENGTH=100</p>
            <P><STRONG>Образование :</STRONG><BR>
            <INPUT TYPE="text" NAME="formation" VALUE="<? echo "$formation"?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Опыт работы :</STRONG><BR>
            <INPUT TYPE="text" NAME="exp" VALUE="<? echo "$exp"?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Обязанности :</STRONG><BR>
            <INPUT TYPE="text" NAME="duties" VALUE="<? echo "$duties"?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Условия :</STRONG><BR>
            <INPUT TYPE="text" NAME="conditions" VALUE="<? echo "$conditions"?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Контакты :</STRONG><BR>
            <INPUT TYPE="text" NAME="contacts" VALUE="<? echo "$contacts"?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Дата добавления вакансии (ГГГГ-ММ-ДД) :</STRONG><BR>
            <INPUT TYPE="text" NAME="date" VALUE="<? echo "$date"?>" SIZE=10 MAXLENGTH=10</p>
            <P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Обновить"></P>
            <p><a href="pick_modvac.php">Назад</a></p>
            <p><a href="index.php">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>


Coutty 11-09-2008 16:02 896454

В первом куске - напишите $display_block = ""; перед while. Видимо, к несуществующей переменной он добавлять строку не может.
Во втором, соответственно, $option_block=""; перед while.

По третьему что могу сказать:
1. Когда пишите echo $var_id; и т.д. кавычки можно не ставить.
2. Зачем вот это в цикле: while ($row = mysql_fetch_array($result)) ? Одна ведь строка выбирается. Избавьтесь от while.
3. Зачем заниматься такой ерундой: $vac_id = $row['vac_id']; , если можно потом просто написать echo $row['vac_id']; ?
4. Попробуйте вывести содержимое переменной $row: print_r($row); после mysql_fetch_array(). Посмотрим, что оно выдаёт.
5. Это мелочь, но всё же, не везде php-парсер принимает скрипт, если он заключён в short-тэги: <? ... ?>. Пишите лучше <?php ... ?>
В общем-то, всё это (кроме п.4) и к первому скрипту относится.

FoXLee 11-09-2008 16:15 896468

ясно, спасибо, буду пробовать когда освобожусь, позже отпишусь.

FoXLee 11-09-2008 17:25 896532

Спасибо, с первым и вторым разобрался.

Теперь далее:

При таком коде, ошибка:
Parse error: syntax error, unexpected ':' in C:\apache\localhost\www\show_modvac.php on line 15
PHP код:

<?
$db_name 
"jobnav";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwepoi")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT vac_id, vac_name, age, formation, exp, duties, conditions, contacts, date
FROM $table_name
WHERE vac_id = \"vac_id\"
"
;
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");
$row mysql_fetch_array($result);
$rowprint_r($row);
?>
<html>
    <head>
        <title>Управление вакансиями: Изменение вакансии</title>
    </head>
    <body>
        <h1>Управление вакансиями</h1>
        <h2><em>Изменение вакансии</em></h2>
        <FORM METHOD="post" ACTION="do_modvac.php">
            <INPUT TYPE="hidden" name="vac_id" value="<? echo $vac_id?>">
            <P><STRONG>Номер вакансии :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_id" VALUE="<? echo $vac_id?>" SIZE=5 MAXLENGHT=5></p>
            <P><STRONG>Должность :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_name" VALUE="<? echo $vac_name?>" SIZE=100 MAXLENGHT=150></p>
            <P><STRONG>Возраст :</STRONG><BR>
            <INPUT TYPE="text" NAME="age" VALUE="<? echo $age?>" SIZE=20 MAXLENGTH=100</p>
            <P><STRONG>Образование :</STRONG><BR>
            <INPUT TYPE="text" NAME="formation" VALUE="<? echo $formation?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Опыт работы :</STRONG><BR>
            <INPUT TYPE="text" NAME="exp" VALUE="<? echo $exp?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Обязанности :</STRONG><BR>
            <INPUT TYPE="text" NAME="duties" VALUE="<? echo $duties?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Условия :</STRONG><BR>
            <INPUT TYPE="text" NAME="conditions" VALUE="<? echo $conditions?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Контакты :</STRONG><BR>
            <INPUT TYPE="text" NAME="contacts" VALUE="<? echo $contacts?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Дата добавления вакансии (ГГГГ-ММ-ДД) :</STRONG><BR>
            <INPUT TYPE="text" NAME="date" VALUE="<? echo $date?>" SIZE=10 MAXLENGTH=10</p>
            <P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Обновить"></P>
            <p><a href="pick_modvac.php">Назад</a></p>
            <p><a href="index.php">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>

При изменении echo $vac_name на echo $row['vac_name'] - поле ввода просто пустое, без ошибок, но и без инфы из БД.

Как я уже говорил, поле "Номер вакансии" (vac_id) он показывает правильно, может из-за того, что там только цифры, а с текстом он не может подружиться?

DedAlex 11-09-2008 17:34 896539

FoXLee, а что это за странная команда?
PHP код:

$rowprint_r($row); 


FoXLee 11-09-2008 17:35 896540

Если сделать так, то разницы не видно:
PHP код:

<?
$db_name 
"jobnav";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwepoi")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT vac_id, vac_name, age, formation, exp, duties, conditions, contacts, date
FROM $table_name
WHERE vac_id = \"vac_id\"
"
;
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");
$row mysql_fetch_array($result);
print_r($row);
?>
<html>
    <head>
        <title>Управление вакансиями: Изменение вакансии</title>
    </head>
    <body>
        <h1>Управление вакансиями</h1>
        <h2><em>Изменение вакансии</em></h2>
        <FORM METHOD="post" ACTION="do_modvac.php">
            <INPUT TYPE="hidden" name="vac_id" value="<? echo $vac_id?>">
            <P><STRONG>Номер вакансии :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_id" VALUE="<? echo $vac_id?>" SIZE=5 MAXLENGHT=5></p>
            <P><STRONG>Должность :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_name" VALUE="<? echo $vac_name?>" SIZE=100 MAXLENGHT=150></p>
            <P><STRONG>Возраст :</STRONG><BR>
            <INPUT TYPE="text" NAME="age" VALUE="<? echo $age?>" SIZE=20 MAXLENGTH=100</p>
            <P><STRONG>Образование :</STRONG><BR>
            <INPUT TYPE="text" NAME="formation" VALUE="<? echo $formation?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Опыт работы :</STRONG><BR>
            <INPUT TYPE="text" NAME="exp" VALUE="<? echo $exp?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Обязанности :</STRONG><BR>
            <INPUT TYPE="text" NAME="duties" VALUE="<? echo $duties?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Условия :</STRONG><BR>
            <INPUT TYPE="text" NAME="conditions" VALUE="<? echo $conditions?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Контакты :</STRONG><BR>
            <INPUT TYPE="text" NAME="contacts" VALUE="<? echo $contacts?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Дата добавления вакансии (ГГГГ-ММ-ДД) :</STRONG><BR>
            <INPUT TYPE="text" NAME="date" VALUE="<? echo $date?>" SIZE=10 MAXLENGTH=10</p>
            <P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Обновить"></P>
            <p><a href="pick_modvac.php">Назад</a></p>
            <p><a href="index.php">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>

т.е. Что есть команда print_r($row); что её нету - нет новых ошибок

Вот картинка, чтобы понятнее было о чем речь


Coutty 11-09-2008 18:05 896558

Цитата:

Цитата FoXLee
т.е. Что есть команда print_r($row); что её нету - нет новых ошибок »

Смотрите в HTML, а не в рендеренной странице. Оно же выводится перед <html>, а значит в браузере видно не будет.
Ну или вставьте print_r($row); внутри <body>, чтобы увидеть вывод прямо в браузере. Для удобства можно окружить тэгами <pre>:
PHP код:

...
<body><pre>
<?php
print_r
($row);
?>
</pre>
...

Должно выводится содержание массива $row.

FoXLee 11-09-2008 18:14 896562

Все равно ничего нету, может это и есть ответ?
PHP код:

<html>
    <
head>
        <
title>Управление вакансиямиИзменение вакансии</title>
    </
head>
    <
body>
    ...
<
body><pre>
</
pre>
...
        <
h1>Управление вакансиями</h1>

        <
h2><em>Изменение вакансии</em></h2>
        <
FORM METHOD="post" ACTION="do_modvac.php">
            <
INPUT TYPE="hidden" name="vac_id" value="3">
            <
P><STRONG>Номер вакансии :</STRONG><BR>
            <
INPUT TYPE="text" NAME="va.......... 


Coutty 11-09-2008 18:24 896566

Хм... Нет, это не тот ответ) Похоже, что $row просто не существует. Может быть ошибка в SQL-запросе?
Теперь давайте сделаем так:
PHP код:

$sql "SELECT vac_id, vac_name, age, formation, exp, duties, conditions, contacts, date
FROM $table_name
WHERE vac_id = \"vac_id\"
"
;
echo 
$sql

Посмотрим какой тут запрос формируется.
Может быть не vac_id = \"vac_id\", а vac_id = \"$vac_id\" надо? (кстати, откуда эта vac_id берётся? Из GET или POST-запроса? Тогда пишите $_GET['vac_id'] или $_POST['vac_id'].

Igor_I 12-09-2008 01:30 896891

Что-то я запамятовал, но мне кажется что идет путаница между полями в MySQL и переменными в PHP. После запроса к базе надо присваивать полученные значения переменным.

FoXLee 12-09-2008 14:15 897184

Coutty, Вы были правы, $row не существовал из-за vac_id = \"vac_id\", вместо vac_id = \"$vac_id\" . Я заменил echo $vac_name на echo $row['vac_name'] и все заполнилось без проблем, ну и убрал из кода вывод запроса sql и отображение $row

Рабочий код:
PHP код:

<?
$db_name 
"jobnav";
$table_name "vacansies";
$connection = @mysql_connect("localhost""root""qwepoi")
or die(
"Невозможно подключиться MySQL.");
$db = @mysql_select_db ($db_name$connection)
or die (
"Невозможно выбрать базу данных.");
$sql "SELECT vac_id, vac_name, age, formation, exp, duties, conditions, contacts, date
FROM $table_name
WHERE vac_id = \"$vac_id\"
"
;
$result = @mysql_query($sql$connection)
or die(
"Невозможно выполнить запрос.");
$row mysql_fetch_array($result);
?>
<html>
    <head>
        <title>Управление вакансиями: Изменение вакансии</title>
    </head>
    <body>
        <h1>Управление вакансиями</h1>
        <h2><em>Изменение вакансии</em></h2>
        <FORM METHOD="post" ACTION="do_modvac.php">
            <INPUT TYPE="hidden" name="vac_id" value="<? echo $vac_id?>">
            <P><STRONG>Номер вакансии :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_id" VALUE="<? echo $vac_id?>" SIZE=5 MAXLENGHT=5></p>
            <P><STRONG>Должность :</STRONG><BR>
            <INPUT TYPE="text" NAME="vac_name" VALUE="<? echo $row['vac_name']; ?>" SIZE=100 MAXLENGHT=150></p>
            <P><STRONG>Возраст :</STRONG><BR>
            <INPUT TYPE="text" NAME="age" VALUE="<? echo $row['age']; ?>" SIZE=20 MAXLENGTH=100</p>
            <P><STRONG>Образование :</STRONG><BR>
            <INPUT TYPE="text" NAME="formation" VALUE="<? echo $row['formation']; ?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Опыт работы :</STRONG><BR>
            <INPUT TYPE="text" NAME="exp" VALUE="<? echo $row['exp']; ?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Обязанности :</STRONG><BR>
            <INPUT TYPE="text" NAME="duties" VALUE="<? echo $row['duties']; ?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Условия :</STRONG><BR>
            <INPUT TYPE="text" NAME="conditions" VALUE="<? echo $row['conditions']; ?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Контакты :</STRONG><BR>
            <INPUT TYPE="text" NAME="contacts" VALUE="<? echo $row['contacts']; ?>" SIZE=100 MAXLENGTH=150</p>
            <P><STRONG>Дата добавления вакансии (ГГГГ-ММ-ДД) :</STRONG><BR>
            <INPUT TYPE="text" NAME="date" VALUE="<? echo $row['date']; ?>" SIZE=10 MAXLENGTH=10</p>
            <P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Обновить"></P>
            <p><a href="pick_modvac.php">Назад</a></p>
            <p><a href="index.php">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>

Всем спасибо.

ой, забыл изменить $vac_id на echo $row['vac_id'] в html в hidden и text, но и с "$vac_id" - тоже отображается правильно. Странно.

Работает во всех полях как $vac_id так и $row['vac_id'], вся проблема была в недостающем знаке $ в WHERE vac_id = \"$vac_id\" :)

Coutty 12-09-2008 18:36 897392

Цитата:

Цитата FoXLee
ой, забыл изменить $vac_id на echo $row['vac_id'] в html в hidden и text, но и с "$vac_id" - тоже отображается правильно. Странно. »

Включен параметр register_globals в php.ini? Похоже на то.
Тогда этот $vac_id берётся из $_GET[vac_id] или $_POST[vac_id] (в общем, из $_QUERY[vac_id]), а не из $row.

И ещё - зачем $vac_id писать и в hidden-поле, и в text? Name у переменной одно и тоже. Можно убрать hidden.

FoXLee 12-09-2008 18:52 897408

register_globals выключен

Igor_I 12-09-2008 18:58 897415

Цитата:

Цитата FoXLee
ой, забыл изменить $vac_id на echo $row['vac_id'] в html в hidden и text, но и с "$vac_id" - тоже отображается правильно. Странно. »

Правильно только потому, что $vac_id и $row['vac_id'] в данном случае равны.

echo $_POST[vac_id] - что покажет?


Время: 03:42.

Время: 03:42.
© OSzone.net 2001-