Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie wyświetlanie pierwszego polecenia
Forum PHP.pl > Forum > Przedszkole
xSebaPL
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
KsaR
  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. }
xSebaPL
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
markuz
Pokaż wyniki dla:
  1. var_dump($movies);

oraz
Malukaz
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 ?
xSebaPL
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
markuz
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.
xSebaPL
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
markuz
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;
xSebaPL
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
KsaR
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
markuz
@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']?
xSebaPL
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. });
markuz
To teraz pokaż plik getMovieList.php
xSebaPL
  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
markuz
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
xSebaPL
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
com
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.