PHP и мелкие вопросы 15.05.2012 / 22:32 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| TAPAHbl4, ой  |
16.05.2012 / 06:55 | | Koenig  Модератор форума
Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| ktktj, зачем тебе это? написать не проблема
__________________
 Магистр Мёда |
16.05.2012 / 10:23 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| <?php
$captcha_error='';
$reg=$auto_user=$error=$db_error=false;
session_start();
$db_server= mysql_connect("openserver","root","");
if (!$db_server) $db_error='Помилка підкулючення до бази данних. Код:' . mysql_error() . '<br />';
if (!mysql_select_db("ukrnet")) $db_error.='Помилка вибору бази данних. Код:' . mysql_error() . '<br />';
if (User($auto_user))
{
header("Location: /");
mysql_close("ukrnet");
exit;
}
elseif (!empty($_POST['submit']))
{
$login=$_POST['login'];
$password=$_POST['password'];
$email=$_POST['email'];
$error.=Valid($login,"логін") . Valid($password,"парол") . ValidEmail($email) . ValidCaptcha($_POST['captcha']) . $db_error;
if ($error) $reg=false;
else $reg=true;
}
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$im=@imagecreate(100,50) or $captcha_error='Каптча не відображається.<br />';
$char=$_SESSION['captcha'];
$bg=imagecolorallocate($im,9,131,9);
for ($i=0; $i<=100; $i++)
{
$color=imagecolorallocate($im,rand(140,160),rand(160,180),rand(140,180));
imagesetpixel($im,rand(2,89),rand(2,30),$color);
}
for ($i=0;$i<strlen($char);$i++)
{
$color=imagecolorallocate($im,131,152,131);
$x=5+$i*20;
$y = rand(1, 6);
imagechar ($im, 5, $x, $y, $char[$i], $color);
}
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Реєстрація</title>
<link rel="stylesheet" href="../style/style.css" type="text/css" />
</head>
<body>
<table>
<tr><td><img src="../logo.jpg" alt="logo"></td><td></td></tr>
<tr><td colspan=2><font class="menu">Реєстрація</font><a href="nojs.php" class="menu" id="button">Назад</a></td></tr>
<tr><td>';
if ($error) echo '<br /><div class="error">' . $error . '</div><br />';
if ($reg == true)
{
echo 'Дякуємо за успішну реєстрацію.<br />
Логін: ' . $login . '<br />
Пароль: ' . $password . '<br />
E-mail: ' . $email . '<br />';
$password=md5($password);
$q=mysql_query("INSERT INTO `user` SET `login`='$login', `password`='$password', `email`='$email'");
mysql_close($db_server);
echo '<a href="enter.php">Авторизуйтесь</a>';
}
else
{
echo '<form method="post" action="reg.php" />
Логін: <input type="text" name="login" /><br /><br />
Пароль: <input type="text" name="password" /><br /><br />
E-mail: <input type="text" name="email" /><br /><br />
Ведіть код з картинки: ';
$_SESSION['captcha']=substr(md5(uniqid("")),0,4);
imagepng ($im);
echo '<input type="text" name="captcha" /><br /><br />
<input type="hidden" name="submit" value="yes" />
<input type="submit" value="Реєстрація" />
</form>
<script>
document.getElementById(\'button\').onclick = function()
{
history.back();
return false;
}
</script>';
}
echo '</table></body></html>';
function Valid($error,$param)
{
if (!$error)
{
if ($param == "логін") return $error.='Запоніть обов\'язково поле ' . $param . '.<br />';
elseif ($param == "парол") return $error.='Запоніть обов\'язково поле ' . $param . 'ь.<br />';
}
else
{
$l=0;
if ($param == "логін" && !mysql_query("SELECT * FROM `user` WHERE `login` = '$error'"))
{
return $error.=' - данний логін уже використовується.<br />';
$l=1;
}
elseif ($l == 0)
{
if (preg_match("/[\W]/", $error)) return $error.='В ' . $param. 'i допускаються тільки символи a-z, A-Z, 0-9, _<br />';
else return "";
if (5 > strlen($error) && strlen($error)< 28) return $error.='В ' . $param . 'i повинно бути не менше 5 та не більше 28 символів<br />';
else return "";
}
else return "";
}
}
function ValidEmail($error)
{
if (!$error) return $error='Запоніть обов\'язково поле e-mail.<br />';
else
{
if (!mysql_query("SELECT * FROM `user` WHERE `email` = '$error'")) return $error.=' - данний e-mail уже використовується.<br />';
else
{
if (5 > strlen($error) && strlen($error)< 28) return $error.='В e-mail\'i повинно бути не менше 5 та не більше 28 символів<br />';
else return "";
if (preg_match("/^[-_a-zA-Z0-9]+@[-a-zA-Z0-9]+.[-a-zA-Z0-9]+$/", $error)) return $error.='E-mail має невірний формат.';
else return "";
}
}
}
function ValidCaptcha ($captcha_error)
{
if (empty($_POST['captcha']) && empty($_SESSION['code'])) return 'Введіть код з картинки';
elseif ($_POST['captcha'] != $_SESSION['captcha']) return 'Не вірно введений код з картинки';
else return false;
}
function User ($auto_user)
{
if (!empty($_COOKIE['login']) && !empty($_COOKIE['login']))
{
$login=$_COOKIE['login'];
$password=$_COOKIE['password'];
if (mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"))
{
return true;
mysql_close($db_server);
}
else return false;
}
else return false;
}
?>
Где мне отправить заголовок header("Content-type: image/png"); ну или как отобразить картинку капчи? Без заголовка отображает кракозябры вместо капчи, а куда его всунуть, чтобы весь файл как картинка отображался не знаю |
16.05.2012 / 12:36 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| Не стал мучаться, просто показ каптчи в оттдельный файл запихнул.
|
16.05.2012 / 13:00 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| Было все ок. Вижу, два раза в бд одного и того же пользователя занесло, решил проверить еще раз. Ввел данные в форму, и тут бац. Уже выводит "Не верно введен код с картинки" и ошибку в 109 строке Undefined variable: _SESSIONНе могу понять, что не так? После удачной реги в файлах ниче не изменял, тогда ошибку не писало, а сейчас на тебе. reg.php <?php
$reg=$auto_user=$error=$db_error=false;
$db_server= mysql_connect("openserver","root","");
if (!$db_server) $db_error='Помилка підкулючення до бази данних. Код:' . mysql_error() . '<br />';
if (!mysql_select_db("ukrnet")) $db_error.='Помилка вибору бази данних. Код:' . mysql_error() . '<br />';
if (User($auto_user))
{
header("Location: /");
mysql_close("ukrnet");
exit;
}
elseif (!empty($_POST['submit']))
{
$login=$_POST['login'];
$password=$_POST['password'];
$email=$_POST['email'];
$error.=Valid($login,"логін") . Valid($password,"парол") . ValidEmail($email) . ValidCaptcha($_POST['captcha']) . $db_error;
if ($error) $reg=false;
else $reg=true;
}
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Реєстрація</title>
<link rel="stylesheet" href="../style/style.css" type="text/css" />
</head>
<body>
<table>
<tr><td><img src="../logo.jpg" alt="logo"></td><td></td></tr>
<tr><td colspan=2><font class="menu">Реєстрація</font><a href="nojs.php" class="menu" id="button">Назад</a></td></tr>
<tr><td>';
if ($error) echo '<br /><div class="error">' . $error . '</div><br />';
if ($reg == true)
{
echo 'Дякуємо за успішну реєстрацію.<br />
Логін: ' . $login . '<br />
Пароль: ' . $password . '<br />
E-mail: ' . $email . '<br />';
$password=md5($password);
$q=mysql_query("INSERT INTO `user` SET `login`='$login', `password`='$password', `email`='$email'");
mysql_close($db_server);
echo '<a href="enter.php">Авторизуйтесь</a>';
}
else
{
echo '<form method="post" action="reg.php" />
Логін: <input type="text" name="login" /><br /><br />
Пароль: <input type="text" name="password" /><br /><br />
E-mail: <input type="text" name="email" /><br /><br />
Ведіть код з картинки: <img src="../captcha.php" alt="Каптча не отображается" /><br /><br />
<input type="text" name="captcha" /><br /><br />
<input type="hidden" name="submit" value="yes" />
<input type="submit" value="Реєстрація" />
</form>
<script>
document.getElementById(\'button\').onclick = function()
{
history.back();
return false;
}
</script>';
}
echo '</table></body></html>';
function Valid($error,$param)
{
if (!$error)
{
if ($param == "логін") return $error.='Запоніть обов\'язково поле ' . $param . '.<br />';
elseif ($param == "парол") return $error.='Запоніть обов\'язково поле ' . $param . 'ь.<br />';
}
else
{
$l=0;
if ($param == "логін" && !mysql_query("SELECT * FROM `user` WHERE `login` = '$error'"))
{
return $error.=' - данний логін уже використовується.<br />';
$l=1;
}
elseif ($l == 0)
{
if (preg_match("/[\W]/", $error)) return $error.='В ' . $param. 'i допускаються тільки символи a-z, A-Z, 0-9, _<br />';
else return "";
if (5 > strlen($error) && strlen($error)< 28) return $error.='В ' . $param . 'i повинно бути не менше 5 та не більше 28 символів<br />';
else return "";
}
else return "";
}
}
function ValidEmail($error)
{
if (!$error) return $error='Запоніть обов\'язково поле e-mail.<br />';
else
{
if (!mysql_query("SELECT * FROM `user` WHERE `email` = '$error'")) return $error.=' - данний e-mail уже використовується.<br />';
else
{
if (5 > strlen($error) && strlen($error)< 28) return $error.='В e-mail\'i повинно бути не менше 5 та не більше 28 символів<br />';
else return "";
if (preg_match("/^[-_a-zA-Z0-9]+@[-a-zA-Z0-9]+.[-a-zA-Z0-9]+$/", $error)) return $error.='E-mail має невірний формат.';
else return "";
}
}
}
function ValidCaptcha ($captcha_error)
{
if (empty($_POST['captcha']) && empty($_SESSION['captcha'])) return 'Введіть код з картинки';
elseif ($_POST['captcha'] != $_SESSION['captcha']) return 'Не вірно введений код з картинки';
else return false;
}
function User ($auto_user)
{
if (!empty($_COOKIE['login']) && !empty($_COOKIE['login']))
{
$login=$_COOKIE['login'];
$password=$_COOKIE['password'];
if (mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"))
{
return true;
mysql_close($db_server);
}
else return false;
}
else return false;
}
?>
captcha.php <?php
session_start();
$_SESSION['captcha']=substr(md5(uniqid()),0,4);
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$im=imagecreate(80,20);
$char=$_SESSION['captcha'];
$bg=imagecolorallocate($im,130,151,130);
for ($i=0; $i<=100; $i++)
{
$color=imagecolorallocate($im,rand(140,160),rand(160,180),rand(140,180));
imagesetpixel($im,rand(2,80),rand(2,20),$color);
}
for ($i=0;$i<strlen($char);$i++)
{
$color=imagecolorallocate($im,180,0,0);
$x=5+$i*20;
$y = rand(1, 6);
imagechar ($im, 5, $x, $y, $char[$i], $color);
}
header("Content-type: image/png");
imagepng($im);
?>
|
16.05.2012 / 14:03 | | Naik  Пользователь
Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Dinisimys1, сворачуй код в спойлер, а то страница уже километровая
|
16.05.2012 / 14:08 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| Naik, ок. Изменил функцию ValidCaptcha: Открыть спойлер Закрыть спойлер function ValidCaptcha ($captcha_error)
{
if (empty($_POST['captcha'])) return 'Введіть код з картинки';
elseif (empty($_SESSION['captcha'])) return 'Помилка сесії.';
elseif ($_POST['captcha'] != $_SESSION['captcha']) return 'Не вірно введений код з картинки.';
else return false;
}
Вывод ит "Помилка сесії", тоесть $_SESSION['captcha'] почему-то пустая  |
16.05.2012 / 16:00 | | TAPAHbl4  Пользователь
Сейчас: Offline
Имя: TAPAHbl4 Регистрация: 15.01.2012
| Dinisimys1, сессия не стартуется походу в первом скрипте
|
16.05.2012 / 16:21 | | Dinisimys1  Пользователь
Сейчас: Offline
Имя: Денис Регистрация: 23.01.2011
| Люблю я аннимон.ком, за то, Что на вопросы долго отвечают, Я сам решаю все проблемы, А аниммоновци скучают. Но если б быстро отвечали, Решали все задачи вмиг Чего бы научился я? Я был бы нубом Но не судьба, Спросил - молчат, а я истериком кричу, не захожу я в чат, где допишу, что доучу, а анимоновци молчат. Вот так решаю я судьбу, скрипт изменю, потом смотрю, в какой строке ошибка там, но все же науйду я ее, изменю код то тут, то там, и радуюсь новым мечтам, как бы улучшить мне его, задам вопрос опять я вам, но решу проблемку эту, так и учу я пиашпи, только не обзывайте меня пии... здесь бан за мат дают, но и оффтоп, и флуд не пропускают  Изменено Dinisimys1 (16.05 / 16:22) (всего 2 раза) |
16.05.2012 / 17:19 | | Koenig  Модератор форума
Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| белый стих прям гг
__________________
 Магистр Мёда |
 Всего сообщений: 4740 Фильтровать сообщения
Поиск по теме
Файлы топика (129)
|