[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с обработчиком?
Wladim
Здравствуйте.
В базе данных есть Таблица №1.
Делается запрос к этой таблице при помощи файла с формой - zapros.php (по логину и паролю), чтобы извлечь часть данных и вставить в другую Таблицу №2.
Обработчик этой формы - add_zapros.php
После заполнения формы и отправки выдает сообщение:
Parse error: syntax error, unexpected $end in X:\home\service\www\avtor\add_zapros.php on line 130

В моем случае line 130 - это конец файла: </body></html>
Никак не возьму в толк - что-то нарушено в файле zapros.php или же весь код файла add_zapros.php неверный?



Спустя 7 минут, 7 секунд (29.02.2012 - 17:11) SoMeOnE написал(а):
Ты сам запрос покажи.

Спустя 21 минута, 15 секунд (29.02.2012 - 17:32) Wladim написал(а):
Файл zapros.php
<?php
session_start();
// Подсоединяем файл соединения с БД
include ("blocks/bd.php");
if (isset ($_GET['id'])) {$id = $_GET['id'];}
// Обращаемся к БД с запросами
$result_1 = mysql_query("SELECT title,meta_d,meta_k,text FROM settings WHERE page='index'",$db);
$myrow_1 = mysql_fetch_array($result_1);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
name="description" content="<?php echo $myrow_1['meta_d']; ?>">
<meta
name="keywords" content="<?php echo $myrow_1['meta_k']; ?>">
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php
echo $myrow_1['title']; ?></title>
<link
href="style.css" rel="stylesheet" type="text/css">
<style
type="text/css">
<!--
.
стиль1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->

</style>
</head>

<body>
<table
width="100%" border="0" align="center" bordercolor="#0033FF" bgcolor="#FFFFFF" class="title2">

<!--Подключаем шапку сайта-->
<?php
include ("blocks/header.php");
?>
<tr>
<td><table
width="100%" border="0">
<tr>


<!--Подключаем левый блок сайта-->
<?php
include ("blocks/lefttd.php");
?>

<td
width="709" valign="top">
<?php

// Надо вытащить с БД все поля
$result = mysql_query("SELECT * FROM date WHERE id='$id'",$db);
// и поместить это в переменную $myrow
$myrow = mysql_fetch_array($result);
?>
<html>
<head><meta
http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link
href="styling.css" rel="stylesheet" type="text/css" media='screen,projection' />
</head>
<body>
<h3
align="center">Запрос на аутентификацию Автора</h3>
<p
id="emailSuccess"><strong style="color:green;">
<!-- <?php echo "$statusSuccess" ?></strong></p>
<p id="emailError"><strong style="color:red;">
<?php //echo "$statusError" ?>
</strong></p>
<div //id="contactFormArea">-->

<div align="center">
<form
action="add_zapros.php" method="post" id="cForm">
<!----><input type="hidden" name="act" value="y" />
<label
for="posName"><div align="center"><b>Ваш логин:</b></label>
   <input class="text" type="text" size="20" name="loga" />
<br><br>
<label
for="posEmail"><b>Ваш пароль:</b></label>
   <input class="text" type="text" size="20" name="passw" />

      
<label for="posEmail"><b>Ваш пароль (повтор):</b></label>
   <input class="text" type="text" size="20" name="passw2" />
<br><br>
<label
for="posRegard"><b>Ваш Location Number (LN):</b></label>
   <input class="text" type="text" size="40" name="loc_num" />
<br><br>
<input
name="mini_img" type="hidden" value="img/gerb.jpg" size="14">
<br>
<input
name="data_z" type="hidden" value="<?php $data_z = date("Y-m-d"); echo $data_z; ?>" size="11">
<br>
<img
src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>" border=0>
<br><br><label
for="posCaptcha">   <b>Введите код подтверждения </b>:</label>
   <input class="text" type="text" size="10" name="keystring" id="keystring" />
<label>
   <input class="submit" type="submit" name="selfCC" id="selfCC" value=" Отправить " /></label>
</form>
<?php

if(count($_POST)>0){
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] === $_POST['keystring']){
//...Если капча верна...
echo "Правильный";
}else{
//...Если нет...
echo "Неправильно";
}
}

unset($_SESSION['captcha_keystring']);
?>
</div></body>
</html>
</td>
</tr>
</table></td>
</tr>

<!--Подключаем нижний блок сайта-->
<?php
include ("blocks/footer.php");
?>
</table>
</body>
</html>

Спустя 2 минуты, 26 секунд (29.02.2012 - 17:34) Wladim написал(а):
А это обработчик - файл add_zapros.php
<?php
session_start();
$imgstr = "kcaptcha/?".session_name()."=".session_id();
?>
<?php

// Подсоединяем файл соединения с БД
include ("blocks/bd.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>
Обработчик аутентификации</title>
<link
href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table
width="98%" border="0" align="center" class="main_border">
<!--Подключаем шапку сайта-->
<tr><td align="center">
<?php
include ("blocks/header.php"); ?>
</td></tr>
<tr><td>
<table
width="100%" border="0">
<tr>

<!--Подключаем левый блок сайта-->
<?php include ("blocks/lefttd.php"); ?>
<td
width="709" valign="top" bgcolor="#ffffff">
<p>
<h3
align="center">Результат запроса на аутентификацию Автора</h3>
</p>
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$loga = trim($_POST['loga']);
$passw = trim($_POST['passw']);
$passw2 = trim($_POST['passw2']);
$data_z = trim($_POST['data_z']);
$loc_num = trim($_POST['loc_num']);
$keystring = trim($_POST['keystring']);
$timestamp = trim($_POST['timestamp']);

if ($loga == '') {
die("Поле 'Логин' не заполнено<br />\n");
// Логин может состоять из букв, цифр и подчеркивания
}elseif (!preg_match("/^\w{3,}$/", $loga)) {
die("В поле 'Логин' введены недопустимые символы<br />\n");
}
if ($passw == '' || $passw2 == '') {
die("Поле 'Пароль' не заполнено<br />\n");
}elseif($passw !== $passw2) {
die("Поля 'Пароль' и 'Повтор пароля' не совпадают<br />\n");
// Пароль может состоять из букв, цифр и подчеркивания
}elseif(!preg_match("/^\w{3,}$/", $passw)) {
die("В поле 'Пароль' введены недопустимые символы<br />\n");
}
if ($loc_num == '') {
die("Поле 'LN' не заполнено<br />\n");
}elseif (!preg_match("/^\w{3,}$/", $loc_num)) {
die("В поле 'LN' введены недопустимые символы<br />\n");
// В базе данных у нас будет храниться md5-хеш пароля
$mdpassw = md5($passw);
// А также временная метка (зачем - позже)
$timestamp = time();
if ($keystring == '') {
die("Поле 'Код подтверждения' не заполнено<br />\n");
}elseif (!preg_match("/^\w{3,}$/", $keystring)) {
die("В поле 'Код подтверждения' введены недопустимые символы<br />\n");

// Устанавливаем соединение с бд(не забудьте подставить ваши значения сервер-логин-пароль)
$db = mysql_connect("localhost","wladifom","123456789");
if (!$db) {
die("Не могу соединиться с базой данных");
}else {
// Выбираем базу данных
mysql_select_db('service', $db);

// Записываем в базу (не используем addslashes - экранировать нечего) ВСТАВКА ВНУТРЬ date (поля) ЗНАЧЕНИЯ ()
mysql_query("INSERT INTO date_z (loga,passw,passw2,data_z,mini_img,loc_num,keystring,timestamp) VALUES ('$loga', '$passw', '$passw2', '$data_z', '$mini_img', '$loc_num', '$keystring', '$timestamp')",$db);
if (mysql_error($db) != "") {
die("Пользователь с таким логином уже существует, выберите другой<br />\n");
}

}

mysql_close($db);
}
?>
</td>
</tr>

<!--Подключаем нижний блок сайта-->
<table bgcolor="#CBB392" width="100%" border="0" cellpadding="0" cellspacing="0">
<td
align="center">
<?php

include ("blocks/footer.php");
?>
</td></table>
</table>
</td></tr>
</body></html>

Спустя 21 минута, 23 секунды (29.02.2012 - 17:56) ZSH написал(а):
// А также временная метка (зачем - позже)
$timestamp = time();
if ($keystring == '') {
die("Поле 'Код подтверждения' не заполнено<br />\n");
}elseif (!preg_match("/^\w{3,}$/", $keystring)) {
die("В поле 'Код подтверждения' введены недопустимые символы<br />\n");

}
незакрыта скобка

if ($loc_num == '') {
die("Поле 'LN' не заполнено<br />\n");
}elseif (!preg_match("/^\w{3,}$/", $loc_num)) {
die("В поле 'LN' введены недопустимые символы<br />\n");

}
и тут тоже

Спустя 26 минут, 9 секунд (29.02.2012 - 18:22) Wladim написал(а):
Спасибо Вам, ZSH , огромное - сам бы я никогда не нашел эти ошибки!
Теперь всё заработало!
... но не совсем ...
Сообщает, что "Пользователь с таким логином уже существует, выберите другой"
Наверное, что-то с mysql_query...

Спустя 5 минут, 58 секунд (29.02.2012 - 18:28) sergeiss написал(а):
Цитата (Wladim @ 29.02.2012 - 18:34)
if (mysql_error($db) != "")

Вот это - совершенно, принципиально неверный подход!!!

Надо проверять, что возвращает mysql_query и уже принимать решение. И опять же - почему ошибка при вставке говорит (по твоему мнению) о том, что юзер существует? Это может быть, скорее, просто ошибка в запросе.

Цитата (Wladim @ 29.02.2012 - 19:22)
Наверное, что-то с mysql_query...

Точнее говоря, что-то неверно в логике smile.gif См. подробнее в предыдущем абзаце моего ответа.

Спустя 15 минут, 38 секунд (29.02.2012 - 18:44) ZSH написал(а):
// Выбираем базу данных
mysql_select_db('service', $db);
//поиск в базе логина
$res_login = mysql_query('SELECT * FROM `date_z` WHERE `loga` = "' . mysql_real_escape_string($loga) . '"');
//проверяем если найден то вывод сообщения
if(mysql_num_rows($res_login)){
die("Пользователь с таким логином уже существует, выберите другой<br />\n");
} else{
// Записываем в базу (не используем addslashes - экранировать нечего) ВСТАВКА ВНУТРЬ date (поля) ЗНАЧЕНИЯ ()
mysql_query("INSERT INTO
date_z (loga,passw,passw2,data_z,mini_img,loc_num,keystring,timestamp)
VALUES ('
$loga', '$passw', '$passw2', '$data_z', '$mini_img', '$loc_num', '$keystring', '$timestamp')", $db);
}

где-то так

Спустя 12 минут, 52 секунды (29.02.2012 - 18:56) Wladim написал(а):
Извините, sergeiss, я в РНР еще не очень знаток, но аналогичная конструкция была применена при регистрации (там около 15 полей) и все работает.
Наверное, моя проблема связана с тем, что в файле zapros.php в начале кода
$result = mysql_query("SELECT * FROM date WHERE id='$id'",$db);
выбираются все поля из таблицы "date", а потом в add_zapros.php
 mysql_query("INSERT INTO date_z (loga,passw,passw2,data_z,mini_img,loc_num,keystring,timestamp) VALUES ('$loga', 
'$passw', '$passw2', '$data_z', '$mini_img', '$loc_num', '$keystring', '$timestamp')",$db);
пытаюсь вставить в таблицу date_z ?

Спустя 1 минута, 28 секунд (29.02.2012 - 18:58) Wladim написал(а):
ZSH, Ваш вариант попробовал, в ответ пустая страница... и в таблицу date_z ничего не записалось.

Спустя 1 час, 6 минут, 46 секунд (29.02.2012 - 20:05) sergeiss написал(а):
Wladim - нет, проблема в другом. Функция mysql_query() возвращает false в случае ошибки выполнения запроса, и именно это и надо смотреть.
А mysql_error() возвращает текст ошибки, если таковая случилась.

Вообще, прежде чем запускать запрос, имеет смысл сначала записать его в символьную переменную, вывести на экран - а потом уж запускать. Тогда можно будет проанализировать, что же там происходит. Может быть, ошибка в запросе. Может быть, что-то неверно ранее в скрипте и поэтому часть переменных не передается сюда.

Спустя 6 минут, 7 секунд (29.02.2012 - 20:11) inpost написал(а):
$end - проблема синтаксиса, где-то скобка не закрыта, или лишняя открыта,

Спустя 43 секунды (29.02.2012 - 20:11) inpost написал(а):
Допустим тут:
   }elseif (!preg_match("/^\w{3,}$/", $loc_num)) {
die("В поле 'LN' введены недопустимые символы<br />\n");

Нет закрывающейся

Спустя 9 минут, 19 секунд (29.02.2012 - 20:21) sergeiss написал(а):
Цитата (inpost @ 29.02.2012 - 21:11)
Нет закрывающейся

Про это давно уже ответили, сразу почти после создания темы smile.gif Тут уже о другом вопросы пошли, но по той же тематике - про работу с БД.

Спустя 5 минут, 37 секунд (29.02.2012 - 20:26) inpost написал(а):
sergeiss
Свернутый текст
Свернутый текст
[more]Ух я невнимательный
[/more]

Спустя 5 минут, 3 секунды (29.02.2012 - 20:31) Wladim написал(а):
Спасибо, sergeiss, за подсказку направления поиска - буду смотреть.
А вот "символьные переменные" - это для меня пока не подъмно...

Спустя 20 минут, 39 секунд (29.02.2012 - 20:52) sergeiss написал(а):
Цитата (Wladim @ 29.02.2012 - 21:31)
А вот "символьные переменные" - это для меня пока не подъёмно...

Это как так?

А вот это кто работает с символьными переменными?
 $loga = trim($_POST['loga']);

И дальше с ней же и с другими?

Другое дело, что у тебя нету защиты от SQL-инъекции... Но с переменными-то ты работаешь :)

Спустя 35 минут, 37 секунд (29.02.2012 - 21:28) Wladim написал(а):
sergeiss, при создании своего сайта я пользовался видеоуроками Евгения Попова и, наверное, пропустил "символьные переменные"... а может о них и не говорилось... В общем - просветили, спасибо.
Но тогда не понял, почему Вы написали "прежде чем запускать запрос, имеет смысл сначала записать его в символьную переменную, вывести на экран - а потом уж запускать"?
Если в скрипте есть эти "символьные переменные". значит ... запутался уже, извините.

Спустя 7 минут, 21 секунда (29.02.2012 - 21:35) sergeiss написал(а):
Цитата (Wladim @ 29.02.2012 - 22:28)
и, наверное, пропустил "символьные переменные"...

Тогда я рекомендую прочитать про них, хотя бы даже в хэлпе. Потому что, честно говоря, не испытываю желания объяснять такие азы smile.gif

Спустя 39 минут, 23 секунды (29.02.2012 - 22:14) Гиламов Данис написал(а):
Советую почитать вам статьи про фильтрацию переменных в php.
Как рабочий вариант не подойдет.
Извините если не по теме.

Спустя 10 минут, 23 секунды (29.02.2012 - 22:25) Wladim написал(а):
Спасибо, sergeiss, спасибо, Данис, это мне задания уже на завтра.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.