1 (изменено: Ketsyki, 2011-03-17 16:17:55)

Тема: PHP код для небольшой админки. Ошибка.

Вот есть такой код, написанный по аналогии с кодом из учебника:

-----------------------------------------------------
Тут много кода, не касающегося проблемы.
------------------------------------------------------
...
...
...

function edit_record()
{
global $default_dbname, $user_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];
$userid = $_GET["userid"];
$Section = $_GET["Section"];
$Docname = $_GET["Docname"];
$Surname = $_GET["Surname"];
$Name = $_GET["Name"];
$Patronymic = $_GET["Patronymic"];
$Email = $_GET["Email"];
$Telephone = $_GET["Telephone"];
$Sex = $_GET["Sex"];
$Date = $_GET["Date"];
$Country = $_GET["Country"];
$Region = $_GET["Region"];
$City = $_GET["City"];
$School = $_GET["School"];
$Address = $_GET["Address"];
if(empty($userid)){
$userid = $_GET['new_userid'];
}
$link_id = db_connect($default_dbname);
if(!$link_id){
error_message(sql_error());
}
$field_str = ";
if($userid != $new_userid) $field_str = " userid = '$newuserid', ";
$field_str .= " Surname = '$Surname', ";
$field_str .= " Name = '$Name', ";
$field_str .= " Patronymic = '$Patronymic', ";
$field_str .= " Email = '$Email'";
$field_str .= " Telephone = '$Telephone'";
$field_str .= " Sex = '$Sex'";
$field_str .= " Date = '$Date'";
$field_str .= " Country = '$Country'";
$field_str .= " Region = '$Region'";
$field_str .= " City = '$City'";
$field_str .= " School = '$School'";
$field_str .= " Address = '$Address'";


$query = "UPDATE IGNORE $user_tablename SET $field_str WHERE userid = '$userid'";
$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");
}



function view_record() {
global $default_dbname, $user_tablename, $access_log_tablename;
global $position_array; $userid = $_GET['userid'];
$PHP_SELF = $_SERVER['PHP_SELF'];
if(empty($userid)){
error_message('Введите идентификатор пользователя!');
}
$link_id = db_connect($default_dbname);
if(!$link_id){
error_message(sql_error());
}
$query = "SELECT usernumber, userid, username, userposition, useremail,
userprofile FROM $user_tablename WHERE userid = '$userid'";
$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$query_data = mysql_fetch_array($result);
$userid = $query_data["userid"];
$Section = $query_data["Section"];
$Docname = $query_data["Docname"];
$Surname = $query_data["Surname"];
$Name = $query_data["Name"];
$Patronymic = $query_data["Patronymic"];
$Email = $query_data["Email"];
$Telephone = $query_data["Telephone"];
$Sex = $query_data["Sex"];
$Date = $query_data["Date"];
$Country = $query_data["Country"];
$Region = $query_data["Region"];
$City = $query_data["City"];
$School = $query_data["School"];
$Address = $query_data["Address"];

html_header();
echo "<center><H3>
Запись для пользователя №
</h3></center>";
?>
<form method="get" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="action" value="edit_record">
<input type="hidden" name="userid" value="<? echo $userid ?>">
<div align="center"><center>
<table border="1" width="90%" cellpadding="2">
<tr>
<th width="30%" nowrap>Идентификатор</th>
<td width="70%">
<input type="text" name="new_userid"
value="<?php echo $userid ?>"
size="8" maxlength="8"></td>
</tr>

<tr>
<th width="30%" nowrap>Секция</th>
<th width="70%"><input type="text" name="Section"
value="<?php echo $Section ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Название доклада</th>
<th width="70%"><input type="text" name="Docname"
value="<?php echo $Docname ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Фамилия</th>
<th width="70%"><input type="text" name="Surname"
value="<?php echo $Surname ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Имя</th>
<th width="70%"><input type="text" name="Name"
value="<?php echo $Name ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Отчество</th>
<th width="70%"><input type="text" name="Patronymic "
value="<?php echo $Patronymic ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Email</th>
<th width="70%"><input type="text" name="Email"
value="<?php echo $Email ?>" SIZE="20"></td>
</tr>


<tr>
<th width="30%" nowrap>Telephone</th>
<th width="70%"><input type="text" name="Telephone"
value="<?php echo $Telephone ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Sex</th>
<th width="70%"><input type="text" name="Sex"
value="<?php echo $Sex ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Date</th>
<th width="70%"><input type="text" name="Date"
value="<?php echo $Date ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Country</th>
<th width="70%"><input type="text" name="Country"
value="<?php echo $Country ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Region</th>
<th width="70%"><input type="text" name="Region"
value="<?php echo $Region ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>City</th>
<th width="70%"><input type="text" name="City"
value="<?php echo $City ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>School</th>
<th width="70%"><input type="text" name="School"
value="<?php echo $School ?>" SIZE="20"></td>
</tr>

<tr>
<th width="30%" nowrap>Address</th>
<th width="70%"><input type="text" name="Address"
value="<?php echo $Address ?>" SIZE="20"></td>
</tr>

<tr>
<th width="100%" colspan="2" nowrap>
<input type="submit" value="Записать">
<input type="reset" value="Очистить">
</th>
</tr>
</table>
</center></div>
</form>
<?php
echo "<HR SIZE=\"2\" WIDTH=\"90%\">\n";

?>

</TR>
</TABLE>


</DIV>
<?php
}
html_footer();
}

if (empty($_GET['action'])){
$_GET['action'] = "";
}
switch($_GET['action']) {
case "edit_record":
edit_record();
break;
case "delete_record":
delete_record();
break;
case "view_record":
view_record();
break;
default:
list_records();
break;
}
?>

Но при запуске появляется ошибка Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\admin1\userviewer.php on line 265

Строка 265 вот эта:

if($userid != $new_userid) $field_str = " userid = '$newuserid', ";

2

Re: PHP код для небольшой админки. Ошибка.

Обратите внимание на строку выше, там будет так:
$field_str = "; // одна двойная кавычка
а должно быть так:
$field_str = ''; // две одинарных кавычки

3

Re: PHP код для небольшой админки. Ошибка.

Точно smile Спасибо.

Сейчас Снова запустил. Новая проблема: У меня есть список юзеров. Возле каждого юзера есть кнопочка для редактирования профиля edit_record, ну и для просмотра view_record.
При нажатии на эту кнопочку Выскакивает такая штука: Fatal error: Call to undefined function view_record() in C:\Serv\xampp\htdocs\admin1\userviewer.php on line 464

464 строка - это строка в самом конце, в которой написано: view_record();

В чем тут может быть проблема?

4

Re: PHP код для небольшой админки. Ошибка.

Ketsyki сказал:

Call to undefined function view_record()

У вас функция view_record находится внутри edit_record, поэтому не работает. Поставьте отсутствующую фигурную скобку для функции edit_record. Используйте текстовый редактор с подсветкой синтаксиса, чтобы было проще.

5 (изменено: Ketsyki, 2011-03-17 23:04:51)

Re: PHP код для небольшой админки. Ошибка.

Все. Вижу. Спасибо большое. Ошибки все поправил, все работает. Я там еще в одном месте не правильно указал название переменных, забыл дописать еще несколько скобок. И забыл дописать строчку, чтоб из БД данные приходили не в виде ????? а в нормальном виде smile

6

Re: PHP код для небольшой админки. Ошибка.

Так, щас попробовал заюзать эти функции. Сразу 2 проблемы:
1. При юзании функции для удаления данных из БД, выдается ошибка Fatal error: Call to undefined function user_message() in C:\Serv\xampp\htdocs\admin1\userviewer.php on line 236, но при этом функция работает.

Функция для удаления записи:

function delete_record()
{
global $default_dbname, $user_tablename, $access_log_tablename;
$userid = $_GET['userid'];
if(empty($userid)){
error_message('Введите идентификатор пользователя!');
}
$link_id = db_connect($default_dbname);
mysql_query('SET NAMES cp1251');
if(!$link_id){
error_message(sql_error());
}
$query = "DELETE FROM $user_tablename WHERE userid = '$userid'";
$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$num_rows = mysql_affected_rows($link_id);
if($num_rows != 1){
error_message("Пользователя $userid не существует");
}
user_message("Все записи, относящиеся к пользователю удалены!");
}

Ошибка в этой строке: user_message("Все записи, относящиеся к пользователю удалены!");
Где ошибка то? Вроде все правильно.

7 (изменено: DmitryV, 2011-03-18 10:57:58)

Re: PHP код для небольшой админки. Ошибка.

Вам сообщает что неизвестная функция user_message() её нет значит в файле скрипта.

8 (изменено: Ketsyki, 2011-03-18 11:50:25)

Re: PHP код для небольшой админки. Ошибка.

Ну ладно, фиг с этой функцией. Она тут была просто для красоты.

Вот вторая проблемка:

В первом посте написан код. Код этот позволяет через админку редактировать данные пользователей. Вот табличка запустилась. Изменяю данные. Пытаюсь их сохранить и получаю такую ошибку:

http://s45.radikal.ru/i109/1103/96/a45a98a2581bt.jpg

Опять какая-то функция не поддерживается?

9

Re: PHP код для небольшой админки. Ошибка.

Запятые пропущены.
$field_str .= " Country = '$Country', ";

Я бы советовал переписать все так:

$field_str[] = "`Country` = '$Country'";
$field_str[] = "`Region` = '$Region'";
...
$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE userid = '$userid'";

10

Re: PHP код для небольшой админки. Ошибка.

Опять ошибка:

http://s003.radikal.ru/i202/1103/2a/815644fe1ee5t.jpg

11

Re: PHP код для небольшой админки. Ошибка.

Ketsyki сказал:

Опять ошибка:

В коде я такого не вижу. Смотрите что ее вызывает. Очевидно, что <? echo $userid ?> в SQL запросе - это ошибка.

12 (изменено: Ketsyki, 2011-03-18 15:22:06)

Re: PHP код для небольшой админки. Ошибка.

Вот строка 283 $query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE 'userid' = '$userid'"; с этой строкой выскакивает ошибка, которая на картинке в 10 посте.

Если оставить ту строку, которая у меня написана была $query = "UPDATE IGNORE $user_tablename SET $field_str WHERE userid = '$userid'"; , то выскакивает ошибка, которая в 8 посте.

Вот код всей функции:

function edit_record()
{
global $default_dbname, $user_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];
$userid = $_GET["userid"];
$Section = $_GET["Section"];
$Docname = $_GET["Docname"];
$Surname = $_GET["Surname"];
$Name = $_GET["Name"];
$Patronymic = $_GET["Patronymic"];
$Email = $_GET["Email"];
$Telephone = $_GET["Telephone"];
$Sex = $_GET["Sex"];
$Date = $_GET["Date"];
$Country = $_GET["Country"];
$Region = $_GET["Region"];
$City = $_GET["City"];
$School = $_GET["School"];
$Address = $_GET["Address"];
if(empty($userid)){
$userid = $_GET['new_userid'];
}
$link_id = db_connect($default_dbname);
mysql_query('SET NAMES cp1251');
if(!$link_id){
error_message(sql_error());
}
$field_str = '';
if($userid != $new_userid) $field_str = " userid = '$newuserid', ";
$field_str .= " 'Section' = '$Section', ";
$field_str .= " 'Docname' = '$Docname', ";
$field_str .= " 'Surname' = '$Surname', ";
$field_str .= " 'Name' = '$Name', ";
$field_str .= " 'Patronymic' = '$Patronymic', ";
$field_str .= " 'Email' = '$Email'";
$field_str .= " 'Telephone' = '$Telephone'";
$field_str .= " 'Sex' = '$Sex'";
$field_str .= " 'Date' = '$Date'";
$field_str .= " 'Country' = '$Country'";
$field_str .= " 'Region' = '$Region'";
$field_str .= " 'City' = '$City'";
$field_str .= " 'School' = '$School'";
$field_str .= " 'Address' = '$Address'";

$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE 'userid' = '$userid'";

$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");
}
}

13

Re: PHP код для небольшой админки. Ошибка.

Название поля должно быть заключено в косые кавычки, а не в одинарные. И замените все остальные строки по примеру.
$field_str .= " 'Country' = '$Country'"; // Это не правильно
$field_str[] = "`Country` = '$Country'"; // Правильно!

В запросе тоже замените у названия поля одинарные кавычки на косые.
$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE 'userid' = '$userid'";

14 (изменено: Ketsyki, 2011-03-18 17:59:42)

Re: PHP код для небольшой админки. Ошибка.

function edit_record()
{
global $default_dbname, $user_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];
$userid = $_GET["userid"];
$Section = $_GET["Section"];
$Docname = $_GET["Docname"];
$Surname = $_GET["Surname"];
$Name = $_GET["Name"];
$Patronymic = $_GET["Patronymic"];
$Email = $_GET["Email"];
$Telephone = $_GET["Telephone"];
$Sex = $_GET["Sex"];
$Date = $_GET["Date"];
$Country = $_GET["Country"];
$Region = $_GET["Region"];
$City = $_GET["City"];
$School = $_GET["School"];
$Address = $_GET["Address"];
if(empty($userid)){
$userid = $_GET['new_userid'];
}
$link_id = db_connect($default_dbname);
mysql_query('SET NAMES cp1251');
if(!$link_id){
error_message(sql_error());
}
$field_str = '';
if($userid != $new_userid) $field_str[] = " userid = '$newuserid', ";
$field_str[] = " `Section` = '$Section'";
$field_str[] = " `Docname` = '$Docname'";
$field_str[] = " `Surname` = '$Surname'";
$field_str[] = " `Name` = '$Name'";
$field_str[] = " `Patronymic` = '$Patronymic'";
$field_str[] = " `Email` = '$Email'";
$field_str[] = " `Telephone` = '$Telephone'";
$field_str[] = " `Sex` = '$Sex'";
$field_str[] = " `Date` = '$Date'";
$field_str[] = " `Country` = '$Country'";
$field_str[] = " `Region` = '$Region'";
$field_str[] = " `City` = '$City'";
$field_str[] = " `School` = '$School'";
$field_str[] = " `Address` = '$Address'";

$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE `userid` = '$userid'";

$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");
}
}

Вот, вроде бы все исправил. А все равно:
http://s016.radikal.ru/i336/1103/58/d73562929ba5t.jpg

15

Re: PHP код для небольшой админки. Ошибка.

$field_str = ''; // Эту строку надо убрать.
if($userid != $new_userid) $field_str[] = " userid = '$newuserid', "; // Здесь надо убрать запятую.

16

Re: PHP код для небольшой админки. Ошибка.

Я сейчас решали отказаться от возможности изменять id юзера, ибо все равно пользоваться этим не буду.

function edit_record()
{
global $default_dbname, $user_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];
$userid = $_GET["userid"];
$Section = $_GET["Section"];
$Docname = $_GET["Docname"];
$Surname = $_GET["Surname"];
$Name = $_GET["Name"];
$Patronymic = $_GET["Patronymic"];
$Email = $_GET["Email"];
$Telephone = $_GET["Telephone"];
$Sex = $_GET["Sex"];
$Date = $_GET["Date"];
$Country = $_GET["Country"];
$Region = $_GET["Region"];
$City = $_GET["City"];
$School = $_GET["School"];
$Address = $_GET["Address"];

$link_id = db_connect($default_dbname);
mysql_query('SET NAMES cp1251');
if(!$link_id){
error_message(sql_error());
}
$field_str[] = " `userid` = '$userid'";
$field_str[] = " `Section` = '$Section'";
$field_str[] = " `Docname` = '$Docname'";
$field_str[] = " `Surname` = '$Surname'";
$field_str[] = " `Name` = '$Name'";
$field_str[] = " `Patronymic` = '$Patronymic'";
$field_str[] = " `Email` = '$Email'";
$field_str[] = " `Telephone` = '$Telephone'";
$field_str[] = " `Sex` = '$Sex'";
$field_str[] = " `Date` = '$Date'";
$field_str[] = " `Country` = '$Country'";
$field_str[] = " `Region` = '$Region'";
$field_str[] = " `City` = '$City'";
$field_str[] = " `School` = '$School'";
$field_str[] = " `Address` = '$Address'";

$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE `userid` = '$userid'";
$result = mysql_query($query);

if(!$result){
error_message(sql_error());
}

$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");
}
}

Вот. Предыдущая ошибка не выскакивает. Но, теперь появляется новая ошибка, которая выводится, если не выполняется последняя часть кода
$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");

Выскакивает окно с надписью: Ни одна запись не изменена!

Т.е. данные не хотят изменяться.

17

Re: PHP код для небольшой админки. Ошибка.

Выведите строку запроса
exit($query);
И этот запрос попробуйте выполнить в phpMyAdmin.

18

Re: PHP код для небольшой админки. Ошибка.

Вставил эту строчку в код. На выходе получил вот что:
UPDATE IGNORE childrens SET `userid` = '', `Section` = 'Информатика', `Docname` = 'верыпыв', `Surname` = 'врвпы', `Name` = 'врывпы', `Patronymic` = '', `Email` = 'sfs@sdfs.ru', `Telephone` = '253723', `Sex` = 'Мужской', `Date` = '1950-01-03', `Country` = 'Австрия', `Region` = 'Австрия', `City` = 'Айзенштадт', `School` = 'кывпыврпы', `Address` = 'ыпрыпы 45' WHERE `userid` = ''

userid и Patronymic по неким причинам остаются пустыми.

19

Re: PHP код для небольшой админки. Ошибка.

Ketsyki сказал:

userid и Patronymic по неким причинам остаются пустыми.

Теперь выше по коду смотрите где формируются эти переменные и почему они пустые.
$_GET["userid"]

20

Re: PHP код для небольшой админки. Ошибка.

Хоть убейте, но ошибки не вижу.

function edit_record()
{
global $default_dbname, $user_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];

// Выбираем данные из бд.
$userid = $_GET["userid"]; //строка точно такая же, как и все остальные, но данные не приходят. 
$Section = $_GET["Section"];
$Docname = $_GET["Docname"];
$Surname = $_GET["Surname"];
$Name = $_GET["Name"];
$Patronymic = $_GET["Patronymic"]; // и тут не приходят
$Email = $_GET["Email"];
$Telephone = $_GET["Telephone"];
$Sex = $_GET["Sex"];
$Date = $_GET["Date"];
$Country = $_GET["Country"];
$Region = $_GET["Region"];
$City = $_GET["City"];
$School = $_GET["School"];
$Address = $_GET["Address"];

$link_id = db_connect($default_dbname);
mysql_query('SET NAMES cp1251');
if(!$link_id){
error_message(sql_error());
}
$field_str[] = " `userid` = '$userid'";
$field_str[] = " `Section` = '$Section'";
$field_str[] = " `Docname` = '$Docname'";
$field_str[] = " `Surname` = '$Surname'";
$field_str[] = " `Name` = '$Name'";
$field_str[] = " `Patronymic` = '$Patronymic'";
$field_str[] = " `Email` = '$Email'";
$field_str[] = " `Telephone` = '$Telephone'";
$field_str[] = " `Sex` = '$Sex'";
$field_str[] = " `Date` = '$Date'";
$field_str[] = " `Country` = '$Country'";
$field_str[] = " `Region` = '$Region'";
$field_str[] = " `City` = '$City'";
$field_str[] = " `School` = '$School'";
$field_str[] = " `Address` = '$Address'";

$query = "UPDATE IGNORE $user_tablename SET " . implode(', ', $field_str) . " WHERE `userid` = '$userid'";
$result = mysql_query($query);

if(!$result){
error_message(sql_error());
}

$num_rows = mysql_affected_rows($link_id);
if(!$num_rows){
error_message("Ни одна запись не изменена!");
}
}

Я вот тут $field_str[] = " `Patronymic` = '$Patronymic'"; пробовал вместо $Patronymic писать какой-нибудь текст, тогда все нормально работает. Т.е. просто данные не хотят приходить. Но остальные данные приходят нормально.

21

Re: PHP код для небольшой админки. Ошибка.

Смотрите откуда приходит $_GET["userid"], очевидно, что там он не формируется должным образом.

22

Re: PHP код для небольшой админки. Ошибка.

Ээээ? Всмысле?

Я в некоторых местах такой код пишу $userid = $query_data["userid"];, дак все данные идут нормально.

Я и правильность написания переменных проверил...

23

Re: PHP код для небольшой админки. Ошибка.

Откуда приходит переменная $_GET["userid"]? Как я понимаю, она передается при отправке из какой-то формы. Смотрите как она формируется в этой форме и почему не доходит до скрипта обработки.

24

Re: PHP код для небольшой админки. Ошибка.

С Patronymic разобрался. В форме поставил лишний пробел.

И есть мысля, где искать проблему с userid. Завтра буду проверять свою мыслю smile

25

Re: PHP код для небольшой админки. Ошибка.

Забыл написать, что все исправил. У меня переменная userid бралась не из того места. Я с ней начал работать как с глобальной и все заработало. smile