В базе данных есть Таблица №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...
Теперь всё заработало!
... но не совсем ...
Сообщает, что "Пользователь с таким логином уже существует, выберите другой"
Наверное, что-то с 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... |
Точнее говоря, что-то неверно в логике

Спустя 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 в начале кода
Наверное, моя проблема связана с тем, что в файле 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',пытаюсь вставить в таблицу date_z ?
'$passw', '$passw2', '$data_z', '$mini_img', '$loc_num', '$keystring', '$timestamp')",$db);
Спустя 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() возвращает текст ошибки, если таковая случилась.
Вообще, прежде чем запускать запрос, имеет смысл сначала записать его в символьную переменную, вывести на экран - а потом уж запускать. Тогда можно будет проанализировать, что же там происходит. Может быть, ошибка в запросе. Может быть, что-то неверно ранее в скрипте и поэтому часть переменных не передается сюда.
А 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) |
Нет закрывающейся |
Про это давно уже ответили, сразу почти после создания темы

Спустя 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) |
и, наверное, пропустил "символьные переменные"... |
Тогда я рекомендую прочитать про них, хотя бы даже в хэлпе. Потому что, честно говоря, не испытываю желания объяснять такие азы

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