» »

[PHP] Registracija uporabnika

[PHP] Registracija uporabnika

bluefish ::

Imam sledečo kodo, ki podatke pridobi iz obrazca s poljema username in password (name parameter).
Po potrditvi pa se skripta ustavi in javi 1Query failed!. Pregledal sem že tisti del kode na katerega se die nanaša, pa ne najdem napake.

Pomoč?

<?php
	error_reporting(E_ALL);
	
	session_start();
	
	if(!get_magic_quotes_gpc())
	{
		$username = strval(mysql_escape_string($_POST['username']));
		$password = strval(mysql_escape_string($_POST['password']));
	}
	else
	{
		$username = strval($_POST['username']);
		$password = strval($_POST['password']);
	}
	
	require_once("data.php");
	
	$errors = array();
	$validation = false;
	
	mysql_pconnect($host, $user, $password) or die("Failed to connect!");
	mysql_select_db($database) or die("Failed to select!");
	
	if($username == '')
	{
		$errors[] = 'Username missing!';
		$validation = true;
	}
	if($password == '')
	{
		$errors[] = 'Password missing!';
		$validation = true;
	}
	
	if($username != '')
	{
		$sql = "SELECT FROM users WHERE username = '$username'";
		$result = mysql_query($sql);
		if($result)
		{
			if(mysql_num_rows($result) > 0)
			{
				$errors[] = 'Username already in use!';
				$validation = true;
			}
			@mysql_free_result($result);
		}
		else
		{
			die("1Query failed!");
		}
	}
	
	if($validation)
	{
		$_SESSION['ERRORS'] = $errors;
		session_write_close();
		header("location: register.php");
		exit();
	}
	
	$sql = "INSERT INTO users(username, password) VALUES('username', '".md5($_POST['password'])."')"; 
	$result = @mysql_query($sql);
	
	if($result)
	{
		header("location: login.php");
		exit();
	}
	else
	{
		die("2Query failed!");
	}
?>

Ziga Dolhar ::

Hmm, sicer že doooolgo nisem programiral, z direktnim queryanjem se še dlje nisem ukvarjal, ampak - if($result)?

-- edit: Disregard.

Raje dopiši echo $query, da vidimo kaj pošiljaš.
https://dolhar.si/

Zgodovina sprememb…

CrustyDOD ::

Select VSTAVI_POLJE_ALI_* from bla bla..

bluefish ::

@Ziga Dolhar: v katero vrstico to dopišem? Verjetno misliš na echo $result?

Dejansko sem bolj ko ne začetnik v PHPju.

Ziga Dolhar ::

Začenši s tvojo 51. vrstico:

die("1Query failed!");
var_dump($sql);
var_dump(mysql_error());
https://dolhar.si/

Zgodovina sprememb…

bluefish ::

hm, še vedno izpiše samo 1Query failed!.

Ziga Dolhar ::

Aja, bučman jest.

var_dump($sql);
var_dump(mysql_error());
die("1Query failed!");
https://dolhar.si/

bluefish ::

string(40) "SELECT FROM users WHERE username = 'ime'" string(179) "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 'FROM users WHERE username = 'ime'' at line 1" 1Query failed!

Ziga Dolhar ::

Well - Select WHAT exactly? :-) V bistvu te je že Crusty zgoraj na to napotil, le da se mi ni sanjalo, kaj hoče povedat.

Torej - za začetek, "SELECT *" recimo (čeprav to ni najboljša praksa, ampak za začetek bo v redu.)
https://dolhar.si/

misek ::

$sql = "SELECT username, password FROM users WHERE username = '$username'";
ali pa kar
$sql = "SELECT username FROM users WHERE username = '$username'";

Zgodovina sprememb…

  • spremenil: misek ()

bluefish ::

Jp, to pomaga. Samo kaj, ko sem že pred novim problemom. Namesto vnesenega v obrazec mi v bazo shrani vrednost username.
Sem ga kje polomil pri navednicah?

misek ::

Manjka ti znak $ pred username:
$sql = "INSERT INTO users(username, password) VALUES('$username', '".md5($_POST['password'])."')";

bluefish ::

Fino. Hvala vsem za pomoč.
Se oglasim še pri login skripti :) .

bluefish ::

Veselje žal ni dolgo trajalo. Sedaj se zatakne pri kodi za prijavo - tokrat tudi brez kakršnegakoli opozorila.
Obrazec za prijavo le skoči v datoteko v kateri je php koda. Prav tako je vseeno, ali sta geslo in ime pravilna ali ne.
<?php
	error_reporting(E_ALL);
	
	session_start();
	
	if(!get_magic_quotes_gpc())
	{
		$username = strval(mysql_escape_string($_POST['username']));
		$password = strval(mysql_escape_string($_POST['password']));
	}
	else
	{
		$username = strval($_POST['username']);
		$password = strval($_POST['password']);
	}
	
	require_once("data.php");
	
	$errors = array();
	$validation = false;
	
	mysql_pconnect($host, $user, $password) or die("Failed to connect!");
	mysql_select_db($database) or die("Failed to select!");
	
	if($username == '')
	{
		$errors[] = 'Username missing!';
		$validation = true;
	}
	if($password == '')
	{
		$errors[] = 'Password missing!';
		$validation = true;
	}
	
	if($validation)
	{
		$_SESSION['ERRORS'] = $errors;
		session_write_close();
		header("location: login.php");
		exit();
	}
	
	$sql = "SELECT * FROM users WHERE username = '$username' AND password = '".md5($_POST['password'])."'";
	$result = mysql_query($sql);
	
	if($result)
	{
		if(mysql_num_rows($result) == 1)
		{
			session_regenerate_id();
			$user = mysql_fetch_assoc($result);
			$_SESSION['ID'] = $user['id'];
			session_write_close();
			header("location: panel.php");
			exit();
		}
		else
		{
			header("location: login.php");
			exit();
		}
	}
	else
	{
		die("Query failed!")
	}
?>

Zgodovina sprememb…

  • spremenil: bluefish ()

Ziga Dolhar ::

S telefona zal ne vidim celotne kode, ampak vseeno - iz kje se to ucis? Ker tule je ful velik zloo slabih praks.
https://dolhar.si/

misek ::

Pa daj v kodo izpise z echo, da vidiš kako poteka program.

bluefish ::

Del kode glede same prijave in registracije sem gledal po tem: http://phpsense.com/php/php-login-scrip...

Glede na povedano domnevam, da se podobne prakse pojavljajo tudi pri kodi za registracijo?

Ziga Dolhar ::

Aja, dej kodo prosim v st.koda php tag. Debuggas pa s postavljanjem 'echo' (sam imam raje var_dump()) konstruktov na strateska mesta, da opazujes potek programa in vrednosti spremenljivk.
https://dolhar.si/

bluefish ::

Sem poskusil z vstavljanjem teh ukazov, pa bodisi ne navajam pravih spremenljivk ali pa postavljam na napačna mesta.
Skratka, v temle sem čisto zgubljen.

misek ::

Na različna mesta dodaj
echo 'line: ' . __LINE__;
da vidiš, kako ti poteka program. Pa izpiši vsebino spremenljivk, npr.
echo 'username: ' . $username;
A vsebina panel.php bi se morala prikazati po uspešni prijavi?

bluefish ::

sem na koncu spet spisal kodo in sedaj deluje brez težav. Očitno se je šlo za kak typo ali kaj drugega.

iggy ::

ja če bi kakšen error pripopal tud ne bi blo slabo
Hey, you're fat!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo

Geekbuying nakupi in kuponi (strani: 1 2 3 )

Oddelek: Kaj kupiti
11620326 (10811) bluefish
»

Simobil 50% popust na mesečno naročnino (strani: 1 2 3 )

Oddelek: Mobilne tehnologije
14217705 (8514) dk02
»

Prodaja GPL-ed kode

Oddelek: Programiranje
152022 (1696) arjan_t

Več podobnih tem