Po krótkich testach chciałem zobaczyć jak będzie to wyglądało w internecie i wrzuciłem na swój serwer. Wypełniłem trochę danymi i się bawiłem i przez około 20 minut wszystko działało ładnie, po czym po którymś przesłaniu danych w formularzu pusta strona (biała). I tyle mi się wyświetla. Jak już łaskawie ukaże mi się formularz logowania to po zalogowaniu się dalej pusto.
Treść dziennika logów:
[Tue Jan 10 16:05:22 2012] [warn] [client 31.175.91.238] mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 66846721 bytes) in /ścieżka_do_folderu/plik_z_funkcjami_dołączonymi_do_skryptu on line 69
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 66846721 bytes) in /ścieżka_do_folderu/plik_z_funkcjami_dołączonymi_do_skryptu on line 69
Skrypt wygląda tak:
index.php
<?php { if(($_POST['username']==$form_user) && ($_POST['pass']==$form_pass)) { $_SESSION['logged'] = true; $_SESSION['login'] = $_POST['username']; } else { } } { include('db_select.inc'); // połączenie się z bazą include('funckje.php'); dodaj('typ1'); dodaj('typ2'); } else { <fieldset> <input class="dane" type="text" name="username" value="Login" onfocus="if (this.value == \'Login\') {this.value = \'\';}" onblur="if (this.value == \'\') {this.value = \'Login\';}" /> <input class="dane" type="password" name="pass" value="Hasło" onfocus="if (this.value == \'Hasło\') {this.value = \'\';}" onblur="if (this.value == \'\') {this.value =\'Hasło\';}" /> <input class="login-button" type="submit" value="Zaloguj"> </fieldset> <input class="hidden" type="hidden" value="1" name="check"> </form> '); } ?>
funkcje.php
<?php function cennik($rodzaj) { if($rodzaj == 'tpy1'){ $query_typ = 'SELECT * FROM typ;'; $query_kategoria = 'SELECT * FROM kategoria;'; } if($rodzaj == 'typ2') { $query_typ = 'SELECT * FROM typind;'; $query_kategoria = 'SELECT * FROM kategoria2;'; } $i = 0; $result_array[$i] = $result_row[1]; $result_array[$i+1] = $result_row[2]; $result_array[$i+2] = $result_row[3]; $i=$i+3; } $j = 0; { $result_array_tytul[$j+1] = $result_row[0]; $result_array_tytul[$j] = $result_row[1]; $j=$j+2; } <div id="tabela_html"> for($i; $i>=0;) { if($j>=2){ } while($result_array[$i] == $result_array_tytul[$j-1]){ echo('<div class="pozycja"><span class="tytul">'.$result_array[$i-2].'</span><span class="cena">'.$result_array[$i-1].'</span></div>'); $i=$i-3; if($i <=0) {break;} } $j=$j-2; } } function lista_kategorii($rodzaj) { if($rodzaj == 'typ1'){ $query_kategoria = 'SELECT * FROM kategoria;'; } if($rodzaj == 'typ2') { $query_kategoria = 'SELECT * FROM kategoria2;'; } $j = 0; { $result_array_tytul[$j+1] = $result_row[0]; $result_array_tytul[$j] = $result_row[1]; $j=$j+2; } $select = '<select name="kategoria"> <option></option>'; for($j; $j>=2; $j=$j-2) { $select.= '<option value="'.$result_array_tytul[$j-1].'">'.$result_array_tytul[$j-2].'</option>'; } $select.= '</select>'; return $select; } function dodaj($rodzaj) { $potwierdzenie = ''; if($rodzaj == 'typ1'){ $query_typ = 'SELECT * FROM typ;'; $query_kategoria = 'SELECT * FROM kategoria;'; $rodzaj2 = 'kategoria'; $option = lista_kategorii('typ1'); } if($rodzaj == 'typ2') { $query_typ = 'SELECT * FROM typind;'; $query_kategoria = 'SELECT * FROM kategoria2;'; $rodzaj2 = 'kategoria2'; $option = lista_kategorii('typ2'); } { if($_POST['ktoredodaj'] == 'kategoria'){ if($_POST['nazwa'] != '') { $insert = 'INSERT INTO '.$_POST['rodzaj'].' VALUES ('; $id = 'NULL, '; $nazwa = $_POST['nazwa']; $query = $insert.$id.'"'.$nazwa.'");'; $potwierdzenie ='Nowa kategoria została zapisana!'; } else { } } else { if($_POST['ktoredodaj'] == 'pozycja') { if($_POST['nazwa'] != '') { if($_POST['rodzaj'] == 'kategoria') $tabela = 'typ'; if($_POST['rodzaj'] == 'kategoria2') $tabela = 'typ2'; $insert = 'INSERT INTO '.$tabela.' VALUES ('; $id = 'NULL, '; $nazwa = $_POST['nazwa']; $cena = $_POST['cena']; $id_kat = $_POST['kategoria']; $query = $insert.$id.'"'.$nazwa.'", '.$cena.', '.$id_kat.');'; $potwierdzenie ='Nowa pozycja została zapisana!'; } else { echo('<p style="color:red; font-weight: bold; padding: 5px;">Wszystkie pola musza być uzupełnione!</p>'); } } } } else { $_POST['rodzaj'] = ''; $_POST['nazwa'] = ''; } <h4>Nowa kategoria</h4> <p style="color:green; font-weight: bold; padding: 5px;">'.$potwierdzenie.'</p> <form action="#nowe" method="POST" class="dodaj_kategorie"> Nazwa kategorii:</td><td><input size="30" type="text" name="nazwa" value="" /> <input type="hidden" name="rodzaj" value="'.$rodzaj2.'" /> <input type="hidden" name="ktoredodaj" value="kategoria" /> <input type="submit" value="Dodaj nową kategorię" /> </form> <h4>Nowa pozycja</h4> form action="#nowe" method="POST" class="dodaj_kategorie"> Nazwa pozycji:<input type="text" name="nazwa" value="" /> Cena: <input type="text" name="cena" value="" /> <input type="hidden" name="rodzaj" value="'.$rodzaj2.'" /> <input type="hidden" name="ktoredodaj" value="pozycja" /> Wybierz kategorię: '.$option.' <input type="submit" value="Dodaj nową pozycję" /> </form> '); } ?>
Macie jakieś pomysły/sugestie jak rozwiązać ten problem?
za każdym razem gdy prześlę formularz to strona się przeładowuje i łączy się ponownie z bazą danych tzn tak jak na schemacie:
-łączy z bazą
-wyświetla formularz
-zamyka polaczenie
i tak w kółko za każdym przesłaniem formularza.
Czy to może szkodzić mojemu skryptowi? Tzn czy jest on przez to duży, zajmuje dużo zasobów i czy można by to zrobić lepiej? (raz łączyć z bazą danych i przeładowywać stronę bez tracenia tego połączenia)? Czy może to w niczym nie przeszkadza jak sobie dwa razy dziennie połączę się z bazą danych po 5 razy w ramach tego skryptu?
//EDIT: poprawione, wcześniej nie miałem dostępu do źródeł skryptu dlatego tak to napisałem.