[help]С моей регисраций)

Статус
В этой теме нельзя размещать новые ответы.

CnecHa3

Постоялец
Регистрация
10 Фев 2007
Сообщения
105
Реакции
20
Что тут не правильно?
Вроде все ок
Только скрипт не делает запрос(mysql_query)
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Регистрация</title>
<link href="./style/css.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="functions.js"></script>
</head>
<body>
<?php
$link = mysql_connect( "localhost", "my", "пасс" ) ;
if($link){ 
	if(mysql_select_db( "my", $link )){
$Ok=$_POST['ok'];
$uniqueName=$_POST['uniqueName']; //Логин
$mobile=$_POST['mobile']; //Мобильный телефон
$password=$_POST['password']; //Пароль
$passwordConfirm=$_POST['passwordConfirm']; //Подтвержения пароля
$firstName=$_POST['firstName']; //Имя
$lastName=$_POST['lastName']; //Фамилия
$city=$_POST['city']; //Город
$day=$_POST['day']; //День Рождения
$month=$_POST['month']; //Месяц Рождения
$year=$_POST['year']; //Год Рождения
$gender=$_POST['gender']; //Пол
$created=date("d.m.Y  H:i");?>
<!-- START MAIN PANE -->
<div style="width: 510px;" align="center">
	<div class="portletContent">
    	<div class="portletWA">
        	<div class="portletWB">
            	<div class="portletWC">
                	<div class="portletWD">
                    	<div class="portlet">
                        	<h2 class="phFriend">РЕГИСТРАЦИЯ</h2>
                            <div class="portletBody">
                            	<form name="registrationForm" method="post" action="registration.php">
                                <table width="100%" cellspacing="0" cellpadding="2" border="0" align="center" class="smallnormal">
                                	<tr></tr>
									<tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Логин:</td>
                                        <td align="left" valign="middle"><input type="text" name="uniqueName" maxlength="32" value=""></td>
                                    </tr>
                                    <tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Моб. тел:</td>
                                        <td align="left" valign="middle"><input type="text" name="mobile" maxlength="32" value=""></td>
                                   </tr>
									<tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Пароль:</td>
                                        <td align="left" valign="middle"><input type="password" name="password" maxlength="32" value=""></td>
                                   </tr>
									<tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Подтверди пароль:</td>
                                        <td align="left" valign="middle"><input type="password" name="passwordConfirm" maxlength="32" value=""></td>
                                    </tr>
									<tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Имя:</td>
                                        <td align="left" valign="middle"><input type="text" name="firstName" maxlength="16" value=""></td>
                                   </tr>
									<tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Фамилия:</td>
                                        <td align="left" valign="middle"><input type="text" name="lastName" maxlength="24" value=""></td>
                                    </tr>
                                    <tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Город:</td>
                                        <td align="left" valign="middle"><input type="text" name="city" maxlength="32" value=""></td>
                                    </tr>
                                    <tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">День рождения:</td>
                                        <td align="left" valign="middle">
                                        	<input type="text" name="day" maxlength="2" size="2" value="">
      										<select name="month">
                                            	<option value=""></option>
    											<option value="0">Январь</option>
                                                <option value="1">Февраль</option>
                                                <option value="2">Март</option>
                                                <option value="3">Апрель</option>
                                                <option value="4">Май</option>
                                                <option value="5">Июнь</option>
                                                <option value="6">Июль</option>
                                                <option value="7">Август</option>
                                                <option value="8">Сентябрь</option>
                                                <option value="9">Октябрь</option>
                                                <option value="10">Ноябрь</option>
                                                <option value="11">Декабрь</option>
                                            </select>
											<input type="text" name="year" maxlength="4" size="3" value=""></td>
                                    </tr>
                                    <tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold">Пол:</td>
                                        <td align="left" valign="middle">
                                        	<input type="radio" name="gender" value="0" title="М"><span class="smallnormal">М</span>
											<input type="radio" name="gender" value="1" title="Ж"><span class="smallnormal">Ж</span>
                                        </td>
                                    </tr>
                                    <tr>
                                    	<td width="30%" align="right" valign="middle" class="bigbold"></td>
                                        <td align="left" valign="middle">
                                        	<input name="agreement" type="checkbox">
											<a href="javascript:void(0);" onclick="openWinCentered('agreement.html','1206465808326',530,450,'location=no,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes'); return false;">Я согласен с Правилами Пользования.</a>
										</td>
                                   </tr>
                                   <tr>
                                   	<td width="30%" align="right" valign="middle" class="bigbold"></td>
                                    <td align="left" valign="middle">
                                    	<br>
<input type="submit" class="formButton" value="ok" name="ok" />&nbsp;
<input type="button" class="formButton" value="отменить" onClick="window.close()" />
  </td></tr>



</table></form>
</div></div></div></div></div></div></div>
</div>
</td>
<!-- END MAIN PANE --><? }} 

if ($Ok){
mysql_query("INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day` `month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` ) VALUE ('$uniqueName','$mobile','".md5($password)."','$firstName','$lastName','$city','$day','$month','$year','$gender','1','1','".date("d.m.Y  H:i")."')" , $link);
mysql_close($link) ;}?>
</body>
</html>
 
mysql_query("INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day` `month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` ) VALUE ('$uniqueName','$mobile','".md5($password)."','$firstName','$lastName','$city','$day','$month','$year','$gender','1','1','".date("d.m.Y H:i")."')" , $link);

Разбираем полеты :)

1. Не VALUE, а VALUES
2. Советую переменные обрамлять в функцию mysql_escape_string() или mysql_real_escape_string().
 
Когда пишие подобные скрипты, вернее будет использовать

не if($link){
if(mysql_select_db( "my", $link )){

a if(!$link){ ..здесь ошибка } else.


А что касаеться запросов, то может стоит проделать условие каждой ошибки? А также, почему не работает, можно посмотреть при Responce из вашего SQL запроса с помощью FireBug к FF.
 
не
PHP:
$password=$_POST['password']
а
PHP:
$password=mysql_escape_string($_POST['password'])
Если так не сделать тебе умельци базу почистят...
 
вот еще помоги добрые люди нужно сделать проверку типом check()

PHP:
function check() {

	if(empty($uniqueName) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{3,16}"))

	if(empty($mobile) AND !ereg("[0-9+]{8,13}"))

	if(empty($password) AND empty($passwordConfirm) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}"))

	if(empty($firstName) AND !ereg("[a-zA-Z]{3,16}"))

	if(empty($lastName) AND !ereg("[a-zA-Z]{3,16}"))

	if(empty($city) AND !ereg("[a-zA-Z]{3,16}"))

	if(empty($day) AND !ereg("[0-9]{1,2}"))

	if(empty($month))

	if(empty($year) AND !ereg("[0-9]{2,4}"))

}

а что дальше? чтобы сделать например функцию "истеной" (true)
 
По твоему вопросу можно сделать так:

PHP:
/*функция необходимая для отправки человека с предупреждением на предыдущую страницу - если поля не были верно заполнены*/
function forwardPrevPage($string){

$string = addslashes($string);

$string1 = 'У вас не поддерживается яваскрипт. На предыдущей странице вы совершили следующие ошибки: '.$string.' Вернитесь к заполнению формы удобным для вас способом';
/*по сути можешь указать в комментарии ссылку в хтмл куда возвращаться.*/
/* а мы все равно напишем предупреждение - вдруг яваскрипт у человека не поддерживается? */

echo($string1);

die('<head><script type="text/javascript">alert("'.$string.'");window.history.go(-1);</script></head>');
}  

function check() {
    $message = '';
    if(empty($uniqueName) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{3,16}")) {
    $message.='Поле Логин не было заполнено. Либо не соответствует заданному формату (латиница или цифры. от трех до 16 символов.) ';
}

    if(empty($mobile) AND !ereg("[0-9+]{8,13}")) {
    $message.='Укажите верно номер мобильного телефона.';
}

    if(empty($password) AND empty($passwordConfirm) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}") OR ($password != $passwordConfirm))
{
    $message.='Пароль не является одной из латинских букв или цифр. Либо не было введено подтверждение пароля. Или же пароль и подтверждение пароля не совпадают.';
}

    if(empty($firstName) AND !ereg("[a-zA-Z]{3,16}"))
    {
    $message.=' Поле имя не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }
    if(empty($lastName) AND !ereg("[a-zA-Z]{3,16}"))
    {
    $message.=' Поле фамилия не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }

    if(empty($city) AND !ereg("[a-zA-Z]{3,16}"))
 {
    $message.=' Поле город не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }

    if(empty($day) AND !ereg("[0-9]{1,2}"))
{
    $message.=' Поле День Рождения не было заполнено. Либо не соответствует заданному формату (от одного до двух символов. Цифры.)';
    }

    if(empty($month))
{
    $message.=' Поле Месяц Рождения не было заполнено.';
    }

    if(empty($year) AND !ereg("[0-9]{2,4}"))
{
    $message.=' Поле Год Рождения не было заполнено.Либо не соответствует заданному формату (от двух до четырех символов. Цифры.)';
    }
    if($message) forwardPrevPage($message);
    return true;
}  
   check();
 /* а дальше твой полезный код. если человек где то ошибся его "толкнет" на предыдущую страницу с предупреждением или просто скажет ему об ошибке, код, если check не пройдет проверку данных после этого места выполняться не будет,*/

Возможны ошибки "опечаток" ну думаю с отладкой справишься.
В комментариях я расписал что за регулярки для проверки у тебя используются в check.
mysql_escape_string - спорно - не всегда учитывает всю логику проверки данных. пример дальше. можно и средствами пхп:

PHP:
function escapedString($text)
{
 $text = html_entity_decode($text,ENT_QUOTES); /*третьим параметром можно передать кодировку символов*/
 //$text = strip_tags($text); //раскомментировать, если необходимо "вырезать" все тэги хтмл
 
 $text = trim($text);
 if(!get_magic_quotes_gpc()){
   $text = addslashes($text);
 }
    return $text;
}
function toInt($int)
{
  $int = abs(intval($int));
  return ($int?$int:false);

}
 $myVar = escapedString($_GET['myVar']);
/* $myVar - точно "упакована" - вряд ли что-то скормят*/
 $myVar = toInt($_GET['myVar']);
/* $myVar - проверяем дальше false или нет, если нет - используем, это точно целое число - причем по модулю. Можно смело использовать в запросе. А что будет скажем если сделать так?
 $_GET['myVar'] = -1;
 $myVar = mysql_real_escape_string($_GET['myVar']);
 $q = mysql_query('SELECT * FROM `table` WHERE `id`=\''.$myVar.'\'');
 Где `id` autoincrement int 11 (всегда положительно?)
 - если на сайте разрешен вывод ошибок в браузер - поздравляю. Ваш mysql_real_escape_string только что "рассказал" о структуре папок вашего сервера))

*/
Пример очень тревиальный. Но. Допустим у Вас массив данных. Так и будем дергать мускуль чтобы разобрать массив перед отправкой в базу?) Или немного преобразовав функции проверки с помощью ПХП подготовим данные и поместим их?
 
По твоему вопросу можно сделать так:
****

тут у меня возникает одна проблема он постоянна выводит эррор

незнаю уже и так и так перепробывал
вот весь мой registration.php
PHP:
<?php
error_reporting( E_ALL ^ E_NOTICE ) ;
function redirect($url) {
 echo "<html><head>
<meta http-equiv='Refresh' content='0; url=" . $url . "'>
</head></html>";
}

$uniqueName=$_POST['uniqueName']; //Логин
$mobile=$_POST['mobile']; //Мобильный телефон
$password=$_POST['password']; //Пароль
$passwordConfirm=$_POST['passwordConfirm']; //Подтвержения пароля
$firstName=$_POST['firstName']; //Имя
$lastName=$_POST['lastName']; //Фамилия
$city=$_POST['city']; //Город
$day=$_POST['day']; //День Рождения
$month=$_POST['month']; //Месяц Рождения
$year=$_POST['year']; //Год Рождения
$gender=$_POST['gender']; //Пол
$created=date("d.m.Y  H:i";

/*функция необходимая для отправки человека с предупреждением на предыдущую страницу - если поля не были верно заполнены*/


/*функция необходимая для отправки человека с предупреждением на предыдущую страницу - если поля не были верно заполнены*/
function forwardPrevPage($string){

$string = addslashes($string);

$string1 = 'У вас не поддерживается яваскрипт. На предыдущей странице вы совершили следующие ошибки: '.$string.' Вернитесь к заполнению формы удобным для вас способом';
/*по сути можешь указать в комментарии ссылку в хтмл куда возвращаться.*/
/* а мы все равно напишем предупреждение - вдруг яваскрипт у человека не поддерживается? */

echo($string1);

die('<head><script type="text/javascript">alert("'.$string.'");window.history.go(-1);</script></head>');
}  

function check() {
    $message = '';
    if(empty($uniqueName) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{3,16}")) {
    $message.='Поле Логин не было заполнено. Либо не соответствует заданному формату (латиница или цифры. от трех до 16 символов.) ';
}

    if(empty($mobile) AND !ereg("[0-9+]{8,13}")) {
    $message.='Укажите верно номер мобильного телефона.';
}

    if(empty($password) AND empty($passwordConfirm) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}") OR ($password != $passwordConfirm))
{
    $message.='Пароль не является одной из латинских букв или цифр. Либо не было введено подтверждение пароля. Или же пароль и подтверждение пароля не совпадают.';
}

    if(empty($firstName) AND !ereg("[a-zA-Z]{3,16}"))
    {
    $message.=' Поле имя не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }
    if(empty($lastName) AND !ereg("[a-zA-Z]{3,16}"))
    {
    $message.=' Поле фамилия не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }

    if(empty($city) AND !ereg("[a-zA-Z]{3,16}"))
 {
    $message.=' Поле город не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)';
    }

    if(empty($day) AND !ereg("[0-9]{1,2}"))
{
    $message.=' Поле День Рождения не было заполнено. Либо не соответствует заданному формату (от одного до двух символов. Цифры.)';
    }

    if(empty($month))
{
    $message.=' Поле Месяц Рождения не было заполнено.';
    }

    if(empty($year) AND !ereg("[0-9]{2,4}"))
{
    $message.=' Поле Год Рождения не было заполнено.Либо не соответствует заданному формату (от двух до четырех символов. Цифры.)';
    }
    if($message) forwardPrevPage($message);
    return true;
}  
   check();
 /* а дальше твой полезный код. если человек где то ошибся его "толкнет" на предыдущую страницу с предупреждением или просто скажет ему об ошибке, код, если check не пройдет проверку данных после этого места выполняться не будет,*/ 
 

mysql_connect( "localhost", "my", "pass" ) or die("Could not connect: " . mysql_error());
mysql_select_db("my") or die("Could not connect: " . mysql_error());

$ins="INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day`,`month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` ) ";
$val="VALUES ('".$uniqueName."','".$mobile."','".md5($password)."','".$firstName."','".$lastName."','".$city."','".$day."','".$month."','".$year."','".$gender."','1','1','".date("d.m.Y  H:i")."')";
mysql_query($ins.$val, $link) or die("Could not connect: " . mysql_error());

mysql_close($link);



?>
 
Так. на будущее. ошибку в студию. А лучше: ссылку на сайт, и ошибку впридачу. Учись заниматься отладкой. Меня лично смутило (может чего не знаю) вот это:

PHP:
mysql_connect( "localhost", "my", "pass" ) or die("Could not connect: " . mysql_error());
mysql_select_db("my") or die("Could not connect: " . mysql_error());

$ins="INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day`,`month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` ) ";
$val="VALUES ('".$uniqueName."','".$mobile."','".md5($password)."','".$firstName."','".$lastName."','".$city."','".$day."','".$month."','".$year."','".$gender."','1','1','".date("d.m.Y  H:i")."')";
mysql_query($ins.$val, $link) or die("Could not connect: " . mysql_error());

mysql_close($link);
если так?:
PHP:
$server =  "localhost"; //имя твоего мускуль сервера
$user   =  "my"; //имя мускуль пользователя
$pass   =  "pass"; //пароль мускуль пользователя
$db     =  "my";   //база данных с которой ты будешь работать
/*функция открывает соединение с мускуль сревером
принимает одноименные параметры вверху
*/

function db_connect($server,$user,$pass,$db){
 $res = mysql_connect( $server, $user, $pass )
        if($res&&is_resource($res)){
                $db = mysql_select_db($db,$res);
                if(!$db){ forwardPrevPage("Не могу соединиться с базой данных. Зайдите позже.: ".$db. mysql_error());
                }
        } else forwardPrevPage("Ошибка при выборе базы данных: " . mysql_error());
 return $res;
}
function db_close(&$res){
       if($res&&is_resource($res)){
       mysql_close($res);
       unset($res);
       }
}

$res = db_connect($server,$user,$pass,$db);

$q      =   "INSERT INTO `user` (`uniqueName`,`mobile`,`password`,`firstName`,`lastName`,`city`,`day`,`month`,`year`,`gender`,`allowMobile`,`allowAge`,`created` ) ";
$val    =   "VALUES ('".$uniqueName."','".$mobile."','".md5($password)."','".$firstName."','".$lastName."','".$city."','".$day."','".$month."','".$year."','".$gender."','1','1','".date("d.m.Y  H:i")."')";
$q      =   $q.$val;
$ins    =   mysql_query($q);
if(!$ins || !mysql_affected_rows($res)){
        forwardPrevPage('Ошибка при вставке данных о пользователе'.mysql_error());
}


db_close($res); //а насколько оно нужно именно здесь закрывать подсоединение к БД?)))
unset($q, $val, $ins, $uniqueName, $mobile, $password, $firstName,  $lastName, $city, $day, $month, $year, $gender);

Итак почитав твой код сделал следующие выводы:
1. Прежде чем использовать функцию сходи на сайт: Для просмотра ссылки Войди или Зарегистрируйся, введи ее название и посмотри какие параметры она принимает и что возвращает
2. Возьми в руки учебник по пхп советую для начала Для просмотра ссылки Войди или Зарегистрируйся и просмотри синтаксис языка - я за время кодинга не встречал использование конструкции OR в таком виде как у тебя. + научишься отлаживать приложения.
3. Думай о пользователях. Сделать просто die и оставить его наедине в укромном уютном уголке сайта в романтической близкой к интимной обстановке созданной Белым листом и Твоей Ошибкой - тебе не кажется что это чересчур?)))) Хотя бы отрефорварди его туда - откуда он пришел) С предупреждением) Заботься о пользователях твоего будущего сайта.
+ Учти твоему пользователю не всегда интересно читать английские, значащие только что-либо для тебя предупреждения. Замени на нечто обдуманное и понятное "Not Connect..." - и в конечной версии подумай - а надо ли ему видеть вообще вывод который делает функция mysql_error() или это оставть только для себя?:)
 
PHP:
function check(){
	$error='';
	
	$res = db_connect(_SERVER,_DATEBASE,_PASSWORD,_DB);
	$result = mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");
	while($row == mysql_fetch_array($result,MYSQL_ASSOC)){
		if($uniqueName == $row['uniqueName']){$error.='Ивени но этото пользователь уже занит!<br>';}
	}
	db_close($res);
		if(empty($uniqueName) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}")){
			$error.='Поле Логин не было заполнено. Либо не соответствует заданному формату (латиница или цифры. от трех до 16 символов.)<br>';}
	if(empty($mobile) AND !ereg("[0-9+]{8,13}")){ 
		$error.='Укажите верно номер мобильного телефона.<br>';}
	if(empty($password) AND empty($passwordConfirm) AND !ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}") OR ($password != $passwordConfirm)){
		$error.='Пароль не является одной из латинских букв или цифр. Либо не было введено подтверждение пароля. Или же пароль и подтверждение пароля не совпадают.<br>';}
	if(empty($firstName) AND !ereg("[a-zA-Zа-яА-Я]{3,16}")){
    	$error.=' Поле имя не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)<br>';}
	if(empty($lastName) AND !ereg("[a-zA-Zа-яА-Я]{3,16}")){
		$error.=' Поле фамилия не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)<br>';}
	if(empty($city) AND !ereg("[a-zA-Z]{3,16}")){
		$error.=' Поле город не было заполнено. Либо не соответствует заданному формату (от трех до 16 символов. Латиница.)<br>';}
	if(empty($day) AND !ereg("[0-9]{1,2}")){
		$error.=' Поле День Рождения не было заполнено. Либо не соответствует заданному формату (от одного до двух символов. Цифры.)<br>';}
	if(empty($month)){
		$error.=' Поле Месяц Рождения не было заполнено.<br>';}
	if(empty($year) AND !ereg("[0-9]{2,4}")){
		$error.=' Поле Год Рождения не было заполнено.Либо не соответствует заданному формату (от двух до четырех символов. Цифры.)<br>';}
	
	if($error){return $error;}
}

Вот посмотри тут у меня все ок?:)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху