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ć):
[b]Wyświetla komunikat z if'a i robi (bez komunikatow) to co jest w else... o_0[/b] 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)


[tt]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 |[/tt]

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

[quote=kamikaze]Po wywaleniu rekordu osoby sprawdzałeś czy nie istnieje inny rekord z taki e-mailem lub loginem?[/quote]
Aktualnie są tam 3 krotki więc jestem wstanie nad tym panować i nie ma innej osoby.
[quote=kamikaze]Jeśli wchodzi do kodu po spełnieniu warunku w if to na pewno nie wykonuje else...[/quote]
A jednak?

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


[tt]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 |[/tt]

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 [i]else[/i], wykona się odświeżenie, i za drugim razem wejdzie do [i]if[/i].

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...


[tt]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 |[/tt]

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.

[b]EDIT:[/b]
[url=http://forum.dug.net.pl/viewtopic.php?pid=187569#p187569]Tak dokładnie odświeżam[/url], 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)


[tt]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 |[/tt]

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ć...


[tt]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 |[/tt]

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 :)


[tt]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 |[/tt]

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!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

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

[ Generated in 0.014 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00016 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00123 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.219.11.19' WHERE u.id=1
0.00102 UPDATE punbb_online SET logged=1716008535 WHERE ident='18.219.11.19'
0.00057 SELECT * FROM punbb_online WHERE logged<1716008235
0.00126 DELETE FROM punbb_online WHERE ident='185.191.171.5'
0.00073 DELETE FROM punbb_online WHERE ident='47.128.50.204'
0.00083 SELECT topic_id FROM punbb_posts WHERE id=190331
0.00174 SELECT id FROM punbb_posts WHERE topic_id=20232 ORDER BY posted
0.00069 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=20232 AND t.moved_to IS NULL
0.00007 SELECT search_for, replace_with FROM punbb_censoring
0.00091 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=20232 ORDER BY p.id LIMIT 0,25
0.00095 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=20232
Total query time: 0.0102 s