Registrácia&Login pomôžete? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Registrácia&Login pomôžete? – PHP – Fórum – Programujte.comRegistrácia&Login pomôžete? – PHP – Fórum – Programujte.com

 

Majox
~ Anonymní uživatel
75 příspěvků
6. 6. 2010   #1
-
0
-

Ahojte, začínam robiť s PHP a podarilo sa mi vytvoriť Registráciu a Login, len neviem, či je to bezpečné a či to nie je náchylné na SQL Injection a na Robotov... Preto, by som vás veľmi prosil, či by ste mi tieto doleuvedené kódy,neupravili, tak aby boli aspoň o štipku bezpečnejšie ;)
Ďakujem za pomoc!

S Pozdravom:


Majox ;)

Kódy:

Login:

<html>

<form action='login.php' method='POST'>
Nickname:<input type='text' name='uzivatel' maxlength='25'></br>
Heslo:<input type='password' name='heslo' maxlength='25'></br>
<input type='submit' name='Prihlásiť sa!'>
</form><p>
<a href='registracia.php'>Registrovať?</a>
</html>


Loginspracuj:


<?php

session_start();

$uzivatel = $_POST['uzivatel'];
$heslo = $_POST['heslo'];
if ($uzivatel&&$heslo)
{
$connect = mysql_connect ("localhost","root","") or die ("Nemôžem sa pripojiť!!");
mysql_select_db ("web") or die ("Nemôžem nájsť databázu!");
$query = mysql_query ("SELECT * FROM uzivatelia WHERE uzivatel='$uzivatel'");
$numrows = mysql_num_rows ($query);
if ($numrows!=0)
{
while ($row = mysql_fetch_assoc ($query) )
{
$dbuzivatel = $row ['uzivatel'];
$dbheslo = $row ['heslo'];
$aktivacia = $row ['aktivacia'];
if ($aktivacia=='0')
{
die ('Váš účet zatiaľ, nie je aktivovaný! Prosím, skontrolujte si E-mail!');
exit();
}
}
if ($uzivatel==$dbuzivatel&&md5 ($heslo)==$dbheslo)
{
echo "Úspešne ste sa prihlásili! Kliknite <a href='uzivatel.php'>sem</a>, pre vstup na úvodnú stránku!";
$_SESSION ['uzivatel']=$uzivatel;
}
else
echo "Nesprávne heslo!!";
}
else
die ("Zadaný uživateľ, neexistuje");
}
else
die ("Prosím, zadajte Nickname a heslo!")
?>


Registrácia:
<?php

function sterilize ($input, $is_sql = false)
{
$input = htmlentities($input, ENT_QUOTES);

if(get_magic_quotes_gpc ())
{
$input = stripslashes ($input);
}

if ($is_sql)
{
$input = mysql_real_escape_string ($input);
}

$input = strip_tags($input);
$input = str_replace("
", "\n", $input);

return $input;
}
echo "<h1>Registrácia</h1>";
$odoslat = strip_tags ($_POST ['odoslat']);
$nick = (strip_tags ($_POST ['nick']));
$heslo = strip_tags($_POST ['heslo']);
$opakovat = strip_tags($_POST ['opakovat']);
$datum = date ("Y-m-d");
$email = $_POST ['email'];
if ($odoslat)
{
$connect = mysql_connect ("localhost","root","");
mysql_select_db ("web");
$nickkontrola = mysql_query ("SELECT uzivatel FROM uzivatelia WHERE uzivatel='$nick'");
$count = mysql_num_rows ($nickkontrola);
if ($count!=0)
{
die ("Zadaný nick sa už používa!");
}
if ($nick&&$heslo&&$opakovat)
{

if ($heslo==$opakovat)
{
if (strlen($nick)>25)
{
echo "Nick použivateľa je príliš dlhý, prosím zadajte nick maximálne do 25 znakov!";
}
else
{
if (strlen($heslo)>25||strlen ($heslo)<6)
{
echo "Heslo musí mať od 6-25 znakov!";
}
else
{
//register
$heslo = md5 ($heslo);
$opakovat = md5 ($opakovat);
$randomcislo = rand(15236548,99563254);

$queryreg = mysql_query("INSERT INTO uzivatelia VALUES ('','$nick','$heslo','$email','$datum','$randomcislo','0')");
$posledneid = mysql_insert_id ();
// Poslanie aktivačného emailu
$adresa = $email;
$predmet = "Aktivácia Vášho účtu!";
$hlavicky = "From: Admin@adresa.eu";
// Mail adresa servera ktorú potom doplním! Doladiť!
$server = "mailhost.sheffield.ac.uk";
ini_set ("SMTP",$server);
$telo = "Ahoj $nick,\n\n
Vitaj, na našom portáli,pre prihlásenie je nutné aktivovať svoj účet. Pre aktivovanie klikni na doleuvedený link:
http://localhost/aktivacia.php?id=$posledneid&kod=$randomcislo\n\n
S Pozdravom:\n\n
Majox";
mail($adresa,$predmet,$telo,$hlavicky);
die ("Registrácia prebehla úspešne!");
}
}
echo "";
}
else
echo "Heslá sa nezhodujú!";
}
else
echo "Prosím, vyplnte všetky polia!";
}
?>
<html>
<form action='registracia.php' method='POST'>
<table>

<tr>

<td>
Nick:
</td>

<td>
<input type='text' name='nick' value="<?php echo $nick; ?>" maxlength='25'>
</td>

</tr>
<tr>

<td>
E-mail:
</td>

<td>
<input type='text' name='email' maxlength='50'>
</td>

</tr>
<tr>

<td>
Heslo:
</td>

<td>
<input type='password' name='heslo' maxlength='25'>
</td>

</tr>
<tr>

<td>
Heslo,ešte raz:
</td>

<td>
<input type='password' name='opakovat' maxlength='25' >
</td>

</tr>


</table>
<p><input type='submit' name='odoslat' value='Registrovať!'
</form>
</html>

Nahlásit jako SPAM
IP: 92.52.51.–
marioff0
Expert
6. 6. 2010   #2
-
0
-

zle zle zle .... kod je potencionalne nebezpecny nie len vyuzitim sql injection....

kazdu premennu s ktorou chces pracovat v db musis osetrit / skontrolovat , pretoze vstupu od uzivatela NIKDY NEVER !

v prvom rade povinne precitaj: http://programujte.com/?akce=clanek&cl=2007041802-sql-injection-a-zabezpeceni vratane funkcii ktore su v clanku spomenute... ak dacomu nepochopis kludne sa opitaj dalej

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Majox
~ Anonymní uživatel
75 příspěvků
6. 6. 2010   #3
-
0
-

Ok, prezriem si to, ak niečomu nepochopím, tak určite napíšem!
Zatiaľ, vďaka...

Nahlásit jako SPAM
IP: 92.52.51.–
Majox
~ Anonymní uživatel
75 příspěvků
6. 6. 2010   #4
-
0
-

Takže, ak som tomu lepšie pochopil, v podstate by stačilo, ak by som v kóde na registráciu dal namiesto normal. "POST" dal niečo takéto:

$nick = mysql_real_escape_string($_POST[nick]);

pomohlo by to, alebo aký kód by som mal použiť?
Ak, som tomu pochopil mám to použiť v logine aj v registrácii?
Ak, som tomu nepochopil správne, bolo by možné mi uviesť príklad, ako inak by som to mal riešiť? + ako by bolo možné dať na konci registrácie ten verifikačný (obrázkový popr. textový) kód?

Ďakujem


Majox

Nahlásit jako SPAM
IP: 92.52.51.–
z_moravec
~ Redaktor
+3
Posthunter
7. 6. 2010   #5
-
0
-

Ještě je vhodné kontrolovat i obsah zadaných dat, tzn. jestli to odpovídá tomu, co měl uživatel zadat. Třeba u toho loginu zkontrlovat, že obsahuje pouze povolené znaky, u emailu formát emailu, atd.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Majox
~ Anonymní uživatel
75 příspěvků
7. 6. 2010   #6
-
0
-

A ako by sa to dalo? :)

Nahlásit jako SPAM
IP: 87.197.16.–
marioff0
Expert
7. 6. 2010   #7
-
0
-
Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Majox
~ Anonymní uživatel
75 příspěvků
7. 6. 2010   #8
-
0
-

Tak, toto je super riešenie ;)
A prosím, poradil by mi niekto, ako na registráciu s overovacím textom(obrázkom) a s kontrolou formátu e-mailu? :)

Nahlásit jako SPAM
IP: 92.52.51.–
z_moravec
~ Redaktor
+3
Posthunter
7. 6. 2010   #9
-
0
-
Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Majox
~ Anonymní uživatel
75 příspěvků
7. 6. 2010   #10
-
0
-

Vďaka, pohľadám :)

Nahlásit jako SPAM
IP: 92.52.51.–
marioff0
Expert
7. 6. 2010   #11
-
0
-
Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Majox
~ Anonymní uživatel
75 příspěvků
7. 6. 2010   #12
-
0
-

Ok, vďaka, za pomoc, ak by som niečomu ďalej nechápal, budem písať do tohoto vlákna :)

Nahlásit jako SPAM
IP: 92.52.51.–
Majox
~ Anonymní uživatel
75 příspěvků
20. 6. 2010   #13
-
0
-

Ahojte, tak znova sem píšem, tentokrát by som sa chcel spýtať, kde robím chybu:

<?php

session_start();
if ($_SESSION['uzivatel'])
{
$pripojenie = mysql_connect ("localhost","root","") or die ("Nemôžem sa pripojiť ka databázy");
mysql_select_db("hra") or die ("Nemôžem nájsť databázu!");
$vek = $_POST['vek'];
$znamenie = $_POST['znamenie'];
$vysledok = $query = mysql_query ("UPDATE uzivatelia SET vek=$vek,znamenie=$znamenie");
echo "Tu, si môžeš upraviť svoj profil:";
echo "<html>
<form action='upravit.php' method='POST'>
Vek: <input type='text' name='vek'></br>
Znamenie: <input type='text' name='znamenie'></br>
<input type='submit' name='upravit' value='Upraviť'>
</html>";
}
else
die ("<font color=red>Pre prístup k tejto stránke sa musíte prihlásiť!</font>");
?>


Vždy, pri zobrazení formu a zadaní hodnôt mi neaktualizuje nič, ale keď v UPDATE nechám len položku "vek=$vek" tak mi to aktualizuje vek, ale ak tam dám aj znamenie tak to nefunguje...
Skúšal som dať aj znamenie osobitne, bez veku, ale tak, či onak mi to nejde...
V databázy mi názov sedí, tak neviem kde by mohol byť problém...
Mám to tam nastavené ako:
znamenie  	varchar(25)  	utf8_slovak_ci
, tak isto mimo rozsahu znakov mám nastavený aj vek, ale toto nefunguje...

Ďakujem, za pomoc, s pozdarom:



Majox

Nahlásit jako SPAM
IP: 95.105.229.–
z_moravec
~ Redaktor
+3
Posthunter
20. 6. 2010   #14
-
0
-

Znamení je varchar, musíš to dát do uvozovek:

$vysledok = $query = mysql_query ("UPDATE uzivatelia SET vek=$vek,znamenie='$znamenie'");

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Majox
~ Anonymní uživatel
75 příspěvků
20. 6. 2010   #15
-
0
-

Ďakujem, funguje to!
Ešte by som sa rád spýtal podarilo sa mi, aby sa z databázy čítal iba prihlásený užívateľ tu kód:

<?php

session_start();
$uzivatel = $_SESSION ['uzivatel'];
if ($_SESSION['uzivatel'])
{
$pripojenie = mysql_connect ("localhost","root","") or die ("Nemôžem sa pripojiť ka databázy");
mysql_select_db("hra") or die ("Nemôžem nájsť databázu!");
$vysledok = $query = mysql_query ("SELECT * FROM uzivatelia WHERE uzivatel='$uzivatel'");
while($riadok = mysql_fetch_array( $vysledok )) {
$id = $riadok['id'];
echo "Vek: ". $riadok['vek'];
echo "</br>";
echo "Znamenie: ". $riadok['znamenie'];
echo "</br>";
echo "Pohlavie: ". $riadok['pohlavie'];
echo "</br>";
}
echo "<a href='upravit.php'>Upraviť profil</a>";
}
else
die ("<font color=red>Pre prístup k tejto stránke sa musíte prihlásiť!</font>");
?>

Ale ja by som chcel, aby sa to čítalo podla ID teda
WHERE id='$id'

len neviem, ako mám nadefinovať ID teda, ako by ten kód mal vyzerať...

Ďakujem, za pomoc :)

Nahlásit jako SPAM
IP: 95.105.229.–
Majox
~ Anonymní uživatel
75 příspěvků
22. 6. 2010   #16
-
0
-

Ahojte, predchádzajúcu otázku ešte riešim, ale chcel by som sa spýtať na niečo nové a to je:
Ako v PHP spraviť aby keď niekto klikne na odkaz(tlačítko) aby to prirátalo napr. 1 bod a následne uložilo to databázy?
Nevedeli by ste mi niekto ukázať, ako na to?


Ďakujem, za ochotu a pomoc!

S Pozdravom:


Majox

Nahlásit jako SPAM
IP: 95.105.229.–
marioff0
Expert
22. 6. 2010   #17
-
0
-

najjednoduchsie asi takto:

mysql_query("UPDATE nazov_tabulky SET stlpec_z_bodmi=stlpec_z_bodmi+1 WHERE nejaka podmienka");

Nahlásit jako SPAM
IP: 195.78.44.–
Škoda, že život sa nedá "sejvovať", tak že by som po zlom životnom rozhodnutí mohol začať odznova :([br] Lenivosť je matka pokroku.[br][br] http://cut.sk/ - odstrihni si dlhý link
Majox
~ Anonymní uživatel
75 příspěvků
22. 6. 2010   #18
-
0
-

Aha, no skúsim, ako to pôjde :)

Nahlásit jako SPAM
IP: 95.105.229.–
Majox
~ Anonymní uživatel
75 příspěvků
23. 6. 2010   #19
-
0
-

Funguje to super, vďaka!

Nahlásit jako SPAM
IP: 95.105.229.–
Majox
~ Anonymní uživatel
75 příspěvků
23. 6. 2010   #20
-
0
-

Ahojte, nevedeli yb ste mi poradiť, ako do

<input type='text' name='test' value=' '>
ako by som mohol, do "value" načítať data z databázy?

Vďaka za pomoc!


Majox

Nahlásit jako SPAM
IP: 95.105.229.–
z_moravec
~ Redaktor
+3
Posthunter
23. 6. 2010   #21
-
0
-

<input type='text' name='test' value='<?php echo $data_z_db; ?> '>

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Majox
~ Anonymní uživatel
75 příspěvků
26. 6. 2010   #22
-
0
-

Ahojte, znova sem píšem ohľadne toho sčitovania bodov...
Všetko fungovalo pokiaľ som do toho nepovkladal podmienky.
Jednoducho ide o to, že sa to číslo síce pripočíta do databázy,ale prvý krát nič také, že by sa niečo prišítalo nevypíše ďalej po klikaní sa to normálne pripočítava a po aktualizovaní stránky to vypíše ten výsledok ktorý by mal byť správny teda napr. namiesto 22 pred refreshom sa stane z toho 23 po refreshi...
Neviem, kde som spravil chybu a či som ten kód moc neskomplikoval, ďakujem za rady!

Nahlásit jako SPAM
IP: 95.105.229.–
Majox
~ Anonymní uživatel
75 příspěvků
26. 6. 2010   #23
-
0
-

<?php

session_start();
$uzivatel = $_SESSION ['uzivatel'];
if ($_SESSION['uzivatel'])
{
$pripojenie = mysql_connect ("localhost","root","") or die ("Nemôžem sa pripojiť k databázy");
mysql_select_db("hra") or die ("Nemôžem nájsť databázu!");
$vysledok = $query = mysql_query ("SELECT * FROM uzivatelia WHERE uzivatel='$uzivatel'");
$riadok = mysql_fetch_array( $vysledok );
if ($_POST['plus'])
{
if ($riadok['body']>='1')
{
$vysledok = $query = mysql_query ("UPDATE uzivatelia SET body=body+1 WHERE uzivatel='$uzivatel'");
}
else
echo "";
}
if ($riadok['body']>='1')
{
echo "Práve máš:".$riadok['body']. " bodov!";
}
if ($riadok['body']<'1')
{
}
if ($riadok['body']>='25')
{
$vysledok = $query = mysql_query ("UPDATE uzivatelia SET level=2 WHERE uzivatel='$uzivatel'");
echo "</br><font color='red'>Level: </font><font color='blue'>".$riadok['level']."</font>";
}
if ($riadok['body']>='1')
{
echo "<form action='body.php' method='POST'><input type='submit' name='plus' value='pridaj'>";
}
if ($riadok['body']<'1')
{
echo "Nemáš dostatok bodov!";
}
}
else
die ("<font color=red>Pre prístup k tejto stránke sa musíte prihlásiť!</font>");
?>

Nahlásit jako SPAM
IP: 95.105.229.–
zdenda
~ Anonymní uživatel
257 příspěvků
27. 6. 2010   #24
-
0
-
Nahlásit jako SPAM
IP: 213.211.51.–
Bryant
~ Moderátor
0
Stálý člen
27. 6. 2010   #25
-
0
-

No je fakt že tenhle kód není moc špičkový, například jsem nepochopil tenhle řádek:

$vysledok = $query = mysql_query ("SELECT * FROM uzivatelia WHERE uzivatel='$uzivatel'");

..to se jako snažíš do 2x proměných zapsat 1x stejný výsledek z databáze?(to samé i na 28. řádku)
Pak taky nechápu, proč k téhle podmínce:
if ($riadok['body']>='1')
vkládáš příkaz else a taky k čemu slouží podmínka :
if ($riadok['body']<'1')
.. podle všeho to jsou zbytečný kusy kódu. No je tam toho spousta. ;)

Navíc jsem ani přesně nepochopil čeho chceš dosáhnout.

Nahlásit jako SPAM
IP: 94.138.99.–
„Bez činu zůstává i nejkrásnější myšlenka bezcennou.“
— Móhandás Karamčand Gándhí
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý