Wątek zablokowany 2013-08-06 14:58 przez dzek69.

Ciągle komunikat o złych danych logowania

0

Witam, zrobiłem formularz logowania, jak i rejestracji, rejestracja przebiega pomyślnie, tworzy konto, tworzy foldery na serwerze dla użytkownika z jego nazwą, ale podczas logowania, cały czas wywala mi błąd... Błąd, że nie podałem hasła, lub nazwy użytkownika, oto kod. Wywala to: 'cPrzepraszam, musisz podać login, oraz hasło, aby móc się zalogować.'

Cały dzień się z tym męczę i nie mam pojęcia, co jest nie tak...

<?php 	
require_once('common/connectvars.php');

session_start();

$error_msg = "";

if(!isset($_SESSION['user_id']))
{
	if(isset($_POST['submit']))
	{
		$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
					
		$user_username = mysqli_real_escape_string($dbc, trim($_POST['username']));
		$user_password = mysqli_real_escape_string($dbc, trim($_POST['password']));
			
		if(!empty($user_username) && !empty($user_password))
		{
			$query = "SELECT user_id, username FROM user_account WHERE username = '$user_username' AND password = SHA('$user_password')";
			$data = mysqli_query($dbc, $query);
				
			if(mysqli_num_rows($data) == 1)
			{
				$row = mysqli_fetch_array($data);
				$_SESSION['user_id'] = $row['user_id'];
				$_SESSION['user_username'] = $row['user_username'];
				setcookie('user_id', $row['user_id'], time() + 3600);
				setcookie('user_username', $row['user_username'], time() + 3600);
				$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
				header('Location: ' . $home_url);
			}
			else 
			{
				$error_msg = 'cPrzepraszam, musisz podać email, oraz hasło, aby móc się zalogować.';
			}
		}
		else 
		{
			$error_msg = 'Przepraszam, musisz podać email, oraz hasło, aby móc się zalogować.';
		}
	}
}
?>

Tutaj jest formularz logowania

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
       <label for="username">Username:</label><br />
       <input type="text" id="username" name="username" placeholder="Who are you?" /><br />
       <label for="password">Password:</label><br />
       <input type="password" id="password" name="password" /><br />
       <input type="submit" value="Log In" name="submit" />
</form>

Tutaj formularz rejestracji

<?php
	require_once('common/connectvars.php');
	
	$dbconnection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
	
	if(isset($_POST['submit']))
	{
		$username = mysqli_real_escape_string($dbconnection, trim($_POST['username']));
		$password = mysqli_real_escape_string($dbconnection, trim($_POST['password']));
		
		$query = "INSERT INTO user_account (username, password, join_date) VALUES " .
			"('$username', SHA('$password'), NOW())";
			
		$myNewFolderPathUsername = "profiles/" . $username;
		$myNewFolderPathGallery = "profiles/" . $username . "/gallery";
		$myNewFolderPathVideos = "profiles/" . $username . "/videos";
		
		if (mkdir($myNewFolderPathUsername, 0700) ) 
		{
			if(mkdir($myNewFolderPathGallery, 0700))
			{
				
			}
			else
			{
				echo 'Nie można było utworzyć katalogu dla galerii użytkownika';
			}
			if(mkdir($myNewFolderPathVideos, 0700))
			{
				
			}
			else
			{
				echo 'Nie można było utworzyć katalogu dla galerii użytkownika';
			}
		}
		else 
		{
			echo 'coś się pojebało stary';
		}

		mysqli_query($dbconnection, $query);
		mysqli_close($dbconnection);
		exit();
	}
	
	mysqli_close($dbconnection);
?>
<section id="signup_panel">
	<div id="">
		<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
			<label for="username">Username:</label>
			<input type="text" id="username" name="username" /><br />
			<label for="password">Password:</label>
			<input type="password" id="password" name="password" /><br />
			<label for="password2">Retype</label>
			<input type="password" id="password2" name="password2" />
			<input type="submit" value="Sign Up" name="submit" />
		</form>
	</div>
</section>
0

Sprawdziłeś, czy na pewno dane, które skrypt odbiera w $_POST["username"] oraz $_POST["password"] są poprawne?
Edit: btw, po co trim-ujesz hasło?
Edit2: może brakuje średnika pod koniec zapytania? Czasami PHP ma o to pretensje :P

0

Nie mam pojęcia jaki może być w tym błąd... Sprawdzam znaki itp. i niby jest wszystko dobrze, a nie jest... A cały dzień zmarnowany na szukanie pewnie jakiejś drobnostki. Używam trim na wszelki wypadek, aby jak ktoś walnie spację w haśle, to aby ją wysadziło.

0

Zadając pytania bądź dokładny. Dlaczego podajesz komunikat, który w kodzie NIE ISTNIEJE? Zaznacz go z tego posta, skopiuj, ctrl+f, wklej - jeden wynik.
Patrząc na kod - dane nie zgadzają się z żadnymi danymi z bazy (czy tu komunikat nie powinien brzmieć "błędne dane logowania"?). Zrób sobie dumpa zapytania gdy je wykonujesz w celach debugowania (var_dump($query)) i się przyjrzyj czy zapytanie generujesz takie jak oczekujesz - jeżeli nie, cofnij się kawałek w kodzie i zrób dumpa np. zmiennych z których budujesz zapytanie - aż odnajdziesz miejsce, które nie zachowuje się jak oczekujesz.

0

Przecież napisałem, przy którym wywala błąd " Wywala to: 'cPrzepraszam, musisz podać login, oraz hasło, aby móc się zalogować.' ", że hasło lub nazwa użytkownika nie zostały wpisane poprawnie. Jak NIE ISTNIEJE? Wpisałem komunikat na odwal, dodałem do niego "c", aby wiedzieć, że to komunikat przy porównaniu danych.

0

Mówię o Twojej dokładności. Przeczytaj moją wypowiedź całą. Coś o ctrl+f i te sprawy. A gdyby nie udało Ci się doczytać to masz screenshota: http://i.imgur.com/J09Wb30.jpg

Powiesz, że się czepiam. Nie. Za długo tu (i nie tylko tu) siedzę, żebym miał ignorować fakt, że pierwsze ktoś opisuje problem, potem zmienia kod, potem go wkleja.

Tak, wiem, że chodzi o tamto miejsce, dzięki temu "c" byłem w stanie to rozpoznać (żeby nie było, że czepiam się i nie interesuję się problemem) - podałem Ci też kroki, które powinny Ci pomóc w rozwiązaniu problemu. Zastosuj się do nich i podziel się wynikami :)

0

Mam bajzel i dlatego tutaj skopiowałem z tym, a tam było z tamtym tekstem. Dodałem i zrobiłem konto mietek/mietek, gdy wpisuję dane to wyskakuje mi:
string(97) "SELECT user_id, username FROM user_account WHERE username = 'mietek' AND password = SHA('mietek')" Nie wiem, czy o to chodziło, bo PHP prawie kompletnie nie czaję, aby nie było, że źle coś zrobiłem ;)

Wpisałem "var_dump($query);" poniżej zapytania.

0

Spróbuj dopisać średnik na końcu zapytania.

0

ale przecież w kodzie jest średnik, jest tam nawet na górze przecież, po query = jest średnik

0

Dodaj średnik na końcu zapytania:

//                                                                                                                         v
$query = "SELECT user_id, username FROM user_account WHERE username = '$user_username' AND password = SHA('$user_password');";
//                                                                                                                         ^
0

No jest dodany i cały czas ten sam błąd wyskakuje, no i to z vardump
string(98) "SELECT user_id, username FROM user_account WHERE username = 'mietek' AND password = SHA('mietek');"

Query mam też przy robieniu konta i tam średnika na końcu nie było, po SHA('$user_password') a działa bo konta tworzy, foldery i hasło też z końcowym komunikatem, że konto zostało utworzone pomyślnie. dodałem w formularzu rejestracji do query średnik i nic nie zmieniło.

Kolejny dzień siedzę, sprawdzam i wszystko jest jak należy... a mimo to, nadal jest błąd... Już mi łeb pęka ._.
Jeśli to coś zmieni, to mogę to wrzucić na serwer i pokazać.

0

zrób sobie dumpa z INSERTa, porównaj czy na pewno hasło się dobrze zapisuje. albo w phpmyadmin spróbuj wybrać tego użytkownika

1

string(95) "INSERT INTO user_account (username, password, join_date) VALUES ('twarz', SHA('twarz'), NOW());" konto zostało poprawnie utworzone

To zostaje wyświetlone.
Jeśli to coś zmieni, to:

Działa! Postawiłem tabelę od nowa, taką samą bo przekopiowałem z pliku sobie który zapisałem i loguje mnie... Nie mam pojęcia jakim cudem z tego samego kodu działa :o
Dzięki wszystkim za pomoc!

0

masakra, zaznaczasz pole username a z row'u chcesz wyciągać user_username

                  $query = "SELECT user_id, **__username__** FROM user_account WHERE username = '$user_username' AND password = SHA('$user_password')";
                    $data = mysqli_query($dbc, $query);

                    if(mysqli_num_rows($data) == 1)
                    {
                            $row = mysqli_fetch_array($data);
                            $_SESSION['user_id'] = $row['user_id'];
                            $_SESSION['user_username'] = $row['**__user_username__**'];
                            setcookie('user_id', $row['user_id'], time() + 3600);
                            setcookie('user_username', $row['**__user_username__**'], time() + 3600);
                            $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
                            header('Location: ' . $home_url);
                    }
0

A gdzie ja Ci wyciągam z row "user_username"? Pobrałem do $ posta i pobranego posta wrzucam i sprawdzam, czy się zgadza z którymś z bazy. Kod działa, tak jak napisałem, błąd był z bazą danych, jak ją wrzucałem, to coś posrałem widocznie.

1

nie zrozumiałeś mojego przekazu zobacz jakie dałeś pola dla SELECT w zapytaniu i zobacz jakie chcesz używać pola do wyciągania danych z SQL'a w $row jest to user_username i username jeżeli twoja baza wygląda tak jak kod to życzę ci powodzenia, jak dalej nie widzisz swoich błędów to uważnie przestudiuj kod który ci zapodałem tam podkreśliłem i pogrubiłem... w kodzie możesz mieć więcej takich pomyłek

0

Napisałem, że problem został rozwiązany, a co do kodu, to wszystko działa dobrze, kolejny raz powtarzam. Poza tym, bazowałem na przykładzie książkowym i jeśli przez 4 lata nikt nie zwrócił na to uwagi, to dziwne, że teraz nagle odnalazłeś ten problem.

0

@hzmzp ma rację, zapewnie nieświadomie poprawiłeś ten błąd popełniony przy przepisywaniu kodu, magicznie się nie naprawiło.

Temat zamykam na prośbę autora wątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1