Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-12-14 14:36:20

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Dziwny fenomen PHP+PSQL o_0

Hej wam... Walczę od jakiegoś czasu z PHP i tym drugim no i napotkałem niesamowity fenomen :D Otóż:

Tak mniej więcej wygląda kod. Więcej nie trzeba i reszta wszystko działa.

Kod:

...
$var = pg_query($uchwyt,"SELECT * FROM forumphp WHERE login='$_GET[login]' OR email='$_GET[email]'");
$osoba = pg_fetch_all($var);
$l=$osoba[0][login];
$e=$osoba[0][email];

if( ($l == $_GET[login]) || ($e == $_GET[email]) ){
        echo "Login lub e-mail już istnieje w bazie. Proszę wybrać inne dane.";
        exit;
}else{
        echo "TWORZENIE OSOBY<br/>";
        #pg_query($uchwyt,"INSERT INTO forumphp (imie,nazwisko,plec,login,email,haslo,status) VALUES ('$_GET[imie]','$_GET[nazwisko]','$_GET[plec]','$_GET[login]','$_GET[email]','$_GET[haslo]','U');");

        echo "Rejestracja się powiodła!";
}
?>

No i teraz jest tam jeden komentarz #pg_query(...); I to jest ten fenomen. Jeśli jest tak jak teraz i warunek if'a ma wartość FALSE to wchodzi do else jak powinien, wyświetka komunikat "TWORZENIE OSOBY", no ale jej nie tworzy bo jest # (to nikogo nie dziwi).

Ale jeśli spełnię następujące warunki:
1. Wpiszę osobę (do rejestracji) która już kiedyś była  (te same loginy hasła wszystko) w bazie PSQL tylko ją wywaliłem z jakiś tam powodów poleceniem (w innym pliku php, wogóle inna bajka):

Kod:

pg_query($uchwyt, "DELETE FROM forumphp WHERE id='$_GET[id]'");

id typ SERIAL;
2. Odkomentuje powyższą linijkę pg_query(...).
To... Uwaga, uwaga (sam w to nie mogę uwierzyć):
Wyświetla komunikat z if'a i robi (bez komunikatow) to co jest w else... o_0 Tego jeszcze nie było nie? 2w1!! Niby działa poprawnie bo w bazie takiej osoby nie ma więc ją tworzy. Ale czemu bez komunikatu TWORZENIE OSOBY, no i czemu wyświetla komunikaty, że ta osoba już istnieje??

Pewnie mi nie uwierzycie, że tak jest, no ale po co miałbym kłamać... Sprawdziłem to (nie tylko ja) setki razy, i taki jest objaw...

Co wy na to?

Ostatnio edytowany przez P@blo (2011-12-14 14:41:21)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#2  2011-12-14 14:58:02

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Dziwny fenomen PHP+PSQL o_0

Po wywaleniu rekordu osoby sprawdzałeś czy nie istnieje inny rekord z taki e-mailem lub loginem? Jeśli wchodzi do kodu po spełnieniu warunku w if to na pewno nie wykonuje else, stąd nie masz komunikatu i nie robi inserta. Jeśli wydaje ci się, że robi to pewnie masz tam jeszcze innych użytkowników z takim loginem lub hasłem.

Offline

 

#3  2011-12-14 15:12:41

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: Dziwny fenomen PHP+PSQL o_0

kamikaze napisał(-a):

Po wywaleniu rekordu osoby sprawdzałeś czy nie istnieje inny rekord z taki e-mailem lub loginem?

Aktualnie są tam 3 krotki więc jestem wstanie nad tym panować i nie ma innej osoby.

kamikaze napisał(-a):

Jeśli wchodzi do kodu po spełnieniu warunku w if to na pewno nie wykonuje else...

A jednak?

Ostatnio edytowany przez P@blo (2011-12-14 15:13:02)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#4  2011-12-14 16:37:10

  grzegorz.85 - Członek DUG

grzegorz.85
Członek DUG
Skąd: Ostrołęka
Zarejestrowany: 2007-07-12
Serwis

Re: Dziwny fenomen PHP+PSQL o_0

A czy przypadkiem strona nie odświeża się po dodaniu nowej osoby? Wówczas najpierw wejdzie do else, wykona się odświeżenie, i za drugim razem wejdzie do if.

Offline

 

#5  2011-12-14 17:04:11

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: Dziwny fenomen PHP+PSQL o_0

A jest tam jakiś komunikat w tym else o odświeżaniu? Jeśli pg_query tak działa, że najpierw wykonuje a potem odświeża stronę to miałbyś rację, ale chyba tak nie jest... Poza tym twoje rozumowanie nie tłumaczy faktu, dlaczego nie wyświetla komunikatu z else, bo jak pisałem wykonuje tylko pg_query a echa są z if'a...


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#6  2011-12-14 17:46:10

  grzegorz.85 - Członek DUG

grzegorz.85
Członek DUG
Skąd: Ostrołęka
Zarejestrowany: 2007-07-12
Serwis

Re: Dziwny fenomen PHP+PSQL o_0

Nie znamy całej aplikacji dlatego możemy tylko gdybać. Sytuacja podpada mi pod podwójne wykonanie spowodowane np. odświeżeniem strony.
Dlaczego nie widać komunikatów z else? Ponieważ zanim przeglądarka je wyświetliła, otrzymała nową/odświeżoną stronę z komunikatami z if.
Dlaczego nastąpiło odświeżenie? Przychodzi mi do głowy kilka możliwości:
- podwójne kliknięcie na link (jeżeli rejestracja odbywa się przez kliknięcie na link, a nie wysłanie formularza)
- odświeżenie strony HTML, np.  <meta http-equiv=”refresh” content="...">
- odświeżenie strony przez JavaScript, np. window.location.href =unescape(window.location.pathname);
- odświeżenie strony przez PHP (nagłówki HTTP), np. header( "refresh:5;url=register.php" ); header('Location: http://www.example.pl');

Zalecałbym podejrzenie komunikacji przeglądarki z serwerem.

Offline

 

#7  2011-12-14 18:31:06

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: Dziwny fenomen PHP+PSQL o_0

No też nie chce umieszczać całego kodu... Nie mam javy, nie mam header(...), nie mam klików, bo mam formularz. Odświeżam stronę przez <meta...>, ale we wcześniejszych ifach, lecze też mam pewność że do nich nie wchodzi.

EDIT:
Tak dokładnie odświeżam, ale podkreślam, że ta składnia jest prze tym wszystkim w kilku ifach do których nie wchodzi więc wątpię, że one się wykonują np:

Kod:

...
if( $_GET[haslo] != $_GET[p_haslo] ){
        echo "Hasła różnią się. Wpisz obydwa te same.";
        echo '<meta http-equiv="refresh" content="3; http://inna_strona.pl" />';
        exit;
}
...

Ostatnio edytowany przez P@blo (2011-12-14 18:36:22)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#8  2011-12-14 18:36:00

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Dziwny fenomen PHP+PSQL o_0

Może włącz raportowanie błędów w PHP. Nikt nie pisał o Javie.

Offline

 

#9  2011-12-14 18:39:17

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: Dziwny fenomen PHP+PSQL o_0

Chodziło mi o javascript. Może źle się wyraziłem... A jak to się włącza to raportowanie? No i co by miało być błędem? Wg mnie nie ma błędów składniowych, to co by miał krzyczeć...


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#10  2011-12-14 19:11:14

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Dziwny fenomen PHP+PSQL o_0

Na samym początku skryptu:

error_reporting(E_ALL);
ini_set('display_errors', true);

Offline

 

#11  2012-01-13 17:29:52

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: Dziwny fenomen PHP+PSQL o_0

Ok... Długo nie pisałem za co przepraszam...

Okazało się, że serwer na którym pisałem skrypt, z dziwnych przyczyn czasami złapie zawieche. Tzn działa, ale CTRL+R na stronie nie odświeża jej tak jakbyśmy chcieli (szybko), no i z tego są błędy. Ja to rozumiem tak jakby kod 'nakładał' się na siebie. Zły i dobry. Wygląda to w ten sposób, że np piszemy if'a (tak jak ja) serwer złapie zawieche, potem zmieniamy warunek w ifie no ale on pamięta jakiś czas tego starego...

Może ktoś wie co jest nie tak? Słyszał o takim problemie? Może bym adminowi coś powiedział, żeby coś tam dorobił, pozmieniał, bo z tego co słyszałem wszystkich to denerwuje, ale nikt nie wie co to jest... Jak trzeba jakieś configi to może będę mógł podejrzeć (nie wiem czy mam do tego taką 'moc').

A może to jest normalne???

Nie znam się na tym kompletnie (stawianie serwerów), raczej je wykorzystuje. To też potraktujcie mnie ulgowo :)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#12  2012-01-14 14:58:45

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Dziwny fenomen PHP+PSQL o_0

a moze zacznij od tego ze napiszesz skrypt porzadnie i porzadnie zaprojektujesz baze? czy pola login i email sa unique ? jesli nie to masz problem z race condition. a jesli tak , to po prostu rob inserta i jesli zwroci blad ze jest duplikat to am wiesz. zadne selekty nie sa potrzebne


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)