Login по урок не работи като хората.

pwnoobz

Registered
Здравейте препоръчаха ми този урок:
http://web-tourist.net/login/login/view.php?st=802
и по него си пренаправих файловете за мои цели, като пооправих грешките на този, който го е писал.
Сега проблемът е, че не иска да променя в базата данни информацията след като submit-на в editprofile.php
Качвам съдържанието на всички файлове, ако искате да тествате.
Може да се каже, че съм оправил повечето грешки, ако не и всички.
Бих искал да направя email полето да е задължително и в него да може да се въвежда само email адрес, а не всяк'ви щуротии. Благодаря предварително. Извинявам се, ако има грешки или сложни обяснения първи пост ми е и го пиша в 4:30 през нощта. (=

Ето файловото дърво:


  • config.php
    register.php
    members.php
    logout.php
    editprofile.php
    index.php
    > includes - ПАПКА (която съдържа):
    index.php - празен
    login.php
    index.html
    menu.html


Тук ще дам съдържанието на всеки файл, но преди това ще покажа как промених заявката в базата данни:


[sql]
CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
type ENUM( 'member' , 'admin' ) NOT NULL default 'member',
`username` varchar(30) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`first_name` varchar (15) NOT NULL,
`last_name` varchar (30) NOT NULL,
`gender` ENUM('male', 'female') NOT NULL default 'male',
`email` varchar(50) NOT NULL default '',
`skype` varchar(50) NOT NULL default 'Not Specified',
`facebook` varchar(150) NOT NULL default 'Not Specified',
`location` varchar(100) NOT NULL default 'Not Specified',
PRIMARY KEY (`id`),
UNIQUE KEY (`email`),
KEY (`email`, `password`)
) ENGINE = MYISAM DEFAULT CHARSET = utf8;
[/sql]

Kъдето ID е уникалният номер на регистриралият се потребител и се увеличава автоматично.
type е типа на потребителя съответно - admin/user , което позволява задаване на различни привилегии
username е името, с което потребителя достъпва сайта
password е паролата, с която потребителя достъпва сайта
first_name е първото име на потребителя
last_name е последното име на потребителя
gender е пола на потребителя
email е електронният адрес на потребителя
skype е skype-ът на потребителя
facebook е връзка към facebook акаунта на потребителя
location е местожителството на потребителя.

[config.php]

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ob_start();
$conn = mysql_connect("localhost","admin","root");
mysql_select_db("project_x") or die(mysql_error());
$logged = MYSQL_QUERY("SELECT * from users WHERE id='$_COOKIE[id]' AND password = '$_COOKIE[pass]'");
$logged = mysql_fetch_array($logged);
?>

[register.php]

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
		ob_start();
		// Позволява бисквитки
		include("config.php");
		// Използва config.php
		if ($_POST['register']) {
		// Проверка... АКО формата е изпратена
		$username = $_POST[username];
		$password = $_POST[pass];
		$cpassword = $_POST[cpass];
		$email = $_POST[emai1];
		//Въвежда променливите с информация зададена от потребителя
			if($username==NULL|$password==NULL|$cpassword==NULL|$email==NULL) 
			{
			//проверка за празни полета
			echo "Оставили сте празно поле!";
				}else{
			//Няма празни полета! => Продължаваме...
				if($password != $cpassword) {
			//Проверка за паролите
				echo "Паролите не съвпадат!";
				}else{
			//Паролите са си O.K.! => Продължавамe...
				$password = md5($password);
			//Криптира паролата при изпращане на заявката
				$checkname = mysql_query("SELECT username FROM users WHERE username='$username'");
				$checkname= mysql_num_rows($checkname);
				$checkemail = mysql_query("SELECT email FROM users WHERE email='$email'");
				$checkemail = mysql_num_rows($checkemail);
				if ($checkemail>0|$checkname>0) {
			//Проверка дали няма вече такъв регистриран потребител.има => чупи цикала и плюе:
				echo "The username or email is already in use";
					}else{
					// или, ако никой не използва този username и email ... => продължаваме
					$username = htmlspecialchars($username);
					$password = htmlspecialchars($password);
					$email = htmlspecialchars($email);
					// тук се уверяваме да не се изпрати случайно html код.
					// Всичко бачка чудесно => INSERT
					$query = mysql_query("INSERT INTO users (username, password, email) VALUES('$username','$password','$email')"); 
					// Добавя информацията в DB в таблица users
					echo "Вие успешно се регистрирахте!";
					}
				}
			}
		}else{
		// формата не е попълнена правилно => хаййде на ново
		echo ("
		<center>
		<form method=\"POST\">
		Потребителско име: <input type=\"text\" size=\"15\" maxlength=\"25\" name=\"username\"><br/>
		Парола: <input type=\"password\" size=\"15\" maxlength=\"25\" name=\"pass\"><br/>
		Повторете паролата: <input type=\"password\" size=\"15\" maxlength=\"25\" name=\"cpass\"><br/>
		Email адрес: <input type=\"text\" size=\"15\" maxlength=\"25\" name=\"emai1\"><br/>
		<input name=\"register\" type=\"submit\" value=\"Регистрирай се\">
		</form>
		</center>
		");
		}
?>

[members.php]

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ob_start();
include("config.php");
if (!$_GET[user])
{
	$getuser = mysql_query("SELECT * from users order by id asc");
	while ($user = mysql_fetch_array($getuser))
	{
		// Вика всичко от таблица user
		echo ("<a href=\"members.php?user=$user[username]\">$user[username]</a><br/>\n");
		// Генериран линк към профила на потребител.
	}
}
ELSE
{ 
	$getuser = mysql_query("SELECT * from users where username = '$_GET[user]'");
	$usernum = mysql_num_rows($getuser);
	if ($usernum == 0)
	{
		echo ("Няма потребители");
	}
	else
	{
		$profile = mysql_fetch_array($getuser);
		echo ("<center><b>Сега разглеждате профила на: $profile[username]</b> с юзърклас <b>$profile[type]</b> <br/></center>
		Име: $profile[first_name] $profile[last_name]<br/>
		Пол: $profile[gender]<br/>
		Facebook: $profile[facebook]<br/>
		Skype: $profile[skype]<br/>
		Location: $profile[location]<br/>
		Email адрес: $profile[email]<br/>");
		// тук викаме информацията за потребителя от базата данни от таблица users (17ред)
	}
} 
?>


[index.php]

PHP:
<?php

   include 'includes/header.html';
   include 'includes/login.php';
   include 'includes/menu.html';

?>

[logout.php]

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ob_start();
setcookie("id", 2132421,time()+(60*60*24*5), "/", "");
setcookie("pass", loggedout,time()+(60*60*24*5), "/", "");
echo ("<meta http-equiv=\"Refresh\" content=\"2; URL=index.php\"/>Вие успешно излязохте от акаунта си!");
?>


[editprofile.php]

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ob_start();
include("config.php");
if ($logged[username])
		{
				// При успешен вход => Продължаваме...
				if (!$_POST[update])
			{
				// Формата не е била изпратена => Продължаваме...
				$profile = mysql_query("SELECT * from users where username = '$logged[username]'");
				$profile = mysql_fetch_array($profile);
				// Взима информацията от DB и я показва в html формата.
				echo(" 
				<center><form method=\"POST\">
				<table width=\"100%\">
				<tr>
				<td align=\"right\" width=\"25%\">
				Потребител:
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"username\" value=\"$profile[username]\">
				</td>
				<tr>
				<td align=\"right\" width=\"25%\">
				Име
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"first_name\" value=\"$profile[first_name]\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"last_name\" value=\"$profile[last_name]\">
				</td>
				</td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Location
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"locate\" value=\"$profile[location]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Skype
				</td>
				<td align=\"left\">
				<input size=\"25\" name=\"skype\" value=\"$profile[skype]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Facebook</td>
				<td align=\"left\">
				<input size=\"25\" name=\"facebook\" value=\"$profile[facebook]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Email адрес</td>
				<td align=\"left\">
				<input size=\"25\" name=\"email\" value=\"$profile[email]\"></td>
				</tr>
				<tr>
				<td align=\"center\">
				</td>
				<td align=\"left\">
				<input type=\"submit\" name=\"update\" value=\"Обнови\"></td>
				</tr>
				</table>
				</form>
				</center>");
			}
		else 
			{
				$username = htmlspecialchars($_POST[username]);
				$first_name = htmlspecialchars($_POST[first_name]);
				$last_name = htmlspecialchars($_POST[last_name]);
				$password = htmlspecialchars($_POST[password]);
				$gender = htmlspecialchars($_POST[gender]);
				$facebook = htmlspecialchars($_POST[facebook]);
				$skype = htmlspecialchars($_POST[skype]);
				$locate = htmlspecialchars($_POST[locate]);
				// махаме html от заявката
				echo ("Вашия профил е успешно обновен!"); 
				$update = mysql_query("Update users set email = '$email', 
				skype = '$skype', facebook = '$facebook', location = '$locate',
				first_name = '$first_name', last_name = '$last_name',
				gender = '$gender', username = '$username',
				where username = '$logged[username]'"); 
				// Обновява информацията в базата данни
			}
		}
	else 
	{ 
	// Ако НЕ са се логнали
	echo ("<a href=\"index.php\">Не сте логнат!</a>"); 
	} 
?>
 
В editprofile.php смени:
Код:
$update = mysql_query("Update users set email = '$email', 
                                skype = '$skype', facebook = '$facebook', location = '$locate',
                                first_name = '$first_name', last_name = '$last_name',
                                gender = '$gender', username = '$username',
                                where username = '$logged[username]'");

с
Код:
$update = mysql_query("Update users set email = '$email', 
                                skype = '$skype', facebook = '$facebook', location = '$locate',
                                first_name = '$first_name', last_name = '$last_name',
                                gender = '$gender', username = '$username',
                                where username = '$logged[username]'") or die(mysql_error());

и виж евентуално каква грешка ти връща.
 
Промених това, което казваш
Дава ми:
Вашия профил е успешно обновен!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where username = 'admin'' at line 5
 
Заместващ предната заявка с този код.

Код:
$username_logged = $logged['username'];
$update = mysql_query("UPDATE `users` SET `email` = '$email', `skype` = '$skype', `facebook` = '$facebook', `location` = '$locate', `first_name` = '$first_name', `last_name` = '$last_name',
							`gender` = '$gender', `username` = '$username',
							WHERE `username` = '$username_logged'"
) or die(mysql_error());

Само един въпрос, защо може да се сменя потребителското име? ;D
 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `username` = 'admin'' at line 5

Лелеее...секлета ме хваща
 
Другият вариянт е
PHP:
$update = mysql_query("UPDATE users SET email = '$email', skype = '$skype', facebook = '$facebook', location = '$locate', first_name = '$first_name', last_name = '$last_name', gender = '$gender', username = '$username', WHERE username = '".$logged['username']."'") or die(mysql_error());
 
Всичко добре, но тази грешка си остава:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where username = 'admin'' at line 5

този валидатор:

казва, че всичко е наред с кода
http://www.piliapp.com/php-syntax-check/
PHP:
<?php

ob_start();
include("config.php");
if ($logged[username])
		{
				// При успешен вход => Продължаваме...
				if (!$_POST[update])
			{
				// Формата не е била изпратена => Продължаваме...
				$sql = mysql_query("SELECT * from users where username = '$logged[username]'");
				$profile = mysql_fetch_array($sql);
				// Взима информацията от DB и я показва в html формата.
				echo(" 
				<center><form method=\"POST\">
				<table width=\"100%\">
				<tr>
				<td align=\"right\" width=\"25%\">
				Потребител:
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"username\" value=\"$profile[username]\">
				</td>
				<tr>
				<td align=\"right\" width=\"25%\">
				Име
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"first_name\" value=\"$profile[first_name]\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"last_name\" value=\"$profile[last_name]\">
				</td>
				</td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Location
				</td>
				<td align=\"left\">
				<input type=\"text\" size=\"25\" maxlength=\"25\" name=\"locate\" value=\"$profile[location]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Skype
				</td>
				<td align=\"left\">
				<input size=\"25\" name=\"skype\" value=\"$profile[skype]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Facebook</td>
				<td align=\"left\">
				<input size=\"25\" name=\"facebook\" value=\"$profile[facebook]\"></td>
				</tr>
				<tr>
				<td align=\"right\" width=\"25%\">
				Email адрес</td>
				<td align=\"left\">
				<input size=\"25\" name=\"email\" value=\"$profile[email]\"></td>
				</tr>
				<tr>
				<td align=\"center\">
				</td>
				<td align=\"left\">
				<input type=\"submit\" name=\"update\" value=\"Обнови\"></td>
				</tr>
				</table>
				</form>
				</center>");
			}
		else 
			{
				$username = htmlspecialchars($_POST[username]);
				$first_name = htmlspecialchars($_POST[first_name]);
				$last_name = htmlspecialchars($_POST[last_name]);
				$password = htmlspecialchars($_POST[password]);
				$gender = htmlspecialchars($_POST[gender]);
				$facebook = htmlspecialchars($_POST[facebook]);
				$skype = htmlspecialchars($_POST[skype]);
				$locate = htmlspecialchars($_POST[locate]);
				// махаме html от кода

				
				echo ("Вашия профил е успешно обновен!"); 
				$update = mysql_query("Update users set email = '$email', 
				skype = '$skype', facebook = '$facebook', location = '$locate',
				first_name = '$first_name', last_name = '$last_name',
				gender = '$gender', username = '$username',
				where username = '".$logged['username']."'") or die(mysql_error());
				
				/*  $username_logged = $logged['username'];
				$update = mysql_query("UPDATE `users` SET `email` = '$email', 
				`skype` = '$skype', `facebook` = '$facebook', `location` = '$locate', 
				`first_name` = '$first_name', `last_name` = '$last_name',
				`gender` = '$gender', `username` = '$username',
				WHERE `username` = '$username_logged'") or die(mysql_error());   */	
				
				/* echo ("Вашия профил е успешно обновен!"); 
				$update = mysql_query("Update users set email = '$email', 
				skype = '$skype', facebook = '$facebook', location = '$locate',
				first_name = '$first_name', last_name = '$last_name',
				gender = '$gender', username = '$username',
				where username = '$logged[username]'") or die(mysql_error());*/
				// Обновява информацията в базата данни
			}
		}
	else 
	{ 
	// Ако НЕ са се логнали
	echo ("<a href=\"index.php\">Не сте логнат!</a>"); 
	}
?>
 

Back
Горе