Diskuze: Chyba v registraci

PHP PHP Chyba v registraci American English version English version

Avatar
IT Man
Redaktor
Avatar
IT Man:

Ahoj,
zrovna dělám registraci na své webovky. Jenže pokud se chci zaregistrovat, tak mi to napíše, že nemám vyplněna všechna pole (viz. kód). Při tom jsem je všechny vyplnil. Vím, že mám chybu v kódě, ale nevím kde. Dlouhé hodiny jsem na to koukal a nic nenašel. Vím, že vy nejste tak slepí jako já. Pomůžete mi prosím?
Předem děkuji za odpověď.
Kód:

<body>
                        <h2>Registrace</h2>
                                <form action="?page=registrace" method="post">
                                        Přihlašovací jméno:<br>
                                        <input type="text" name="username" /><br><br>
                                        Heslo:<br>
                                        <input type="password" name="password" /><br><br>
                                        Heslo znovu:<br>
                                        <input type="password" name="password2" /><br><br>
                                        E-mail:<br>
                                        <input type="text" name="email" /><br><br>
                                        <input type="submit" name="submit_reg" value="Registrovat" />
                                </form>
<?php
        $error = "";
        if(isset($_POST['submit_reg']))
        {
                $username = addslashes(mysql_real_escape_string($_POST['username']));
                $password = addslashes(mysql_real_escape_string($_POST['password']));
                $password2 = addslashes(mysql_real_escape_string($_POST['password2']));
                $email = addslashes(mysql_real_escape_string($_POST['email']));

                if($username && $password && $password2 && $email)
                {
                        if($password == $password2)
                        {
                                $query = mysql_query("SELECT `id` FROM `users` WHERE `username` = '" . $username . "'") or die(mysql_error());
                                if(mysql_num_rows($query) == 0)
                                {
                                        $pass = sha1(strtoupper($username) . ':' . strtoupper($password));
                                        $get_id = mysql_query("SELECT MAX(id) FROM `users`") or die(mysql_error());
                                        $fetch_id = mysql_fetch_array($get_id);
                                        $id = fetch_id(0 + 1);
                                        mysql_query("INSERT INTO `users`(`id`, `username`, `password`, `email`) VALUES('".$id."', '".$username."', '".$pass."', '".$email."')") or die(mysql_error());
                                        $error = "Byl jste úspěšně zaregistrován!";
                                }
                                else $error = "Toto jméno je již obsazeno!";
                        }
                        else $error = "Zadaná hesla se neshodují!";
                }
                else $error = "Nevyplnil/a jste všechna políčka!";
        }
        echo $error;
?>
</body>
</html>
Odpovědět 7.8.2014 16:59
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Ahoj,

z prvního pohledu mi to připadá OK. Zkus si dumpnout ty proměnné ($username atd.).

Btw, nevím, co dělá funkce fetch_id(), ale ten parametr 0 + 1 vypadá hezky :)

Jo a funkce addslashes() je tam zbytečná.

Editováno 7.8.2014 17:19
 
Nahoru Odpovědět  +1 7.8.2014 17:16
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
IT Man:

Dumpnout? Jako přehodit? Dík, něco málo jsem si našel na netu a sestavil jsem to do sebe se svými znalostmi, takže něco je tam navíc (krom toho addslashes už asi nic). :)

Editováno 7.8.2014 18:28
Nahoru Odpovědět 7.8.2014 18:25
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Dumpnout je takový PHPčkovský obrat pro "vypsat pomocí funkce var_dump()" (příp. print_r()). Např. var_dump($user­name);

Mimo to, nemusíš zjišťovat poslední ID uživatele. Stačí sloupci ID nastavit AUTO_INCREMENT a hodnota se dosadí automaticky (jednoduše ten sloupec id můžeš z toho INSERTu vyškrtnout).

 
Nahoru Odpovědět 7.8.2014 18:35
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
IT Man:

No jo AI jsem si v phpMyAdmin nastavil. Já jsem teď na mobilu, tak zítra ráno ihned vyzkouším, ale jinak tedy díky. Pak písnu :)

Nahoru Odpovědět 7.8.2014 18:53
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Tonda Kozák
Člen
Avatar
Tonda Kozák:

Já to zkoušel a funguje mi to v pořádku (ta podmínka). Jediná možnost, která mě napadá, funguje ti správně připojení k databázi?

 
Nahoru Odpovědět 7.8.2014 21:45
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Tonda Kozák
IT Man:

To jsem dělal podle jednoho tutoriálu a tam to fungovalo v pohodě. Zkusím si tam překontrolovat ty kódy, ale pokud by mi to nefungovalo, hodí mi to error. Ráno budu moudřejší a snad Vaše rady pomůžou. Děkuji :)

Nahoru Odpovědět 7.8.2014 21:50
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Tonda Kozák
IT Man:

Tak teda addslashes jsem odstranil a dal tam ty

var_dump($username);

atd. na Vaše rady a vypsalo mi to toto:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Takže to vypadá, že to bude asi chyba serveru. Nebo to je moje chyba?

Nahoru Odpovědět 8.8.2014 17:26
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na IT Man
Tonda Kozák:

Nemůžeš se připojit k databázi. Buď můžeš mít špatně zadané přihlašovací údaje, nebo pokud hostuješ na nějakém free hostingu (pochybném), může být chyba tam.

Mimochodem, pokud ty stránky nejsou ještě určeny pro veřejnost, (nikdo je nezná) je dobré si zapnout vypisování chybových hlášek. Pokud jsou však stránky veřejné, není toto příliš bezpečné.

Editováno 8.8.2014 17:47
 
Nahoru Odpovědět 8.8.2014 17:44
Avatar
IT Man
Redaktor
Avatar
IT Man:

Ty mám dobře, takže je to hostingem (je free). Ty stránky se už navštěvují, akorát já je potřebuji na prozkoušení PHP a ne dělat stránky světa. No s**e mě to, protože jsem teprve na ZŠ, takže mé možnosti jsou omezené. Tak nic no. Jde tam vidět (chybová hláška), že to je jejich problém. Tak tedy dík :)

Nahoru Odpovědět 8.8.2014 18:55
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na IT Man
Tonda Kozák:

Můžu vědět, jaký hosting používáš?

 
Nahoru Odpovědět 8.8.2014 19:03
Avatar
IT Man
Redaktor
Avatar
Nahoru Odpovědět 8.8.2014 19:17
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Tonda Kozák
Člen
Avatar
Tonda Kozák:

Máš jako server uvedeno: mysql.webzdarma.cz?
Máš vůbec aktivované přihlašovací údaje?

Nechceš změnit webhosting? :-)

 
Nahoru Odpovědět 8.8.2014 19:26
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Tonda Kozák
IT Man:

Ano a údaje jsem i překopíroval správně. Rád bych změnil, ale neznám takový, kde máš min. 200 MB místa a phpMyAdmina. :(

Nahoru Odpovědět 8.8.2014 19:30
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Tonda Kozák
Člen
Avatar
Tonda Kozák:

Než jsem si pořídil placený (což je nejlepší), byl jsem celkem spokojený s Endora.cz.

Webzdarma, myslím, obecně nemá moc dobrou pověst. Případně zkus jejich podporu (na kterou ale občas kašlou), nebo aspoň jejich fórum.

 
Nahoru Odpovědět 8.8.2014 19:35
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Tonda Kozák
IT Man:

Vypadá hezky. S webzdarma jsem spokojen, ale pokud jim blbne databáze, kašlu na to. Napíši jim a také tam na fórum a když mi nikdo do týdne neodpoví, přestupuji na Endoru. S placeným budu pracovat, až budu moc dělat brigádu. Ještě jednou děkuji za ochotu :)

Nahoru Odpovědět 8.8.2014 19:42
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Občas na testování používám hosting php5.cz. Dříve jsem používal i endoru.

 
Nahoru Odpovědět 8.8.2014 19:51
Avatar
Michal Žůrek (misaz):

a jenom tak ze srandy nezkoušíš se z localhostu připojit na databázi na vzdáleném serveru, že ne?

Nahoru Odpovědět 8.8.2014 20:36
Nesnáším {}, proto se jim vyhýbám.
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
IT Man:

Ne. Jedná se o web http://application.wz.cz (nechtěl jsem ho zveřejňovat, ale odpovídám na tvojí otázku). Localhost mi blbne. Rozjedu na něm pouze phpMyAdmina a proto to zkouším na svém webu :)

Nahoru Odpovědět 8.8.2014 20:43
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
IT Man:

Taky nevypadá špatně na zkoušení, ale na projekty bych to nepoužil. Má pouze 50 MB místa :(
Pozn. když jsem hledal přes Google, tak jsem psal free hosting místo php hosting. Koukám, že používáte jenom ty nejlepší. Dík :)

Nahoru Odpovědět 8.8.2014 20:46
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Michal Žůrek (misaz):

a je databáze v administraci webzdarma aktivovaná? Dostaneš se tam přes ten jejich 100let neaktualizovaný phpMyAdmin ke kterému mají v administraci odkaz?

Nahoru Odpovědět 8.8.2014 20:47
Nesnáším {}, proto se jim vyhýbám.
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
IT Man:

Ano, je. V té databázi mám i tabulky a kdyby nebyla aktivovaná, smažou se a nedostanu se tam. Je to ta jejich databáze (při prvním otevření jsem nevěřil očím - vypadá jinak a tabulka se tvoří 2 minuty).

Nahoru Odpovědět 8.8.2014 20:51
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Myslím, že i sami na webu php5.cz píší, že to slouží k testování. Na nějaký ostrý provoz je stejně lepší něco placeného (pochopitelně).

 
Nahoru Odpovědět 8.8.2014 22:17
Avatar
IT Man
Redaktor
Avatar
IT Man:

Dnes jsem z nudy si na mobilu pročítal fóra a zjistil jsem, že některé příkazy byly zrušeny, ale jdou manuálně zapnout. Zítra to zkusím a když tak písnu :)
P.S. Na podporu jsem psal, zajímá mě, co mi odpoví :)

Nahoru Odpovědět 9.8.2014 17:36
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Michal Žůrek (misaz):

haha, nevím jestli budeš mít štěstí větší než já, ale já jsem na podpoře vždy narazil na paní Marcelku, která nic neví, jen když je problém tak jsem z ní dostal něco vy stylu "do 14 dní to oprav nebo ti zruším hosting" :D Hodně štěstí.

Nahoru Odpovědět 9.8.2014 17:58
Nesnáším {}, proto se jim vyhýbám.
Avatar
IT Man
Redaktor
Avatar
IT Man:

Pokud se mi to nepovede manuálně zapnout a nikdo neodpoví, přestupuji na jiný hosting. Aspoň budu mít zkušenosti s webzdarma :)

Nahoru Odpovědět 9.8.2014 20:17
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na IT Man
IT Man:

Dnes jsem tedy přidal do .htaccess tento řádek kvůli zapnutí některých PHP funkcí (na doporučení webzdarma, protože některé vypnuli):

php_flag allow_url_fopen on

Bohužel ani po této funkci to pořád vypisuje, že všechna políčka nejsou vyplněna. Tak kde je chyba už opravdu nevím, i když mám vše dobře vyplněné... :(
Od podpory zatím žádná odpověď, ale z fóra jsem hned po půl hodině dostal odpověď od jednoho uživatele. Buď si mám prý tam dát svůj phpMyAdmin nebo jednosouborový Adminer. Asi to vidím tak, že půjdu někam jinam, ale ještě teda zkusím tu radu. :)
EDIT: Bohužel, chyba je opravdu na straně webzdarma. Po stáhnutí a přidání Adminera mi to napíše tu samou chybu, co u registrace:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Počkám do neděle, jinak přestupuji.

Editováno 10.8.2014 13:37
Nahoru Odpovědět 10.8.2014 13:33
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
IT Man:

Tak jsem to nakonec vyřešil sám. V kódu mi chyběl $ a mezera. Také pomohlo přidání

session_start();

Úspěšně jsem se zaregistroval a i přihlásil. Už stačí jenom poupravit uživatelské rozhraní a umožním i návštěvníkům se zaregistrovat. Moc Vám děkuji a také i Misazovi, který mi ukázal tvář webzdarma :) A žádám o uzavření této diskuze.
P.S. Jak jsem přišel na tuto chybu? Stačilo udělat jinou chybu v pozdější fázi kódu a vyskočilo to samo.

Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět 10.8.2014 16:50
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 28 zpráv z 28.