Mój problem jest dość nietypowy i pierwszy raz odkąd bawię się php/mysql spotkałem się z czymś takim. Wiem, że tworząc stronę, trzeba zwracać uwagę na przeglądarkę w jakiej będzie ona otwierana, dlatego testuje strony pod 4 najpopularniejszymi - Opera (podstawowa), Firefox (dodatkowo), Chrome (dodatkowo), Internet Explorer (dodatkowo), ale tym razem spotkałem się z problemem, który pojawia się tylko i wyłącznie na przeglądarkach Firefox, w różnych wersjach.
Tworzę prosty skrypt dopisujący osoby do bazy danych subskrypcji. Jako, że jest to promocyjna akcja, co któryś użytkownik, który się dopisała wygrywa kupon rabatowy.
W skrócie skrypt wygląda tak:
1. Sprawdzenie czy został podany adres email
- TAK - przeniesienie na stronę 'error_msg'
- NIE - przeniesienie na stronę właściwą dopisywania
2. Sprawdzenie czy podany adres e-mail już istnieje
- TAK - wyświetlenie informacji o tym, że istnieje
- NIE - dalsza część skryptu
3. Dopisanie adresu do bazy i pobranie unikanego ID
4. Sprawdzenie czy ID jest podzielne przez X (określa czy jest np co dwudziestą osobą)
- TAK - wyświetlenie kodu promocyjnego, wysłanie maila z informacjami i kodem
- NIE - wyświetlenie informacji o dopisaniu do subskrypcji, wysłanie maila z informacjami
Proste, prawda?
Jednak nie. Tworząc i sprawdzając, wszystko u mnie działało. Przesłałem więc link do strony do osoby, której to robię i okazało się, że coś nawala. Trudno jest sprawdzać, gdy w przeglądarce widzi się, że wszystko działa, ale zacząłem przeklejać linijkę po linijce i doprowadziłem do tego stanu, że na localhoscie u mnie w FF też pojawił się ten błąd.
Błąd polegał na tym, że za każdym razem pojawiała się informacja o tym, że adres email już istnieje w bazie danych, chociaż dane dodawały się do bazy.
Na innym z for (forum Firefoxa) jeden z użytkowników stwierdził, że najprawdopodobniej jest to wina dwukrotnego otwarcia strony/przeładowania się jej. Dlaczego tak się dzieje, nie mam pojęcia.
Gdy u mnie pojawił się błąd, zacząłem kombinować z kodem okazało się, że u mnie rozwiązaniem było zmiana znaczników <?php ?> na <script language="php"></script>, ale nie u właściciela.
Poniżej umieszczam kod strony, może wasze świeże spojrzenie na problem rozwiąże go, bo ja już naprawdę nie mam pomysłów:
index.php
<?php { } else { $mail = $_REQUEST['email']; ?> <html> <head> </head> <body></body> </html> <?php } ?>
index2.php
<?php $q = 5; $host = 'host'; $db_user = 'user'; $db_password = 'password'; $database = 'db'; $email_get_clear = $_REQUEST['email']; // łączenie z bazą // sprawdzanie adresu email if($row == 0) { $next_id = $last_id + 1; if($next_id%$q == 0) { include("gen.php"); $msg = "Gratulacje<br>Jesteś $next_id osobą, która dopisała się do newslettera.<br /> Kupon o numerze <span style=\"color: #ce181f\"><strong>$promo</strong></span> jest Twój."; $user_status = 1; //include("func_msw.php"); } else { $numer=0; $msg = "Adres $email_get został pomyślnie dodany.<br> Dziękujemy."; $user_status = 0; //include("func_msn.php"); } $email_add = mysql_query("INSERT INTO tabela VALUES ('', '$email_get', '$date_now', '$numer', '$ip', $user_status)") or die('Nie można dodać rekordu'); } else { $msg = "Adres już istnieje"; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Subskrybuj newsletter</title> </head> <body> <div class="tekst"> </div> <br /><br /> <div class="bottom">Jesteś <strong><?php echo $next_id; ?></strong> osobą odwiedzającą tę stronę.</div> </body> </html>
gen.php
<?php
Strona wywalała błąd na 2 przeglądarkach w wersji 3.0.X i 3.6.1. 3.0.X ma zainstalowane Adblock oraz Forcastfox
Skrypt działał na wersjach 3.1.X oraz 3.6.1