Jednoduché přihlášení pomocí php a mysql 1/2

Napsal hary28 dne 28.07.2010 23:48 v Tvorba www stránek, PHP, MySQL | 27 komentářů

Náhled - Jednoduché přihlášení pomocí php a mysql 1/2

Dnes nastal den si ukázat jednoduché přihlášení. Není to vůbec nic složitého. Bude nám k tomu stačit minimální znalost PHP. V prvním článku ze dvou si ukážeme jak udělat registraci. Tak co říkáte můžu začít? Jdem na věc!

Nejprve si v MySQL musíme vytvořit tabulku s názvem uzivatele. Tabulka bude obsahovat 4 sloupce (id, nick, heslo, email). Heslo bude hashovano aby nebylo možné ho rozluštit. K tomuto účelu slouží funkce md5. Tato funkce převede jakýkoliv text na řetězec o počtu 32 znaků, které zatím není možné rozluštit.



CREATE TABLE IF NOT EXISTS `uzivatele` (
`id` int(5) NOT NULL auto_increment,
`login` varchar(40) NOT NULL,
`heslo` varchar(32) NOT NULL,
`email` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



Nyní máme Tabulku vytvořenou a můžeme se vrhnout na registraci. Vytvoříme si soubor registrace.php. V souboru najdeme formulář s poli a script ke zpracování a uložení dat do mysql. Níže můžete vidět script kterým zpracujeme formulář.




<?php
include "./connect.php";/* připojení k databázi */
if(isset($_POST['submit'])) {
$nick = mysql_real_escape_string($_POST['nick']);
$heslo = mysql_real_escape_string($_POST['heslo']);
$over_heslo = mysql_real_escape_string($_POST['over_heslo']);
$md5_heslo = md5($heslo);
$email = mysql_real_escape_string($_POST['email']);
/* — KONTROLA ZADANÝCH ÚDAJŮ — */
$user_check = mysql_query("SELECT login FROM uzivatele WHERE login='".$nick."'");
if($nick==""){echo"Nebyl vyplněn nick!";}
else if(mysql_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";}
else if($heslo==""){echo"Nebylo vyplněno heslo";}
else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";}
else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";}
else if($email==""){echo"Nebyl vyplněn email";}
else{
$sql= mysql_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysql_error());
echo"Registrace byla úspěšně dokončena!";
}
}
?>



Tento článek je u konce. Tabulky v MySQL a registraci máme hotovou. V dalším článku si ukážeme přihlášení a odhlášení. Je to stejně jednoduché.

Teď si můžete stáhnou registraci. U registrace najdete i soubor connect.php, kterým se musíte přihlásit do vaší MySQL.

Doporučit

Linkuj Vybrali.sme.sk

Komentáře (27)

Koudy
14.08.2010, 13:27

Mám všechno jak to máš tady, ale při odeslání mi hodí databáze chybu: Column count doesn't match value count at row 1... nevíš čim to je??

ReGiSeR
15.08.2010, 22:47

Znamená to,
že z formulára nemôže zachytiť nejaký údaj. Skoro vždy sa chyba nachádza tu: $sql= mysql_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysql_error());. Pozri či máš všetko zadefinované a či máš správne hodnoty v inputoch v name.

Mike
26.09.2010, 09:14

Zdravim, velmi pekna stranka.
Mam otazku k prihlasovaniu:
Co ak sa registruju 2 rovnaki uzivatiela? Dalo by sa do toho implementovat aj rozpoznavanie, ci uz uzivatel s takym loginom existuje?

Mike
26.09.2010, 10:00

do suboru registrace.php pridat a editovat:

/* --- VYHĽADANIE LOGINU V DATABÁZE --- */
$kontrola = mysql_query("select login from uzivatele where login = '$nick'") OR die(mysql_error());
$row = mysql_fetch_array($kontrola);

/* --- KONTROLA ZADANÝCH ÚDAJOV --- */
if($nick==$row['login']){
echo'Taký nick už existuje!';
}
else if($nick==""){
...

Autor hary28
26.09.2010, 23:21

Je to velmi dobrý nápad, když jsem psal tento script tak mě toto vůbec nenapdalo. Moje odpověď zní, že je to určitě možné a proto jsem nyní script upravil. Díky za návrh :)

Ondrej
23.10.2010, 13:43

Zdravim, vsiml jsem si ze sript je upraven spatne... Jelikoz jsme si vytvorili tabulku 'uzivatele' se sloupci `id`, `login`, `heslo` a `email` nemuzeme pouzit dotaz:

mysql_query("SELECT nick FROM uzivatele WHERE nick='".$nick."'");

spravne by melo byt:

mysql_query("SELECT login FROM uzivatele WHERE login='".$nick."'");

...alespon me to pote fungovalo. :)

Autor hary28
23.10.2010, 20:36

Ano Ondřeji, měl jsem tam chybu nyní je script úspěšně upraven. Děkuji za upozornění.

KopRus
17.11.2010, 17:14

Já nevím proč, ale nemůžu to rozchodit... První věc je, že se mi formulář zobrazuje i s tím php zápisem v hodnotě value="<?php...?>". A druhá je, že mi to vůbec nefunguje. Jméno serveru, jméno a heslo jsem zadal správně, tabulku používám uzivatele, takže taky OK... já už fakt nevím. Server i s databázi mám přes easyPHP, tak nevím jestli je chyba tam...

Pavel
23.12.2010, 16:29

Ještě by se hodila kontrola zda nick už není v databázi tohle tam dá klidně víc stejných nicků.

Pavel
23.12.2010, 18:15

Mam problém s md5 do databáze se uloží heslo správně zahashuje správně ale při pokusu o přihlášení je výsledný hash jiný a přihlášení se nezdaří.

Tom
12.01.2011, 21:42

chtěl bych se zeptat..kdyz chci editovat svoje nastavení jaky skript napsat?představa je že kliknu na nastavení profilu pod odkazem: nastavit.php treba a tam by mel byt formular hodnoty co mam vyplněné už zobrazeno při na jeti na stránku a možnost to změnit..pak dat tlačitko odeslat a ono mi to v databazi změní...díky

Tom
12.01.2011, 22:37

<?php
include "./connect.php";// připojení k databázi

if(isset($_POST['submit'])) {

$jmeno = mysql_real_escape_string($_POST['jmeno']);
$ico = mysql_real_escape_string($_POST['ico']);
$email = mysql_real_escape_string($_POST['email']);

/* --- KONTROLA ZADANÝCH ÚDAJŮ --- */
if($jmeno==""){
echo'Nebylo vyplněno jméno!';
}
else if($ico==""){
echo'Nebylo vyplněno IČO';
}
else{
$sql= mysql_query("INSERT INTO nastaveni VALUES ('','$jmeno','$ico','$email')") or die(mysql_error());
echo'Úspěšně uloženo!';
}
}
?>

<form action="#" method="post">
<table>
<tr>
<td>Jméno: </td>
<td><input type="text" name="jmeno" value="<?php if(isset($_POST["jmeno"])){echo $_POST["jmeno"];}?>" size="25" tabindex="1" /></td>
</tr>
<tr>
<td>IČO: </td>
<td><input type="text" name="ico" value="<?php if(isset($_POST["ico"])){echo $_POST["ico"];}?>" size="25" tabindex="2" /></td>
</tr>
<tr>
<td>Email: </td>
<td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="3" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Uložit" /></td>
</tr>
</table>
</form>

tady k tomu bych potreboval aby to nedelalo dalsi radek ale aby to editovalo stavajici..1radek ma id 1 tudiz vzdy tento radek aby mi to editlo..pred editaci aby mi to v tom formulari vypsalo hodnoty z tabulky..tedy data z toho radku..dík

Autor hary28
14.01.2011, 14:44

Ahoj, nejsem si jistej co máš namysli, ale předpokládám že ti jde o editaci přihlašovacích údaje které máš v databázi(db). Napíšu ti to krok po kroku. Nejprve musíš z db vytahat data které chceš editor třeba podle id: MySQL_Query("SELECT jmeno, ico, email FROM nastaveni WHERE id = 1");. Tyto data nyní vypíšeš do formuláře. Nyní jediné co ti už zbývá je zkontrolovat zadané údaje a upravit je. Kontrolu máš hotovou už v tom tvém kódu hotovou. Teďka ti už jenom ukážu jak upravit jeden řádek v db. Zde je dotaz pro úpravu: mysql_query("UPDATE nastaveni SET jmeno = '$jmeno', email = '$email', ico = '$ico' WHERE id = 1");. To by mělo být vše co potřebuješ. Pokud ti to nepůjde napiš mi to tu a nech mi tu email a já tě přes něj kontaktuji a nějak to vyřešíme.

louis
23.01.2011, 21:48

Ahoj
prva registracia prebehla v poriadku, ale ked som chcel zaregistrovat druheho uzivatela tak mi vyhodilo : Duplicate entry '0' for key 'PRIMARY'
dik za odpoved ;)

Autor hary28
24.01.2011, 13:21

K sloupci ID jsi nastavil primární klíč ale dále jsi tam nenastavil auto_increment, který vlastně vytváří každému záznamu v tabulce ID proto ti to hází tuto chybu. Stačí tedy sloupci ID nastavit auto_increment.

ironm
26.01.2011, 00:01

zdravím, som úplný začiatočník, a chcel by som vás poprosiť o radu. nejako nechápem ako prihlásim connect.php do MySQL. Možno som urobil chybu už pri vytváraní tabulky v MySQL. Mám platenú doménu alpha.datacentre.sk, netreba to s tým nejako prepojiť? Vytvoril som si v MySQL databázu s názvom marek a v tej tom potom vytvoril tabulku podľa vášho návodu,(teda aspon som sa snažil:), treba ju nejako pomenovať?)Mám v tom trošku guláľ a asi som preplietol 5 cez 9, ale bol by som rád keby ste mi aspoň trošku ozrejmili tieto súvislosti. vopred ďakujem za odpoveď

Autor hary28
26.01.2011, 16:09

ironm: Ahoj, nějak nechápu vůbec tvůj dotaz. MySQL musí podporovat server na kterém hostuješ a také provozovatelé ti musejí k němu dát přístupové údaje. Tyto údaje poté vyplníš v connect.php. Pokud ovšem hosting MySQL nepodporuje, tak máš smůlu a budeš muset využít jiné způsob přihlašování.

marie14596
22.02.2011, 21:01

jo

Mike
27.02.2011, 16:58

Kam se pise to : CREATE TABLE IF NOT EXISTS `uzivatele` (
`id` int(5) NOT NULL auto_increment,
`login` varchar(40) NOT NULL,
`heslo` varchar(32) NOT NULL,
`email` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

(stranku mam na webzdarma.cz)

Vit
28.02.2011, 16:38

Dobry den chtel bych se zeptat. KDyz bych chtel udelat formular ktery odesle clanek do tabulky co mam pouzit misto varchar? a jak by to priblizne vypadalo.

Autor hary28
28.02.2011, 19:56

Ahoj, záleží na tom, jaká data budeš do toho sloupce ukládat. Zde máš přehled datových typů http://programujte.com/?akce=clanek&cl=2007052903-prehled-datovych-typu-v-mysql

Autor hary28
28.02.2011, 19:57

Mike: to co jsi tady napsal musíš dát v phpmyadminovi do importu.

MiVal
02.03.2011, 17:42

Jak mohu selectem vybr jen 20 prvnich pismen?

Autor hary28
03.03.2011, 14:32

Záleží na tom co chceš selectem vybírat. Jde to i na úrovni sql dotazů, ale pokud ti jde pouze o výsledek, který bude mít pouze 20 znaků, tak bych to řešil přes PHP substr($text, 0, 20);, ale opravdu záleží jen na tom o jaký konkrétní případ jde.

jkj
26.03.2011, 21:40

Jak se zbavím to hashování?

Autor hary28
29.03.2011, 16:56

jkj: proč se chceš zbavovat hashování?

sher
12.12.2011, 18:30

nechápu to přihlášení na connect.php-to je nějaká databáze nebo kde ji mám najít?

<< « Předchozí 1 Další » >>

Přidat komentář

nepovinné (chráněn proti spamu), možno použít gravatar
nepovinné

Ochrana proti spamu. Napište prosím číslo dvacet-čtyři: