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

question-closed System newsów w php - problem

VPS Starter Arubacloud
–2 głosów
738 wizyt
pytanie zadane 20 marca 2016 w PHP przez Mateusz11 Pasjonat (22,910 p.)
przywrócone 29 marca 2016 przez Arkadiusz Waluk

Cześć, napisałem prosty system newsów w php, i po wykonaniu, skryptu, wywala mi błąd, o braku newsa, mimo że znajduje się on w bazie danych(ręcznie go dodałem) Oto kod:

<?php
if((isset($_GET['article'])))
{
	$article = $_GET['article'];
	try
	{
		$connect = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
		if($connect->connect_errno!=0)
		{
			echo 'Wystąpił błąd z bazą danych!';
			exit();
		}
		$ile_a = $connect->query('SELECT * FROM article WHERE id=1');
		$ile = $ile_a->num_rows;
		if($ile>0)
		{
			$wiersz = $ile_a->fetch_assoc();
			
			$_SESSION['id'] = $wiersz['id'];
			$_SESSION['author'] = $wiersz['author'];
			$_SESSION['title'] = $wiersz['title'];
			$_SESSION['text'] = $wiersz['text'];
			$_SESSION['date'] = $wiersz['date'];
			
			$wiersz->free_result();
			
			$connect->close();
			
			echo $_SESSION['id'];
			echo $_SESSION['author'];
			echo $_SESSION['title'];
			echo $_SESSION['text'];
			
		}
		else
		{
			echo 'NIE MA TAKIEGO ARTYKUŁU!';
			EXIT();
		}
	}
	catch(Exception $e)
	{
		echo 'Wystąpił błąd z bazą danych!';
		exit();
	}
}
else
{
	echo 'Nie ma takiego artykułu';
	exit();
}
?>

Kod URL: nazwastrony.pl/index.php?page=article&article=1

 

Pozdrawiam

komentarz zamknięcia: Wystarczyło dodać pętle while

4 odpowiedzi

+4 głosów
odpowiedź 20 marca 2016 przez Arkadiusz Waluk Ekspert (287,550 p.)
  • if((isset($_GET['article'])))

    po co tyle nawiasów?

  • nazwy zmiennych - raz $connect a raz $ile - to się zdecyduj albo po polsku albo po angielsku (oczywiście po angielsku najlepiej), takie mieszanie wygląda beznadziejnie

  • SELECT * jest złe

  • gdzie jest zabezpieczenie przed sql injection?

  • skąd i po co tam ta @?

  • po co pchać dane artykułu do sesji? Nie rozumiem zupełnie

  • po co ten try...catch?

  • "PS. Nie używam PDO, bo mi się nie chce xDDD" - tego nie skomentuję bo to jest totalnie żenujące tłumaczenie...

Masz na sztywno 1 w WHERE, ale skoro mówisz że taki artykuł istnieje to powinno działać. Proponuję więc zrobić prostą diagnostykę w postaci wpisania w każde echo innych komunikatów błędów. Na tej podstawie będziesz wiedział na którym się wysypuje i sprawdzisz dlaczego ten konkretny if zwraca false.

EDIT bo dopiero zobaczyłem komentarz

Wyskakiwał mi  NOTICE to postanowiłem wyciszyć dziada xD

To jest ŻENUJĄCE.... 

1
komentarz 21 marca 2016 przez event15 Szeryf (93,790 p.)

Arek moja krew! yes

1
komentarz 21 marca 2016 przez efiku Szeryf (75,160 p.)
Arek, jakby mnie ktoś pytał i szukał kogoś na praktyki jako programista to Cię polecę. Po prostu profesjonalne podejście. Nic tylko wyszlifować!

Nie przejmuj się, to, że ty próbujesz mu tłumaczyć standardy i ma to gdzieś - bo to widać jak się czyta odpowiedzi.  

http://www.php-fig.org/psr/psr-2/

Pamiętaj, to że piszesz jakieś kodziki nie oznacza, że jesteś programistą ;)

PDO to złoto, ale jak się jest w "strukturalnym" to co Ci po tym złocie :>

(Mnie zawsze zastanawia czemu ludzie piszą jakieś cmsy skoro nawet tak prostego zadania jak mój challange nie umieją zrobić :D )

Zasada jest taka, że jak piszemy coś swojego i nie zrobimy dobrego TDD to nie wykorzystujemy tego na produkcji :D
komentarz 21 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)
►Po wpisaniu tego zapytania do phpMyAdmin, znajduję ten rekord, więc zapytanie jest dobre

►Ten sposób z manuala tez nie dziala :(
komentarz 21 marca 2016 przez Arkadiusz Waluk Ekspert (287,550 p.)
Dziękuję bardzo panowie event15 i efik, Wasze słowa szczególnie dużo dla mnie znaczą. Uczę się i chcę być w tym jak najlepszy więc każda rada od was to coś bardzo cennego, wiecie ;)

swjaco11, coś musi być nie tak skoro wywala ten błąd, mysqli error nic nie zwraca? Pokaż jak i gdzie to wstawiłeś w kodzie, bo mam wątpliwości czy na pewno wstawiłeś i czy dobrze.
komentarz 21 marca 2016 przez Arkadiusz Waluk Ekspert (287,550 p.)
edycja 21 marca 2016 przez Arkadiusz Waluk

Ty tak poważnie wstawiłeś ten kod czy dla żartu? Jeśli poważnie to dam Ci jedną prostą radę... Zostaw to, skup się i wróć do samych podstaw PHP.

Gwarantuję iż to co wstawiłeś powyżej NIE MA PRAWA DZIAŁAĆ. Nie zamknięty try, nie ma catch, nie zamknięty if z linijki 13 (który z resztą jest bezsensowny bo już wyżej masz sprawdzenie połączenia)... Do tego wywołujesz $mysqli->error, a gdzie masz zdefiniowane $mysqli? U Ciebie to się nazywa $connect, nawet nie chciało Ci się sprawdzić co kopiujesz z manuala tylko zrobiłeś byle co żeby mi pokazać że niby coś wiesz...

No niestety nie udało się ;) Ale to nie mój problem, Twój kod, Twoja nauka. Ja to mogę tylko podsumować jednym słowem - żenada, totalna żenada.

EDIT: Kod powyżej o którym pisałem ukryłeś, niech będzie bo szkoda na to patrzeć, ale sensu ukrywania pytania nie widzę - uzyskałeś odpowiedzi i pomoc kilku użytkowników, po to jest forum, że pytania mają zostawać dla innych użytkowników i szukających mających podobny problem.

0 głosów
odpowiedź 20 marca 2016 przez Blacha Mądrala (5,960 p.)
A zapytanie do SQL jest na pewno dobrze, dawno nie bawiłem się z bazami ale wydaje mi się że dajesz warunek "id=1" dla wpisów w bazie a baza takich nie znajduje. Potrzeby ten warunek?
komentarz 20 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)

W właściwym kodzie jest WHERE id=$article 

się że dajesz warunek "id=1" a baza takich nie znajduje.

Sam dodałem w phpMyAdmin, taki rekord, więc na 100% musi tam być 

komentarz 20 marca 2016 przez Blacha Mądrala (5,960 p.)
A ta małpa przy zmiennej ile jest potrzeba?
komentarz 20 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)

Wyskakiwał mi  NOTICE to postanowiłem wyciszyć dziada xD

 

0 głosów
odpowiedź 20 marca 2016 przez jaca121212 Nałogowiec (40,760 p.)
usuń   @  przy  $ile = $ile_a->num_rows;

i spróbuj użyć pętli while zamiast for

mam rozumieć że wszystkie stare i nowe artykułu są w  tej samej bazie danych jeśli tak to tak myśle aby zrobić dodatkową kolumnę np news i ustawić 0 dla starszych a dla nowych 1. Za pomocą crona  sprawdzać kiedy dodany został artykuł. Jeśli upłynęło od dodania np.24 godziny to żeby zmienił zawartość kolumny news z 1 na 0.
komentarz 20 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)

mam rozumieć że wszystkie stare i nowe artykułu są w  tej samej bazie danych jeśli tak to tak myśle aby zrobić dodatkową kolumnę np news i ustawić 0 dla starszych a dla nowych 1. Za pomocą crona  sprawdzać kiedy dodany został artykuł. Jeśli upłynęło od dodania np.24 godziny to żeby zmienił zawartość kolumny news z 1 na 0.

Ale jedno pytanie... po co? 

usuń   @  przy  $ile = $ile_a->num_rows;

Czytasz komentarze?

 Wyskakiwał mi  NOTICE to postanowiłem wyciszyć dziada xD

 

komentarz 20 marca 2016 przez jaca121212 Nałogowiec (40,760 p.)
przywrócone 20 marca 2016 przez jaca121212
dlatego jeśli masz błąd to nie wyciszaj go tylko rozwiązuj go.Wklej ten błąd co ci wyskoczył
komentarz 20 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)

Błąd: "NIE MA TAKIEGO ARTYKUŁU!"

A więc nie znajduje rekordu w bazie:

        if($ile>0)
        {
            $wiersz = $ile_a->fetch_assoc();
             
            $_SESSION['id'] = $wiersz['id'];
            $_SESSION['author'] = $wiersz['author'];
            $_SESSION['title'] = $wiersz['title'];
            $_SESSION['text'] = $wiersz['text'];
            $_SESSION['date'] = $wiersz['date'];
             
            $wiersz->free_result();
             
            $connect->close();
             
            echo $_SESSION['id'];
            echo $_SESSION['author'];
            echo $_SESSION['title'];
            echo $_SESSION['text'];
             
        }
        else
        {
            echo 'NIE MA TAKIEGO ARTYKUŁU!';
            EXIT();
        }

 

komentarz 20 marca 2016 przez jaca121212 Nałogowiec (40,760 p.)
<?php
 $connect = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        if($connect->connect_errno!=0)
        {
            echo 'Wystąpił błąd z bazą danych!';
            exit();
        }
        $ile_a = $connect->query('SELECT * FROM article where  id=1');

while($wiersz=mysqli_fetch_array($ile_a)){ 

echo'<article id="wyswietlanie_tematu">';

echo $wiersz['id'];
echo"<br/>";
echo $wiersz['author'];
echo"<br/>";
echo $wiersz['title'];
echo"<br/>";
echo $wiersz['text'];
echo"<br/>";
echo $wiersz['date'];

echo"</article>";

}else
        {
            echo "NIE MA TAKIEGO ARTYKUŁU!";
           
        }
 
?>

To powinno ci pokazać ten artykuł  jeśli id=1 

komentarz 21 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)
Kod nie działa :(
0 głosów
odpowiedź 20 marca 2016 przez artur1989 Użytkownik (500 p.)
Czy jest to błąd o treści 'Nie ma takiego artykułu' z linii 49? Spróbuj uruchomić przez URL: nazwastrony.pl/index.php?article=1
komentarz 20 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)
Nie mogę bo w indexie mam switch`a więc nie da rady tak zrobić

Podobne pytania

0 głosów
1 odpowiedź 590 wizyt
pytanie zadane 13 listopada 2016 w PHP przez tiesto.ulic Obywatel (1,010 p.)
0 głosów
4 odpowiedzi 687 wizyt
pytanie zadane 5 sierpnia 2017 w PHP przez Bogusław Witek Początkujący (420 p.)
0 głosów
2 odpowiedzi 206 wizyt
pytanie zadane 10 kwietnia 2016 w PHP przez Eimens Maniak (69,240 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...