• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z php (odc.2)

0 głosów
1,364 wizyt
pytanie zadane 24 lipca 2015 w PHP przez Skill Użytkownik (910 p.)

Witam, gdy przeszłem do drugiego odcinka kursu php pojawił się błąd kiedy wpisuję login: adam a hasło: qwerty

pojawia się pusta strona a powinno pojawić się adam siedziałem 3.5 godz. nat tym ale błędu nie znalazłem

Kod zaloguj.php

<?php
require_once "connect.php";
$connect = @new mysqli($host, $db_user, $db_password, $db_name);
if ($connect->connect_errno!=0)
{
	echo "Error:".$connect->connect_errno;
}
else
{
	$login = $_POST["login"];
	$pass = $_POST["pass"];
	$sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$pass";
	if ($result = $connect->query($sql))
	{
		$how_many_users = $result->num_rows;
		if ($how_many_users>0)
		{
			$poem = $result->fetch_assoc();
			$user = $poem["user"];
			echo $user;
		}
		else 
		{
			
		}
	}
	$connect->close();
}
?>

 

4 odpowiedzi

+1 głos
odpowiedź 25 lipca 2015 przez Comandeer Guru (607,980 p.)

Podstawa przy pracy z bazą: obsługuje się każdy błąd i żadnego nie wycisza. Jeśli masz zapytanie, to sprawdzaj czy nie rzuciło błędu (mysqli_error!). Jakbyś to robił, to już byś znalazł błąd w zapytaniu (nie powiem jaki, bo wówczas nie użyjesz mysqli_error tylko poprawisz wskazany błąd…).

Dodatkowo warto rzucić okiem tutaj i zobaczyć czy mamy włączone wyświetlanie błędów: http://forum.php.pl/Jak_poprawnie_zadac_pytanie_oraz_przygotowac_srodowisko_pracy_t146215.html

0 głosów
odpowiedź 24 lipca 2015 przez Boshi VIP (100,240 p.)

Więc siedź dalej skoro wyciszasz błędy operatorem @

require_once "connect.php";
$connect = @new mysqli($host, $db_user, $db_password, $db_name);

to powinno iść całę do osobnego pliku.

sprawdziłes co zwraca  ci  zmienna result?

 

komentarz 24 lipca 2015 przez Skill Użytkownik (910 p.)

Czyli mam ten kod:

require_once "connect.php";
$connect = @new mysqli($host, $db_user, $db_password, $db_name);

wstawić do osobnego pliku i połączyć require_once

komentarz 24 lipca 2015 przez Boshi VIP (100,240 p.)
tak i wywal @
komentarz 24 lipca 2015 przez Skill Użytkownik (910 p.)

Zrobiłem tak ale problem pozostaje taki sam crying

komentarz 24 lipca 2015 przez SebastianGomularz Dyskutant (9,370 p.)
A jaki błąd ci wywala po usunięciu tego?
komentarz 24 lipca 2015 przez Skill Użytkownik (910 p.)
Żaden mi nie wyskaluje
komentarz 24 lipca 2015 przez efiku Szeryf (75,160 p.)
To pewno masz wyłączone wyświetlanie błędów.

Dodaj sobie do tego wydzielonego pliku do testów:

error_reporting(E_ALL);
ini_set("display_errors",1);
komentarz 25 lipca 2015 przez Skill Użytkownik (910 p.)

Ok teraz mój kod wygląda tak:

<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
require_once "connect1.php";
if ($connect->connect_errno!=0)
{
	echo "Error:".$connect->connect_errno;
}
else
{
	$login = $_POST["login"];
	$pass = $_POST["pass"];
	$sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$pass";
	if ($result = $connect->query($sql))
	{
		$how_many_users = $result->num_rows;
		if ($how_many_users>0)
		{
			$poem = $result->fetch_assoc();
			$user = $poem["user"];
			echo $user;
		}
		else 
		{
			
		}
	}
	$connect->close();
}
?>

a okno mojej przeglądarki tak:

komentarz 25 lipca 2015 przez SebastianGomularz Dyskutant (9,370 p.)
A daj w else jakiś tekst do wyświetlenia funkcja echo
komentarz 25 lipca 2015 przez Boshi VIP (100,240 p.)
Sprawdziłęś co zwraca result?  pomijając to co krecik nizej napisał?  oraz sql inj.
0 głosów
odpowiedź 25 lipca 2015 przez _coder_ Gaduła (3,480 p.)
W takich przypadkach, jak już powiedzieli inni, najczęstrzym problemem jest niewłaściwe zapytanie SQL, czyli syntax error. Aby najszybciej to zdebugować i nie tracić czasu na szukanie brakującego czegoś w zapytaniu, ja po prostu printuje SQLa na ekran (w Twoim przykładzie print $sql;), później to kopiuje i wklejam do okna zapytania w phpmyadmin i odpalam. Tam dokładnie widać w czym jest problem. U Ciebie pewnie jest to brak pojedynczego apostrofa po $pass.
komentarz 25 lipca 2015 przez Skill Użytkownik (910 p.)

Problem rozwiązany ale pojawia się drugi

Kiedy wpisze kod:

require_once "connect.php";
$connect = @new mysqli($host, $db_user, $db_pass, $db_name);

wyskakuje błąd

Parse error: syntax error, unexpected '$db_user' (T_VARIABLE)

komentarz 25 lipca 2015 przez _coder_ Gaduła (3,480 p.)
Jesteś pewien, że ten error pochodzi z tej linijki którą tu wkleiłeś? Masz małpe przed, więc w tym miejscu nie powinien parser wyrzucać błędów. Może jest coś nie tak w pliku connect.php?
–1 głos
odpowiedź 25 lipca 2015 przez krecik1334 Maniak (58,390 p.)

Spróbuj to jakoś zdebugować po ifach, zobaczysz które fragmenty kodu się wykonują a które nie. Bardzo możliwe że fragment po zapytaniu wcale się nie wykonuje, lub $user ma wartość NULL. Spróbuj powstawiać jakieś dodatkowe echa żeby to sprawdzić np.

<?php
require_once "connect.php";
$connect = @new mysqli($host, $db_user, $db_password, $db_name);
if ($connect->connect_errno!=0)
{
    echo "Error:".$connect->connect_errno;
}
else
{
    $login = $_POST["login"];
    $pass = $_POST["pass"];
    $sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$pass";
    if ($result = $connect->query($sql))
    {
        echo "foobar";
        $how_many_users = $result->num_rows;
        if ($how_many_users>0)
        {
            $poem = $result->fetch_assoc();
            $user = $poem["user"];
            echo "foo";
            echo $user;
        }
        else
        {
             echo "bar";
        }
    }
    $connect->close();
}
?>

 

komentarz 25 lipca 2015 przez krecik1334 Maniak (58,390 p.)

Zmień treść zapytania SQL na tą:

SELECT * FROM uzytkownicy WHERE user=$login AND pass=$pass

na 99% miałeś błąd w syntaxie.

http://www.piliapp.com/mysql-syntax-check/

komentarz 25 lipca 2015 przez Comandeer Guru (607,980 p.)
Twoje jest tym bardziej błędne… Każdy string musi być otoczony apostroframi/cudzysłowami - jedynie przy prepared statements robi to za nas baza.
komentarz 25 lipca 2015 przez krecik1334 Maniak (58,390 p.)
W takim razie on po prostu ma niedomknięty apostrof w zapytaniu może to jest przyczyną.

Podobne pytania

0 głosów
2 odpowiedzi 831 wizyt
pytanie zadane 9 maja 2017 w PHP przez rubiikk Obywatel (1,900 p.)
0 głosów
2 odpowiedzi 352 wizyt
pytanie zadane 28 grudnia 2015 w SQL, bazy danych przez ormu16 Gaduła (4,980 p.)
0 głosów
3 odpowiedzi 1,408 wizyt
pytanie zadane 23 października 2016 w PHP przez Maciejjy Nowicjusz (120 p.)

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,225 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...