Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Allowed memory size. O co chodzi?
Forum PHP.pl > Forum > Przedszkole
thomson89
Czyli o co chodzi w tym błędzie, nigdy się z nim nie spotkałem. Proszę o pomoc!

Kod
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 133955563 bytes) in "XXX" on line 28

  1. $query = 'SELECT * FROM `dzialy`';
  2. $results = mysql_query($query);
  3. $tableWithResults = mysql_fetch_assoc($results);
  4.  
  5. $resultWithOptions = '<option value="nic">-- wybierz --</option>';
  6. while($result = $tableWithResults){
  7. $resultWithOptions .= '<option>'.$result['nazwa'].'</option>'; //28 linia
  8. }


EDIT: Wyciąłem ścieżkę pliku.
morswin
skrypt wyczerpał limit przyznanej mu pamięci. Wskaż nam 28 linijkę kodu
erix
No Twój skrypt zżera za dużo pamięci, po prostu.

Użyj czasem translatora...

Diagnoza? Po takim skrawku kodu nie da się nic jednoznacznie powiedzieć.
thomson89
coś więcej

  1. <div class="formularz">
  2. <?php
  3. $_SESSION['co'] = $_POST['co'];
  4. switch ($_POST['co']){
  5. //dzialy
  6. case 'dzialy':
  7. ?>
  8. <form action="panel/index.php?akcja=tresc,dodaj,sprawdz" method="post">
  9. <font size="6" face="Monotype Corsiva" color="#753334"><center>Treść strony dodaj: dział</center></font><br>
  10. Nazwa:<br>
  11. <input type="text" name="nazwa"><br>
  12. Znacznik <i>&lt;title&gt;</i>:<br>
  13. <input type="text" name="title"><br>
  14. <br>
  15. <input type="submit" class="button" value="Dodaj">
  16. </form>
  17. <?php
  18. break;
  19.  
  20. //podstrony
  21. case 'podstrony':
  22. $query = 'SELECT * FROM `dzialy`';
  23. $results = mysql_query($query);
  24. $tableWithResults = mysql_fetch_assoc($results);
  25.  
  26. $resultWithOptions = '<option value="nic">-- wybierz --</option>';
  27.  
  28. while($record = $tableWithResults){
  29. $resultWithOptions .= '<option>'.$record['nazwa'].'</option>'; //28 linia
  30. }
  31.  
  32. ?>
  33. <font size="6" face="Monotype Corsiva" color="#753334"><center>Treść strony dodaj: podstronę</center></font><br>
  34. Nazwa:<br>
  35. <input type="text" name="nazwa"><br>
  36. Dział:<br>
  37. <select name="dzial">
  38. <?php print $resultWithOptions; ?>
  39. </select>
  40. <br><br>
  41. <input type="submit" class="button" value="Dodaj">
  42. <?php
  43. break;
  44.  
  45. //teksty
  46. case 'teksty':
  47. ?>
  48. <div id="ostrzezenie" style="color: black;">
  49. <img src="panel/images/warning_48.png" align="left">
  50. <font size="4"> Budowa trwa!
  51. </font></div>
  52. <?php
  53. break;
  54. }
  55. ?>
  56. </div>


PS: nie wiem jak linijkę wyrożnić
Wicepsik
Ile działów masz w bazie? Myślę że pętla while się zapętla i do zmiennej resultWithOptions nie można dopisać tekstu bo brak pamięci.
  1. print_r($tableWithResults);

I zobacz ile masz wyników.
thomson89
Jest jeden dział, print_r(); zwraca jeden rekord (w trzech kolumnach: id, nazwa, opcje).
Kod
Array ( [id] => 1 [nazwa] => Strona główna [opcje] => *** )


EDIT: Przyczyną zamieszania jest pętla. dałem tak i parser nie krzyczy:
  1. //while($record = $tableWithResults){
  2. $resultWithOptions .= '<option>'.$tableWithResults['nazwa'].'</option>';
  3. //}


EDIT 2:
  1. while($record = mysql_fetch_assoc($results)){
  2. $resultWithOptions .= '<option>'.$record['nazwa'].'</option>';
  3. }

Dałem tak i również nie ma blędu, ale też pierwszy rekord się nie wyświetla (wiem, bo dodałem drugi).

EDIT 3: Dodałem trzeci rekord, i wyświetliły się tylko dwa rekordy w liście select. ale o dziwo, usunąłem pierwszy rekord ze "strona główna" i odświeżyłem tamtą stronę. Pojawił się jeden rekord!!! Mimo, że w bazie są dwa. WTF!? wacko.gif
Kod
id     nazwa     nazwa_title
3    Biżuteria    bizuteria
4    Pamiątki sakralne    pamiatki


POMOCY!
erix
~thomson89, zacznij może od lektury jakiegoś kursu, gdyż skoro nie widzisz różnicy między:
  1. $tableWithResults = mysql_fetch_assoc($results);
  2.  
  3. $resultWithOptions = '<option value="nic">-- wybierz --</option>';
  4.  
  5. while($record = $tableWithResults){


a
  1. while($record = mysql_fetch_assoc($results)){
  2. $resultWithOptions .= '<option>'.$record['nazwa'].'</option>';
  3. }

To naprawdę nie mamy o czym rozmawiać. Wiesz, co robi mysql_fetch_assoc? Bo sądząc po Twoich listingach - nie masz o niej zielonego pojęcia i zadajesz pytania, które i w przedszkolu nie przystoją.

Cytat
EDIT 3: Dodałem trzeci rekord, i wyświetliły się tylko dwa rekordy w liście select. ale o dziwo, usunąłem pierwszy rekord ze "strona główna" i odświeżyłem tamtą stronę. Pojawił się jeden rekord!!! Mimo, że w bazie są dwa. WTF!?

Patrz: wyżej.

Cytat
Myślę że pętla while się zapętla i do zmiennej resultWithOptions nie można dopisać tekstu bo brak pamięci.

Właśnie. Ale to jest praca domowa, bez której nawet nie ma co dalej pisać. Myślenie nie boli, a w tym miejscu wyłazi jego ewidentny brak.
Wicepsik
Cytat(darko @ 21.11.2009, 14:51:30 ) *
wykonujesz nieskończoną pętlę:

  1. while($record = $tableWithResults){
  2. $resultWithOptions .= '<option>'.$record['nazwa'].'</option>'; //28 linia
  3. }


daj:

  1. while($record == $tableWithResults) {
  2. $resultWithOptions .= '<option>'.$record['nazwa'].'</option>'; //28 linia
  3. }

wtf? sciana.gif


#erix
Nawet nie zauważylem złego użycia mysql_fetch_assoc smile.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.