Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2011, 13:32   #1
AvernuS
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 23
По умолчанию Кто тупит скрипт или сервер?

Вот чего-то не могу понять, ошибка в скрипте или с сервером какая-нибудь фигня?
Помогите, пожалуйста, разобраться.
Данные передаются из формы в другом файле, с формой все нормально. А вот когда запускается этот скрипт, то браузер пытается все время обновлять страницу, не могу понять чем это может быть вызвано, данные, есстественно, в БД не добавляются.
PHP код:
<?php
/* 
Скрипт регистрации пользователей
*/
session_start();
define('INCLUDE_CHECK',true);
include 
"config/dbconf.php";
include 
"functions.php";

//Проверяем бы ла ли нажата кнопка в регистрационной форме
if(!isset($_POST['reg_usr']))
{
    echo 
"<meta http-equiv='refresh' content='0';url='index.php'>";
}
else
{

//Проверяем не пусты ли переменные отправленные из формы
if(!empty($_POST['login']) || !empty($_POST['pass']) || !empty($_POST['pass2']) || !empty($_POST['email']))
{
    
$pass1 $_POST['pass'];
    
$pass2 $_POST['pass2'];
    
$ulang $_POST['ulang'];
    if(
$pass1 == $pass2//Проверка на совпадение пароля с подтверждением
    
{
        
//Обрабатываем логин и е-мейд
        
$login $_POST['login'];
        
$email $_POST['email'];
        
$login trim($login);
        
$login stripslashes($login);
        
$login htmlspecialchars($login);
        
$email trim($email);
        
$email stripslashes($email);
        
$email htmlspecialchars($email);
        if(
strlen($login) < 4)
        {
            exit();
        }
        else
        {
            if(
preg_match('/[^a-z0-9\-\_\.]+/i',$login))
            {
                exit();
            }
            else
            {
                if(!
checkEmail($email))
                {
                    exit();
                }
                else
                {
                    
//Шифруем пароль
                    
$passd md5($pass1) . md5(pass1);
                    
$login mysql_real_escape_string($login);
                    
$email mysql_real_escape_string($email);
                    
//Проверяем, свободен ли логин
                    
$sql "SELECT * FROM `users` WHERE `login`={$login} LIMIT 1";
                    
$clg mysql_query($sql);
                    
$row mysql_num_rows($clg);
                    if(
$row != 0)
                    {
                        exit();
                    }
                    else
                    {
                        
//Если логин свободен - заносим данные о пользователе в базу данных и отправляем
                        
$group 1;
                        
$insq "INSERT INTO users(`login`, `pass`, `email`, `group`, `regdt`, `ulang`) VALUES({$login}{$passd}{$email}{$group}, NOW()), {$ulang})";
                        
mysql_query($insq);
                        echo 
"<meta http-equiv='refresh' content='0';url='index.php'>";
                    }    
                }
            }
        }
    }
    
}
}
?>
AvernuS вне форума Ответить с цитированием
Старый 05.07.2011, 13:38   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Вот там где проверяете нажата ли кнопка вставьте внутри условия, но ПЕРЕД echo вот этот код и проверьте:
PHP код:
die('Oops, i did it again.'); 
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 05.07.2011, 13:45   #3
AvernuS
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 23
По умолчанию

Помогло, именно так и вылезло, хотя у меня до этого подобная конструкция нормально работала. Подскажите, как исправить проблему?
И еще, если у меня стоит в начале скрипта
PHP код:
session_start(); 
то вылетает еще одна ошибка, пишет, что хедеры уже были отправлены, но это легко исправляется комментированием строки, но вот не уверен, правильно ли это.
И есть еще одна проблема, если убрать вообще проверку на нажатие кнопки в форме, то скрипт срабатывает, но в базу ничего не пишет.

Последний раз редактировалось AvernuS; 05.07.2011 в 13:55.
AvernuS вне форума Ответить с цитированием
Старый 05.07.2011, 13:58   #4
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Цитата:
Сообщение от AvernuS Посмотреть сообщение
И еще, если у меня стоит в начале скрипта
PHP код:
session_start(); 
то вылетает еще одна ошибка, пишет, что хедеры уже были отправлены, но это легко исправляется комментированием строки, но вот не уверен, правильно ли это.
Дело в том, что session_start(); должна стоять в самом начале. Т.е. перед скриптом не должно быть даже пробелов в файле, не говоря уже о каком-то html-коде
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 05.07.2011, 14:06   #5
AvernuS
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 23
По умолчанию

поставил session_start() сразу перед первым комментарием, тоесть после открытия пхп, во второй строке файла, не помогло, та же ошибка.
но меня сейчас больше беспокоит то, что ничего не записывается в базу.
AvernuS вне форума Ответить с цитированием
Старый 05.07.2011, 14:25   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

1) Файлы скриптов нужно сохранять в кодировке UTF8 without BOM, тогда не будет выскакивать ошибка что хедеры уже отправлены.

2) Ваша форма не отправляет reg_usr через POST, именно из-за этого страница обновляется без конца. Проследите внимательно логику своего скрипта.

3) В базу не пишется, потому что у вас там миллион условий и нужно знать точно, что каждое из них исполняется. проверяйте внимательно логику своего скрипта. Важно понимать как работает каждое условие и когда оно исполняется. чтобы проверить передаются ли данные ставьте die($_POST['var']); перед условием. Потом удаляйте и обновляйте страницу.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 05.07.2011, 16:41   #7
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Цитата:
поставил session_start() сразу перед первым комментарием, тоесть после открытия пхп, во второй строке файла, не помогло, та же ошибка.
Здесь дело не в том, что session_start() перед комментарием, а в том, что перед <?php ничего не должно быть
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 05.07.2011, 20:48   #8
AvernuS
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 23
По умолчанию

Перерд <?php ничего и небыло, поменял кодировку на ср1251 и ошибка пропала, как правильно выставить кодтровки в дримвейвере, чтобы с ютф-8 такого небыло не нашел.
И еще вопрос, как, все-таки, сделать, чтобы файл исполнялся только при условии, что в форме была нажата кнопка, а при обращении к нему по адресу (просто подставить ссылку) срабатывал редирект на другую страницу.
Тоесть:
есть register.php и registration.php
как сделать чтобы первый файл исполнялся, только если во втором в форме нажата кнопка была, а при обращении к файлу типа http://servername/register.php переадресовывало на индекс.пхп, например

Последний раз редактировалось AvernuS; 05.07.2011 в 20:53.
AvernuS вне форума Ответить с цитированием
Старый 05.07.2011, 23:50   #9
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Цитата:
Сообщение от AvernuS Посмотреть сообщение
как правильно выставить кодтровки в дримвейвере, чтобы с ютф-8 такого небыло не нашел.
Вы просто даже не искали. Могу поспорить сайт adobe.com в поисках решения данной проблемы даже не открывался.
http://help.adobe.com/en_US/dreamwea...-3AA1F6F709A4a


Нажатая кнопка, если она находится внутри формы и у неё есть атрибут value, передаёт значение этого атрибута вместе с формой. Достаточно проверить передано это значение или нет. За всё время дискуссии вы даже не показали код вашей формы. Может вы там даже кнопку-то и не ставите, а ждёте, когда её кто-то нажмёт.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 06.07.2011, 02:02   #10
AvernuS
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Вы просто даже не искали. Могу поспорить сайт adobe.com в поисках решения данной проблемы даже не открывался.
http://help.adobe.com/en_US/dreamwea...-3AA1F6F709A4a


Нажатая кнопка, если она находится внутри формы и у неё есть атрибут value, передаёт значение этого атрибута вместе с формой. Достаточно проверить передано это значение или нет. За всё время дискуссии вы даже не показали код вашей формы. Может вы там даже кнопку-то и не ставите, а ждёте, когда её кто-то нажмёт.
собственно форма
PHP код:
<form name="reg_user" action="register.php" method="post">
<
input type="text" name="login" maxlength="16" />
<
input type="password" name="pass" maxlength="16" />
<
input type="password" name="pass2" maxlength="16" />
<
input type="text"  name="email" maxlength="32" />
<
select name="ulang">
<
option value="ru">Русский</option>
<
option value="ua">Украинский</option>
<
option value="en">English</option>
</
select>
<
input type="submit" name="reg_usr" value="Register" />
</
form
а вот есть еще проблема с другой формой
PHP код:
<form name="login_user" action="login.php" method="post">
    <
input type="text" name="login" maxlength="16" />
    <
input type="password" name="pass" maxlength="16" />
    <
input type="submit" name="login_usr" value="Login" />
    </
form
а вот скрипт который принимает значения
PHP код:
<?php
session_start
();
define('INCLUDE_CHECK',true);
include 
"config/dbconf.php";

if(empty(
$_POST['login']))
{
    exit(
'<p>exit1</p>');
}

if(empty(
$_POST['pass']))
{
    exit(
'<p>exit2</p>');
}

$login stripslashes($login);
$login htmlspecialchars($login);
$login trim($login);

$pass stripslashes($pass);
$pass htmlspecialchars($pass);
$pass trim($pass);

$passd md5($pass) . md5($pass);
$login mysql_real_escape_string($login);

$query "SELECT `id`, `group`, `ulang` FROM `users` WHERE `login`='$login' AND `pass`='$passd' LIMIT 1";
$sql mysql_query($query);
$rows mysql_num_rows($sql);
if(
$rows == 0)
{
    exit(
'<p>exit3</p>');
}
$row mysql_fetch_array($sql);
$uid $row['id'];
$group $row['group'];
$ulang $row['ulang'];

$_SESSION['uid'] = $uid;
$_SESSION['gr'] = $group;
$_SESSION['ul'] = $ulang;
$_SESSION['lg'] = $login;

echo 
'<meta http-equiv="refresh" content="0";url="index.php">';
?>
и этот скрипт вылетает с сообщением exit1, тоесть переменная приходит пустая, в чем тут проблема понять не могу
AvernuS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL-сервер или как-то так... Tanilita Microsoft Office Access 4 26.01.2010 19:24
Есть ли способ узнать, кто вызвал скрипт? motorway PHP 5 08.07.2009 09:16
Подскажите скрипт или фишку LEXA2103 PHP 5 16.01.2009 17:54
Кто поможет изменить скрипт? Андрей Семененко PHP 9 22.10.2008 23:57