1

Тема: php не работает код из учебника :(

Есть у меня в учебнике код  один, но, что-то он работать не хочет...

<?php
$dbhost = 'localhost';
$dbusername = 'myusername';
$dbuserpassword = 'mypassword';
$default_dbname = 'sample_db';
$records_per_page = 5;
$user_tablename = 'user';
$access_log_tablename = 'access_log';
$MYSQL_ERRNO = ";
$MYSQL_ERROR = ";
$new_win_width = 600;
$new_win_height = 400;
function html_header() {
global $new_win_width, $new_win_height;
?>
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function open_window(url) {
var NEW_WIN = null;
NEW_WIN = window.open ("", "RecordViewer",
"toolbar=no,width="+
<?php echo $new_win_width ?>+
",height="+<?php echo $new_win_height?>+
",directories=no,status=no"+
",scrollbars=yes,resize=no,menubar=no");
NEW_WIN.location.href = url;
}
//-->
</SCRIPT>
<TITLE>Сценарий просмотра базы данных</TITLE>
</HEAD>
<BODY>
<?php
}
function html_footer() {
?>
</BODY>
</HTML>
<?php
}
function db_connect($dbname='') {
global $dbhost, $dbusername, $dbuserpassword, $default_dbname;
global $MYSQL_ERRNO, $MYSQL_ERROR;
$link_id = mysql_connect($dbhost, $dbusername, $dbuserpassword);
if(!$link_id) {
$MYSQL_ERRNO = 0;
$MYSQL_ERROR = "Не удалось подключиться к узлу $dbhost.";
return 0;
}
else if(empty($dbname) && !mysql_select_db($default_dbname)) {
$MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error();
return 0;
}
else return $link_id;
}
function sql_error() {
global $MYSQL_ERRNO, $MYSQL_ERROR;
if(empty($MYSQL_ERROR)) {
$MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error();
}
return "$MYSQL_ERRNO: $MYSQL_ERROR";
}
function error_message($msg) {
html_header();
echo "<SCRIPT>alert(\"Error: $msg\ ");history.go(-1)</SCRIPT>";
html_footer();
exit;
}
?>

При запуске (файл с этим кодом подключается к другой странице), выскакивает  такая ошибка: Parse error: syntax error, unexpected ')', expecting ',' or ';' in C:\Serv\xampp\htdocs\admin\common_db.inc on line 69

Это, имеется виду, что после скобки надо поставить точку с запятой? О_о

2

Re: php не работает код из учебника :(

В 69 строке лишний пробел. Должно быть так:

echo "<SCRIPT>alert(\"Error: $msg\");history.go(-1)</SCRIPT>";

3

Re: php не работает код из учебника :(

Точно smile Спс.

Только что-то опять не работает. В учебнике написано, что если выскакивает окно с таким текстом: 1046: No Database Selected, то это значит, что переменная $default_dbname пуста. Но у меня же она написана. О_О

Код этот используется для вывода данных из бд. Вот основная часть кода, на всякий случай:

<?php
include "./common_db.inc";
function list_records()
{
global $default_dbname, $user_tablename;
global $records_per_page;
$PHP_SELF = "userviewer.php";
$link_id = db_connect($default_dbname);
if(!$link_id) error_message(sql_error());
$query = "SELECT count(*) FROM $user_tablename";
$result = mysql_query($query);
if(!$result) error_message(sql_error());
$query_data = mysql_fetch_row($result);
$total_num_user = $query_data[0];
if(!$total_num_user) error_message('Нет зарегистрированных пользователей!');
if(empty($_GET['next_page'])) {
$_GET['next_page'] = 0;
}
$cur_page = $_GET['next_page'];
$page_num = $cur_page + 1;
$record = $cur_page * $records_per_page + 5;
$total_num_page = $last_page_num = ceil($total_num_user/$records_per_page);
html_header();
echo "<CENTER><H3>В базе найдено $total_num_user пользователей. Страница
$page_num из $last_page_num.</H3></CENTER>\n";
if (empty($_GET['order_by'])){
$_GET['order_by'] = 'userid';
} $order_by = $_GET['order_by'];
if (empty($_GET['sort_order'])) {
$_GET['sort_order'] = 'ASC';
$sort_order = 'ASC';
}
if ($_GET['sort_order'] == 'ASC') {
$sort_order = 'DESC';
$org_sort_order = 'ASC';
}
else {
$sort_order = 'ASC';
$org_sort_order = 'DESC';
}
$limit_str = "LIMIT ". $cur_page * $records_per_page . ", $record";
$query = "SELECT usernumber, userid, username FROM $user_tablename ORDER BY
$_GET[order_by] $_GET[sort_order]
$limit_str ";
$result = mysql_query($query); if(!$result){
error_message(sql_error());
}
?>

<DIV ALIGN="CENTER">
<TABLE BORDER="1" WIDTH="90%" CELLPADDING="2">
<TR>
<TH WIDTH="25%" NOWRAP>
<A HREF="<?php echo "$PHP_SELF?action=list_records&
sort_order=$sort_order&
order_by=usernumber"; ?>">
Номер пользователя
</A>
</TH>
<TH WIDTH="25%" NOWRAP>
<A HREF="<?php echo "$PHP_SELF?action=list_records&
sort_order=$sort_order&
order_by=userid"; ?>">
Идентификатор пользователя
</A>
</TH>
<TH WIDTH="25%" NOWRAP>
<A HREF="<?php echo "$PHP_SELF?action=list_records&
sort_order=$sort_order&
order_by=username"; ?>">
Имя пользователя
</A>
</TH>
<TH WIDTH="25%" NOWRAP>Действие</TH>
</TR>
<?php
while($query_data = mysql_fetch_array($result)) {
$usernumber = $query_data["usernumber"];
$userid = $query_data["userid"];
$username = $query_data["username"];
echo "<TR>\n";
echo "<TD WIDTH=\"25%\" ALIGN=\"CENTER\">$usernumber</TD>\n";
echo "<TD WIDTH=\"25%\" ALIGN=\"CENTER\">$userid</TD>\n";
echo "<TD WIDTH=\"25%\" ALIGN=\"CENTER\">$username</TD>\n";
echo "<TD WIDTH=\"25%\" ALIGN=\"CENTER\">
<A HREF=\"javascript:open_window('$PHP_SELF?action=view_record&
userid=$userid');\">Просмотреть запись</A></TD>\n";
echo "</TR>\n";
}
?>
</TABLE>
</DIV>
<?php
echo "<BR>\n";
echo "<STRONG><CENTER>";
if($page_num > 1) {
$prev_page = $cur_page - 1;
echo "<A HREF=\"$PHP_SELF?action=list_records&
ort_order=$org_sort_order&order_by=$order_by&next_page=0\">[В начало]
</A>";
echo "<A HREF=\"$PHP_SELF?action=list_records&sort_order=$org_sort_order
&order_by=$order_by&next_page=$prev_page\">[Предыдущая]</A> ";
if($page_num < $total_num_page) {
$next_page = $cur_page + 1;
$last_page = $total_num_page - 1;
echo "<A HREF=\"$PHP_SELF?action=list_records&sort_order=$org_sort_order
&order_by=$order_by&next_page=$next_page\">[Следующая]</A> ";
echo "<A HREF=\"$PHP_SELF?action=list_records&sort_order=$org_sort_order&
order_by=$order_by&next_page=$last_page\">[В конец]</A>";
}
}
html_footer();
}
function view_record() {
global $default_dbname, $user_tablename, $access_log_tablename;
$PHP_SELF = $_SERVER['PHP_SELF'];
$userid = $_GET['userid'];
if(empty($userid)){
error_message('Выберите пользователя!');
}
$link_id = db_connect($default_dbname);
if(!$link_id){
error_message(sql_error());
}
$query = "SELECT * FROM $user_tablename WHERE userid = '$userid'";
$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
$query_data = mysql_fetch_array($result);
$usernumber = $query_data["usernumber"];
$userid = $query_data["userid"];
$username = $query_data["username"];
$userposition = $query_data["userposition"];
$useremail = $query_data["useremail"];
$userprofile = $query_data["userprofile"];
html_header();
echo "<CENTER><H3>
Запись для пользователя №.$usernumber - $userid($username)
</H3></CENTER>";
?>
<DIV ALIGN="CENTER">
<TABLE BORDER="1" WIDTH="90%" CELLPADDING="2">
<TR>
<TH WIDTH="40%">position</TH>
<TD WIDTH="60%"><?php echo $userposition ?></TD>
</TR>
<TR>
<TH WIDTH="40%">Email</TH>
<TD WIDTH="60%"><?php echo "<A
HREF=\"mailto:$useremail\">$useremail</A>"
; ?></TD>
</TR>
<TR>
<TH WIDTH="40%">Профиль</TH>
<TD WIDTH="60%"><?php echo $userprofile ?></TD>
</TR>
</TABLE>
</DIV>
<?php
echo "<HR SIZE=\"2\" WIDTH=\"90%\">\n";
$query = "SELECT page, visitcount, accessdate FROM $access_log_tablename
WHERE userid = '$userid'";
$result = mysql_query($query);
if(!$result){
error_message(sql_error());
}
if(!mysql_num_rows($result)){
echo "<CENTER>Для пользователя $userid ($username) нет записей в журнале
посещений.</CENTER>";
} else {
echo "<CENTER>Записи журнала посещений для пользователя $userid
($username).</CENTER>";
?>
<DIV ALIGN="CENTER">
<TABLE BORDER="1" WIDTH="90%" CELLPADDING="2">
<TR>
<TH WIDTH="40%" NOWRAP>Web-страница</TH>
<TH WIDTH="20%" NOWRAP>Количество посещений</TH>
<TH WIDTH="40%" NOWRAP>Время последнего посещения</TH>
</TR>
<?php while($query_data = mysql_fetch_array($result)) {
$page = $query_data["page"];
$visitcount = $query_data["visitcount"];
$accessdate = substr($query_data["accessdate"], 0, 4) . '-' .
substr($query_data["accessdate"], 4, 2) . '-' .
substr($query_data["accessdate"], 6, 2) . ' ' .
substr($query_data["accessdate"], 8, 2) . ':' .
substr($query_data["accessdate"], 10, 2) . ':' .
substr($query_data["accessdate"], 12, 2);
echo "<TR>\n";
echo "<TD WIDTH=\"40%\">$page</TD>\n";
echo "<TD WIDTH=\"20%\" ALIGN=\"CENTER\">$visitcount</TD>\n";
echo "<TD WIDTH=\"40%\" ALIGN=\"CENTER\">$accessdate</TD>\n";
echo "</TR>\n";
}
?>
</TR>
</TABLE>
</DIV>
<?php
}
html_footer();
}
if (empty($_GET['action'])){
$_GET['action'] = 'list_records';
}
switch($_GET['action']) {
case "view_record":
view_record();
break;
default:
list_records();
break;
}

4

Re: php не работает код из учебника :(

Вызвали функцию соединения с БД
db_connect($default_dbname);
В переменной $default_dbname имя этой самой базы данных, но в функции db_connect() идет строка:

if(empty($dbname) && !mysql_select_db($default_dbname)) {

Здесь и есть ошибка.

5

Re: php не работает код из учебника :(

Что-то не понял... Я же вызываю db_connect($dbname=''), а не db_connect($default_dbname).

6

Re: php не работает код из учебника :(

Вы вызываете
db_connect($default_dbname);
В переменной $default_dbname лежит имя БД.
Выполняется функция db_connect($dbname='') и теперь значение переменной $default_dbname копируется в $dbname, как параметр функции. Теперь имя БД будет лежать в переменной $dbname.
Дальше вы проверяете
if(empty($dbname) - вернет false, в переменной имя БД
&& !mysql_select_db($default_dbname) - это вообще не логично
Сделайте проще.
if(!mysql_select_db($dbname)) { - Этого вполне достаточно.

7

Re: php не работает код из учебника :(

smile Спс! Заработало!
Щас напишу код, чтоб можно было редактировать данные, а потом буду разбираться с кодировкой smile