Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z pętlą for
Forum PHP.pl > Forum > Przedszkole
mefistofeles
Prosty skrypt do pobierania ilości wyników w google na daną frazę:

  1. <?
  2. echo '<BR><form method="post">
  3. <B>Slowo:</B>
  4. <textarea rows="5" cols="20" name="keyword">
  5. </textarea><br>
  6. <input type="submit" class="buttonlog" name="submit" value="Sprawdz">
  7. </form><BR>';
  8.  
  9. $key=$_POST['keyword'];
  10. $key = explode("\n",$key);
  11. $cntk=count($key);
  12.  
  13. echo $cntk;
  14. //print_r($key);
  15.  
  16. for ($i=0;$i<=$cntk;$i++) {
  17.  
  18. $key[$i]=(explode(' ',$key[$i]));
  19. //print_r($key[$i]);
  20.  
  21.  
  22. $url = 'http://www.google.pl/search?q='.$key[$i][0].'+'.$key[$i][1].'+'.$key[$i][2].'+'.$key[$i][3].'+'.$key[$i][4].'&hl=pl&prmd=mivl&source=lnt&tbs=lr:lang_1pl&lr=lang_pl&sa=X';
  23. echo $url;
  24.  
  25. $ch_e=curl_init($url);
  26. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.0.6');
  27. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  28. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  29. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  30. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  31. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  32. curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  33. curl_setopt($ch_e, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
  34. $nazwa=curl_exec($ch_e);
  35. //var_dump($nazwa);
  36. $link = '/<div id=resultStats>(.+?)<nobr>/ims';
  37.  
  38. preg_match_all($link, $nazwa, $wynik);
  39.  
  40. $wynik = $wynik[0][0];
  41. echo $wynik;
  42. }



Problem polega na tym że
echo $url; wyświetla się tyle razy ile jest słów wpisanych do formularza, natomiast
echo $wynik; wyświetla się tylko raz dla ostatniego słowa wpisanego w formularzu mimo że jest w tej samej pętli!

Dlaczego tak się dzieje questionmark.gif
yevaud
upewnij sie czy czasem $wynik nie jest pusty podczas wszystkich innych przebiegow petli winksmiley.jpg
mefistofeles
Nie powinien być pusty bo schemat jest ciągle taki sam, więc jak w jednym wypadku wyciąga to co trzeba to powinien to zrobić tyle razy ile trzeba
a on to robi tylko raz dla ostatniego słowa bez względu na ich ilość.
nospor
$wynik = $wynik[0][0];
Czy ten kod naprawde nie daje ci do myslenia?
Daj sobie w tej petli taki kod:
  1. echo 'Przed:';print_r($wynik);
  2. $wynik = $wynik[0][0];
  3. echo 'Po:';print_r($wynik);

Moze tym razem cię olsni winksmiley.jpg
mefistofeles
Nospor, nie o to chodzi.

Chodzi o to, że przez dzielenie za pomocą explode,
do wszystkich wyników oprócz ostatniego dodaje się znak nowej linii przez co adres wygląda tak:
http://www.google.pl/search?q=jeden ++++&hl=pl&prmd=mivl&source=lnt&tbs=lr:lang_1pl&lr=lang_pl&sa=X
(po jeden jest spacja)

Oczywiście żeby nie było zbyt różowo nie udaje mi się usunąć tego znaku za pomocą:

$key[$i] = str_replace('\n', '', $key[$i]);


Jak więc ją usunąć ?

Próbowałem usunąć znaki nowej linii za pomocą trim ale to też nie działa.

W wersji podstawowej ze znakami nowej linii mam taki wynik:

  1. http://www.google.pl/search?q=jeden ++++&hl=pl&prmd=mivl&source=lnt&tbs=lr:lang_1pl&lr=lang_pl&sa=Xarray(2) { [0]=> array(0) { } [1]=> array(0) { } }
  2. http://www.google.pl/search?q=dwa ++++&hl=pl&prmd=mivl&source=lnt&tbs=lr:lang_1pl&lr=lang_pl&sa=Xarray(2) { [0]=> array(0) { } [1]=> array(0) { } }
  3. http://www.google.pl/search?q=trzy++++&...ay(2) { [0]=> array(1) { [0]=> string(52) "
  4. Około 26,900,000 wyników" } [1]=> array(1) { [0]=> string(26) "Około 26,900,000 wyników" } }
  5. http://www.google.pl/search?q=++++&hl=...ay(2) { [0]=> array(0) { } [1]=> array(0) { } }


Czyli mam spacje po 'jeden' i 'dwa' natomiast jak użyje funkcji trim tam gdzie jest znak nowej linii to nic się nie zmienia.

Jak więc usunąć te niepotrzebne białe znaki questionmark.gif
tehaha
aby usunąć znaki nowe linii usuń: "\r\n", "\n", "\r"
Fifi209
http://en.wikipedia.org/wiki/Newline
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.