[решено] Ошибки "Undefined variable"

Аватара пользователя
FoXLee

[решено] Ошибки "Undefined variable"

Сообщение FoXLee »

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



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



Код: Выделить всё

<?
$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.htm">Назад</a></p>
</body>
</html>


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



Код: Выделить всё

<?
$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.htm">Возврат к главному меню</a></p>
    </body>
</html>


Ну и самый главный гемор, который весь вечер вчерашний пытался вылечить (поскольку только он мешает нормальной работе "системы управления БД"):

На странице при открытии, в полях ввода должны уже находиться данные, которые хранятся в базе данных для выбранной вакансии. Чтобы было удобно обновлять информацию, не вбивая её всю заново. При открытии вместо данных из базы данных в полях ввода ошибка:


Notice: Undefined variable: vac_name in C:\apache\localhost\www\show_modvac.php on line 38




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



Код: Выделить всё

<?
$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.htm">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>
Аватара пользователя
FoXLee

Re: [решено] Ошибки "Undefined variable"

Сообщение FoXLee »

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



Рабочий код:

Код: Выделить всё

<?
$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.htm">Возврат к главному меню</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\" Изображение
Аватара пользователя
FoXLee

Re: [решено] Ошибки "Undefined variable"

Сообщение FoXLee »

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

Re: [решено] Ошибки "Undefined variable"

Сообщение Coutty »

В первом куске - напишите $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-тэги: . Пишите лучше

В общем-то, всё это (кроме п.4) и к первому скрипту относится.
Аватара пользователя
FoXLee

Re: [решено] Ошибки "Undefined variable"

Сообщение FoXLee »

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



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



При таком коде, ошибка:

Parse error: syntax error, unexpected ':' in C:\apache\localhost\www\show_modvac.php on line 15

Код: Выделить всё

<?
$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);
$row: 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.htm">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>


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



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

Re: [решено] Ошибки "Undefined variable"

Сообщение DedAlex »

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

Код: Выделить всё

<?
$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.htm">Возврат к главному меню</a></p>
        </FORM>
    </BODY>
</HTML>


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



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



Аватара пользователя
FoXLee

Re: [решено] Ошибки "Undefined variable"

Сообщение FoXLee »

Цитата FoXLee:



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




Смотрите в HTML, а не в рендеренной странице. Оно же выводится перед , а значит в браузере видно не будет.

Ну или вставьте print_r($row); внутри , чтобы увидеть вывод прямо в браузере. Для удобства можно окружить тэгами :

Код: Выделить всё

...

<body><pre>

<?php

print_r($row);

?>

</pre>

...


Должно выводится содержание массива $row.
Аватара пользователя
Coutty

Re: [решено] Ошибки "Undefined variable"

Сообщение Coutty »

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

Код: Выделить всё

<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..........
Аватара пользователя
FoXLee

Re: [решено] Ошибки "Undefined variable"

Сообщение FoXLee »

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

Код: Выделить всё

<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

Re: [решено] Ошибки "Undefined variable"

Сообщение Coutty »

Хм... Нет, это не тот ответ) Похоже, что $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'].
Ответить

Вернуться в «Вебмастеру»