NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Prihlásenie / registrácia

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
valgard
Člen
Avatar
valgard:29.1.2013 14:54

Zdravím,

robím prihlásenie / registráciu na svoje stránky. Formulár má dva inputy na zadanie mailu a hesla a dva tlačítka, jedno pre prihlásenie a druhé pre registráciu.

Mám urobený php script, ktorý po zadaní údajov (mail a heslo) pridá tieto údaje do databáze uživateľov a vráti novú stránku. Funguje to ale rovnako pre obe tlačítka.

Neviem ale ako vyriešiť, aby to po stlačení tlačítka "Prihlásiť" zobralo zadané údaje (mail a heslo) a prešlo na jednu stránku, ale po stlačení tlačítka "Registrovať" by to uložilo zadané údaje (mail a heslo) do databáze a prešlo to na druhú stránku.

Vo formulári mám action="stran­ka.php", ktorá spracováva formulár. Nechcem riešiť prihlásenie a registráciu tak, že na prihlásenie budem mať jeden formulár (ten na úvodnej stránke) a registráciu napr. cez hypertextový odkaz, ktorý by odkazoval na samostatnú stránku s registračným formulárom.

Prosím poradí niekto, ako to vyriešiť v jednom formulári ? (2x input + 2x tlačítko)

 
Odpovědět
29.1.2013 14:54
Avatar
Vojtěch Mašek (Woyta):29.1.2013 15:07

Zkus ten skript větvit podle stisknutého tlačítka

if($_POST['registrovat'])
{
//tady příkazy pro registraci
}
if($_POST['prihlasit'])
{
//tady příkazy pro přihlášení
}

Musíš mít nastavené jméno (name) i u tlačítek

Editováno 29.1.2013 15:08
Nahoru Odpovědět
29.1.2013 15:07
Výraz "to nejde" není v mém slovníku
Avatar
valgard
Člen
Avatar
Odpovídá na Vojtěch Mašek (Woyta)
valgard:30.1.2013 11:51

Díky za tip, skúsim sa nad tým zamyslieť.

Nieje mi ešte jasné, aká stránka bude zpracovávať ten script. Chcem, aby sa po stlačení každého tlačítka načítavala iná stránka, s ktorou by sa ďalej pracovalo oddelene.

Alebo že by bol script na "zvláštnej" stránke a jeho výstupom by bolo načítanie dvoch iných stránok v závislosti na tom, ako by sa script vyhodnotil ?

 
Nahoru Odpovědět
30.1.2013 11:51
Avatar
Odpovídá na valgard
Vojtěch Mašek (Woyta):30.1.2013 13:30

Pokud to chceš odděleně, tak bude asi nejpřehlednější, když do toho kódu nahoře dáš jenom přesměrování na příslušnou stránku, nicméně šlo by i to aby byly příkazy pro vyhodnocení obou vstupů v jednom skriptu, například já jsem si udělal takovej jednoduchej content management system a ten je v jednom jediným souboru. Stejně bych ale nejradši viděl registraci a přihlášení ve dvou formulářích, protože pokud to budeš mít v jednom, budou se ti hrozně špatně ošetřovat vstupy (zobrazení chybových hlášek při nesprávném tvaru nebo nezadání údajů do formuláře). A to co jde, to bych dal do jednoho skriptu kvůli předávání proměnných mezi stránkami.

Editováno 30.1.2013 13:32
Nahoru Odpovědět
30.1.2013 13:30
Výraz "to nejde" není v mém slovníku
Avatar
valgard
Člen
Avatar
Odpovídá na Vojtěch Mašek (Woyta)
valgard:30.1.2013 14:40

Vstupy mám momentálne ošetrené priamo vo formulári cez "required", takže nejde odoslať prázdné pole. Správny tvar e-mailovej adresy je ošetrený pomocou javascriptu. To by som už cez php nechcel ošetrovať.

Zatiaľ mám urobený tento kód na registráciu:

if($_POST['registrovat']) {

$connnection = mysql_connect("adresa", "nazov_databazy", "heslo");
if (!$connnection) {
    die('Není možné se připojit k databázi: ' . mysql_error());
}

mysql_select_db("nazov_databazy", $connnection);   // připojení k databázi

$sql = "INSERT INTO uzivatele (email, heslo)
VALUES
('$_POST[email]','$_POST[heslo]')";        // vložení nových údajů do databáze

if (!mysql_query($sql, $connnection)) {
    die('Error: ' . mysql_error());
}

header('Location: stranka.html');

mysql_close($connnection);
}

Ešte je samozrejme potreba ošetriť kontrolu registračných údajov, aby sa niekto neregistroval dvakrát s tým istým e-mailom. Potom asi bude potreba doplniť aj nejaké zabezpečenie. To ale ešte musím naštudovať :).

Pre prihlásenie bude ten script podobný, akurát nebude údaje do databázy ukladať, ale porovnávať s tými čo už tam sú, a ak tam žiadne údaje nebudú, tak vyhodí hlášku, že je potreba sa najprv zaregistrovať. Zase musím naštudovať :).

Chcem sa ale opýtať, je to presmerovanie na ďalšiu stránku cez header('Location: stranka.html') správne ? Teda či sa to má robiť takto.

 
Nahoru Odpovědět
30.1.2013 14:40
Avatar
Kit
Tvůrce
Avatar
Odpovídá na valgard
Kit:30.1.2013 14:47

Netuším, proč ty formuláře potřebuješ zpracovávat odděleně. Všechny podstránky zpracovávám jedním index.php a podle mne je to nejspolehlivější řešení.

Také nechápu, proč používáš funkci die(). Ty chceš, aby ten skript chcípnul? To se přece zásadně nedělá.

Nahoru Odpovědět
30.1.2013 14:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
valgard
Člen
Avatar
Odpovídá na Kit
valgard:31.1.2013 10:06

Ja to nepotrebujem zpracovávať oddelene. Potrebujem ale, aby sa po stlačení každého tlačítka prešlo na inú stránku. Po stlačení "Registrovat" na stránku s výberom postavy a po stlačení tlačítka "Přihlásit" na nejakú stránku už priamo do hry (mapa, charakter, ...).

Je fakt, že možem ten script nahrať priamo do hlavnej stránky (index.php) a zpracovávať to tam. Zatiaľ to mám v samostatnom súbore "prihlaseni.php" a funguje to. Teda funguje to tak, že po zadaní údajov to uloží tieto údaje do databáze a prejde na cieľovú stránku.

Ten script som našiel na nejakej stránke, keď som hľadal tutoriály na registráciu a prihlásenie. Akurát som si upravil parametry podľa svojich potrieb. Zatiaľ sa php len učím a nerozumiem presne všetkým funkciám ktoré v php sú.

Takže som si pozrel funkciu die() v php manuáli, ale o moc múdrejší z toho niesom. Síce to moc nedoporučujú používať, ale neviem ako to inak ošetriť. Napadlo ma snáď len toto:

$connnection = mysql_connect("adresa", "nazov_databazy", "heslo");
if (!$connnection) {
    echo('Není možné se připojit k databázi');
    exit();
    // alebo namiesto exitu použiť header()? Potom si ale niesom istý tým echom ...
    header('Location: index.php');
}

Je v php niečo ako alert v Javascripte ?

 
Nahoru Odpovědět
31.1.2013 10:06
Avatar
Kit
Tvůrce
Avatar
Odpovídá na valgard
Kit:31.1.2013 10:59

To co jsi napsal, je jen obcházení die(), ale problém neřeší. Skript nesmí chcípnout, ale musí se korektně dokončit. To znamená uzavřít otevřené HTML značky, vypsat vhodnější náhradní text pro návštěvníka a zalogovat chybu.

Editováno 31.1.2013 10:59
Nahoru Odpovědět
31.1.2013 10:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
valgard
Člen
Avatar
Odpovídá na Kit
valgard:31.1.2013 16:09

Njn, akurát že momentálne to neviem inak urobiť (nemám na to znalosti) ...

 
Nahoru Odpovědět
31.1.2013 16:09
Avatar
Odpovídá na valgard
Michael Olšavský:31.1.2013 16:27

Tak můžeš na to jít javascriptem nebo třeba přes odkaz (tzn.: index.php?tex­t=abcd) Na stránce kde chceš text zobrazit si vytvoř nějaký skript na výpis. Stačí:

<?php
$text = $_GET['text'];
echo "Chyba: " . $text;
?>

Můžeš to taky dát jako funkci. Nebo to menusí být přes URL. Stačí text poslat přes $_POST a přesměrovat přes header. Tam jen to jen vypsat.

 
Nahoru Odpovědět
31.1.2013 16:27
Avatar
valgard
Člen
Avatar
Odpovídá na Michael Olšavský
valgard:1.2.2013 8:19

Díky za radu, zamyslím sa nad tým. Zatiaľ sa snažím nejako urobiť kontrolu údajov pri registrácii a prihlásenie. Fakt ale je, že všade kde som hľadal scripty na registráciu to riešia cez die() ...

 
Nahoru Odpovědět
1.2.2013 8:19
Avatar
Kit
Tvůrce
Avatar
Odpovídá na valgard
Kit:4.2.2013 8:17

Všude ne. Ti o trošku zdatnější používají výjimky. Ostatní to dělají podle zastaralých učebnic.

Nahoru Odpovědět
4.2.2013 8:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 12 zpráv z 12.