Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Nie wyświetlanie pierwszego polecenia
xSebaPL
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Witam, mam taki mały problem. Otóż nie mam pojęcia dlaczego nie wyświetla mi tylko pierwszej frazy z listy wyszukiwanych:

tak wygląda kod:
  1. $n = count($movies);
  2. for ($i=0;$i<$n; $i++) {
  3. echo $movies[$i].'<br>';
  4. $moviesg = mysql_query("SELECT * FROM movies WHERE `NAME`='".$movies[$i]."'");
  5. if(mysql_num_rows($moviesg)>0) {
  6. $option = mysql_fetch_assoc($moviesg);
  7. echo '<a href="../movies.php?v='.$option['ID'].'"><img id="titlesMain" src="../titlepages/'.$option['ID'].'.jpg" /></a>';
  8. } else {
  9. echo 'Wystąpił błąd z przyczyn niewyjaśnionych<br>';
  10. }
  11. }
  12. } else {


A więc tak, działa to tak że nie wiedząc czemu nie wyświetla mi pierwszego wyniku(wtedy zwraca else), natomiast wszystkie kolejne frazy wyszukiwania normalnie się wyświetlają. Cokolwiek bym nie wpisał tylko pierwsza zwraca else(że nie ma wyników z bazy danych). sad.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
KsaR
post
Post #2





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


  1. foreach ($movies as $v)
  2. {
  3. echo $v,'<br>';
  4. $moviesg = mysql_query("SELECT `ID` FROM `movies` WHERE `NAME`='".$v."'");
  5. if (mysql_num_rows($moviesg)) {
  6. $option = mysql_fetch_assoc($moviesg);
  7. echo '<a href="../movies.php?v='.$option['ID'].'"><img id="titlesMain" src="../titlepages/'.$option['ID'].'.jpg" /></a>';
  8. } else {
  9. echo 'Wystąpił błąd z przyczyn niewyjaśnionych<br>';
  10. }
  11. }


Ten post edytował KsaR 30.01.2016, 06:56:17


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Zamienienie kodu na twój nic nie zmieniło... Dalej to samo ;( Okey może wyjaśnie dokładniej jaki jest problem.


Na zdjęciu widać że nie wiedząc czemu nie wyświetla tylko pierwszego rekordu
Go to the top of the page
+Quote Post
markuz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Pokaż wyniki dla:
  1. var_dump($movies);

oraz


--------------------
Go to the top of the page
+Quote Post
Malukaz
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 4
Dołączył: 16.04.2009

Ostrzeżenie: (10%)
X----


po 1 DLACZEGO HTML Z PHP ohno-smiley.gif

po 2 rozumiem, że funkcje do zapytań sqlowych to juz szczyt sobie napisać lepiej purem jechać...

po 3 w pierwszym zapytaniu wchodzi ci w elsa >.< i pluje swietny komunikat na temat niewyjaśnionych przyczyn

po 4 sprawdz co sie kryje pod " $movies[0] "

po 5 Czy tak trudno jest zdebugować samego siebie ?
Go to the top of the page
+Quote Post
xSebaPL
post
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Heh a więc tak, markuz:

zwraca mi tak:
  1. array(3) { [0]=> string(12) "Kac Vegas" [1]=> string(10) "Millerowie" [2]=> string(19) "Szybcy i wsciekli 7" }// To zwraca $movies


Tu znalazłem błąd bo jakimś cudem tylko w pierwszym jest o 3 nie wiadomo jakie znaki więcej...

Raczej nie powoduje tego funkcja explode()
  1. $movies = explode(",", $moviestr);


ponieważ wyświetliłem $moviestr też w var_dump i zwróciło mi to:
  1. string(43) "Kac_Vegas,Millerowie,Szybcy_i_wsciekli_7"

czyli znowu jakieś nadprogramowe znaki. Tyle że przepuszczam to przez funkcje trim():
  1. $moviestr = trim($moviestr);

Dlatego nie powinno być żadnych białych znaków w stringu... więc nie wiem o co chodzi sad.gif
Go to the top of the page
+Quote Post
markuz
post
Post #7





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Może tam siedzi jakiś html? albo inny znacznik typu <costam>, zrób jeszcze raz var_dump na ten array $movies i wejdź w źródło strony i dopiero skopiuj wynik. Albo zmień $moviestr na:
  1. $moviestr = trim(strip_tags($moviestr));

i daj znać czy pomogło.

Ten post edytował markuz 31.01.2016, 15:09:42


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Heh, nothing has changed sad.gif

Próbowałem dodać jeszcze kolejnych rzeczy do sprawdzania:
  1. $moviestr = trim(strip_tags(stripslashes(htmlspecialchars($moviestr))));


But after all there was nothing new, the result was still the same sad.gif
Go to the top of the page
+Quote Post
markuz
post
Post #9





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


A dlaczego w $moviestr masz _ a potem spacje? Robisz jakiś str_replace? Pokaż całość kodu.

Zrób też na $moviestr takie coś i pokaż wynik (zobaczysz wtedy każdy znak w postaci kodu ASCII):
  1. for($i = 0; $i < strlen($moviestr); $i++)
  2. echo $moviestr[$i] . " = " . ord($moviestr[$i]) . PHP_EOL;


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #10





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Ok, aktualny kod
  1. <?
  2. include("config.php");
  3. db_connect();
  4. if (isset($_GET['movies'])) {
  5. $moviestr = $_GET['movies'];
  6. $moviestr = str_replace('[', '', $moviestr);
  7. $moviestr = str_replace(']', '', $moviestr);
  8. $moviestr = str_replace('"', '', $moviestr);
  9. $moviestr = trim(strip_tags(stripslashes(htmlspecialchars($moviestr))));
  10. //echo var_dump($moviestr);
  11. $movies = explode(",", $moviestr);
  12. //echo "1:".var_dump($movies)."<br>";
  13. for($i = 0; $i < strlen($moviestr); $i++) {
  14. echo $moviestr[$i] . " = " . ord($moviestr[$i]) . PHP_EOL;
  15. }
  16. $n = count($movies);
  17. for ($i=0;$i<$n; $i++) {
  18. //echo $movies[$i].' ';
  19. $moviesg = mysql_query("SELECT * FROM movies WHERE `NAME`='".$movies[$i]."'");
  20. //echo "2:".var_dump(mysql_num_rows($moviesg))."<br>";
  21. //echo "3:".var_dump(mysql_fetch_assoc($moviesg))."<br>";
  22. if(mysql_num_rows($moviesg)>0) {
  23. $option = mysql_fetch_assoc($moviesg);
  24. echo '<a href="../movies.php?v='.$option['ID'].'"><img id="titlesMain" src="../titlepages/'.$option['ID'].'.jpg" /></a>';
  25. } else {
  26. echo 'Wystąpił błąd z przyczyn niewyjaśnionych ';
  27. }
  28. }
  29. } else {
  30. $moviesg = mysql_query("SELECT * FROM movies ORDER BY UPLDATE");
  31. while($option = mysql_fetch_assoc($moviesg)) {
  32. echo '<a href="../movies.php?v='.$option['ID'].'"><img id="titlesMain" src="../titlepages/'.$option['ID'].'.jpg" /></a>';
  33. }
  34. }
  35. db_close();
  36. ?>



A po dodaniu tego for i echo wyświetla takie dziwne coś:
Kod
? = 239 ? = 187 ? = 191 K = 75 a = 97 c = 99 _ = 95 V = 86 e = 101 g = 103 a = 97 s = 115


Z tego co tu widać, to tam są jakieś 3 znaki zapytania w czarnych kwadratach questionmark.gif

Ten post edytował xSebaPL 31.01.2016, 23:44:46
Go to the top of the page
+Quote Post
KsaR
post
Post #11





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


http://scriptun.com/php/online/chr
Wpisz te numerki tu. To odkryja sie ukryte znaki ;d... Najlepiej to zrob update tego 1 rekordu przepisujac recznie nazwe od nowa


--------------------
Go to the top of the page
+Quote Post
markuz
post
Post #12





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


@KsaR on to pobiera z $_GET

Teraz xSebaPL powiedz, w jaki sposób wchodzisz na tą podstrone tzn. skąd się bierze wartość $_GET['movies']?


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #13





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Cytat
Najlepiej to zrob update tego 1 rekordu przepisujac recznie nazwe od nowa


Jak masz na myśli w bazie danych to tak zrobiłem i nie zadziałało. Więc może te znaczki się gdzieś w kodzie dodają.

No to spróbowałem dodać coś takiego na początku:
  1. $moviestr = str_replace('?', '', $moviestr);
  2. $moviestr = str_replace('?', '', $moviestr);
  3. $moviestr = str_replace('?', '', $moviestr);


Ale też, no effects...

EDIT:
Bieże się z kodu js:
  1. $.get( "functions/getMovieList.php", {keyword: keyword})
  2. .done(function(data) {
  3. var pageStuff=$("#pageStuff");
  4. pageStuff.empty();
  5. //$.post('../movieList.php', {movies: data})
  6. //$pagestuff.load("../movieList.php");
  7. $.get( "../movieList.php", {movies: data})
  8. .done(function(gotPage) {
  9. pageStuff.html(gotPage);
  10. });
  11. });


Ten post edytował xSebaPL 1.02.2016, 00:03:30
Go to the top of the page
+Quote Post
markuz
post
Post #14





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


To teraz pokaż plik getMovieList.php


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #15





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


  1. include("../config.php");
  2. if (!isset($_GET['keyword'])) {
  3. die();
  4. }
  5.  
  6. $keyword = $_GET['keyword'];
  7. $keyword = str_replace(' ', '_', $keyword);
  8. $data = searchForKeyword($keyword);
  9. echo json_encode($data);


A to prowadzi do:
  1. function searchForKeyword($keyword) {
  2. $db = getDbConnection();
  3. $stmt = $db->prepare("SELECT NAME as movie FROM `movies` WHERE NAME LIKE ? ORDER BY movie");
  4.  
  5. $keyword = $keyword . '%';
  6. $stmt->bindParam(1, $keyword, PDO::PARAM_STR, 100);
  7.  
  8. $isQueryOk = $stmt->execute();
  9.  
  10. $results = array();
  11.  
  12. if ($isQueryOk) {
  13. $results = $stmt->fetchAll(PDO::FETCH_COLUMN);
  14. } else {
  15. trigger_error('Error executing statement.', E_USER_ERROR);
  16. }
  17.  
  18. $db = null;
  19.  
  20. return $results;
  21. }


Tak wiem, mój kod to poplątane spagetti. Zastanawiałem się w sumie czy tu nie popełniłem jakiegoś błędu, ale znalazłem to w poradniku w internecie i DZIAŁAŁO, więc to było wystarczająco by użyć tego w kodzie. Mam na myśli to 'PDO'

Okej, zrobiłem żeby działało, dzięki za pomoc ;D Po prostu dodałem takie coś:
  1. $moviestr = str_replace(chr('239'), '', $moviestr);
  2. $moviestr = str_replace(chr('187'), '', $moviestr);
  3. $moviestr = str_replace(chr('191'), '', $moviestr);


i działa, znaczy swoje zadanie spełnia biggrin.gif Pomoce rozdane wink.gif

Ten post edytował xSebaPL 1.02.2016, 00:22:54
Go to the top of the page
+Quote Post
markuz
post
Post #16





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


To teraz, w tym pierwszym pliku zrób tak:

  1. $moviestr = json_decode($_GET['movies']);
  2. var_export($moviestr);


I pokaż wyniki.
Jeżeli nadal będzie problem, to:
- Sprawdź kodowanie każdego pliku, powinno być w UTF-8 (bez BOM)
- Sprawdź czy przed <?php w rozpoczęciach pliku nie siedzi żadna spacja czy cuś
- Sprawdź kodowanie bazy oraz tabeli, powinno być np. w utf8_unicode_ci
- Jak zwracasz JSON (np. w pliku getMovieList.php) dodaj:
  1. header('Content-type: application/json');

przed echo.

PS. Nie usunałeś przyczyny tylko poprawiłeś skutek - błąd będzie nadal Ci się przypominał - ale jak chcesz smile.gif

Ten post edytował markuz 1.02.2016, 00:25:37


--------------------
Go to the top of the page
+Quote Post
xSebaPL
post
Post #17





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Nie wierze, no ku*wa nie wierze ohmy.gif

Jak napisałeś sprawdź kodowanie, no to dałem to maskowanie w /* */ i sprawdziłem kodowanie.

Okazało się że to wszystko to była wina kodowania a ja niepotrzebnie się stresowałem sad.gif i jeszcze marnowałem wasz ceny czas(pamiętajcie czas to pieniądz haha.gif)

Otóż w każdym pliku nie miałem tego BOM, że miałem ustawione zwykłe UTF-8

Oraz w bazie danych miałem general zamiast unicode. haha.gif

Honestly I'm sorry for wasting your time wink.gif It was all my fault haha.gif
Go to the top of the page
+Quote Post
com
post
Post #18





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Cytat
Otóż w każdym pliku nie miałem tego BOM, że miałem ustawione zwykłe UTF-8

Właśnie miałeś BOM, bo zwykłe utf-8 ma bom, który powoduje problemy w PHP wink.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 05:08