Pereiti prie turinio

Mano kurti PHP kodai :)


Rekomenduojami pranešimai

Sveiki, taigi sukūriau vien šią temą tam, kad jūs galėtumėt įvertinti mano kodą ir pasiūlyti ką taisyti, ką patobulinti ir panašiai, taigi, štai mano kodas(Kol kas kol nedidelis kodas dėsiu, kaip atvirą kodą, o paskiau dėsiu į winrar'ą):

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>Programavimas/kodavimas</title>
</head>
<body>
<?php

include("config.php");

$page = $_GET['page'];

echo "<div id='kaire'>

<a href='index.php?page=home'>Pagrindinis</a><br>
<a href='index.php?page=register'>Registracija</a>

</div>

<div id='centras'>";

if($page == "register") {
echo "<form action='' method='post' />
<table>
	<tr><td>Slapyvardis:
	<td><input type='text' name='nick' />
	<tr><td>Slaptažodis:
	<td><input type='password' name='slaptazodis' />
	<tr><td>Pakartokit slaptažodį:
	<td><input type='password' name='slaptazodis2' />
	<tr><td>Email:
	<td><input type='text' name='email' />
</table>
	<input type='submit' value='Registruotis' name='registracija' />
</form>";

}

if(isset($_POST['registracija'])) {
$slapyvardis = mysql_real_escape_string($_POST['nick']);
$slaptazodis = md5(mysql_real_escape_string($_POST['slaptazodis']));
$slaptazodis2 = md5(mysql_real_escape_string($_POST['slaptazodis2']));
$email = mysql_real_escape_string($_POST['email']);

$fetch = mysql_fetch_assoc(mysql_query("SELECT * FROM users where nick='$slapyvardis' or email='$email'"));

if(strlen($slapyvardis) < 5) { $er = "Slapyvardis per trumpas!"; }
else if(strlen($slaptazodis) < 5) { $er = "Slaptažodis yra per trumpas!"; }
elseif($slaptazodis != $slaptazodis2) { $er = "Slaptažodžiai nesutampa!"; }
elseif($email == "") { $er = "Email per trumpas!"; }
elseif(strtolower($fetch['nick']) == strtolower($slapyvardis)) { $er = "Toks slapyvardis jau egzistuoja!"; }
elseif(strtolower($fetch['email']) == strtolower($email)) { $er = "Toks email jau egzistuoja!"; }
else {

$er = "Sėkmingai užsiregistravote!";

mysql_query("INSERT INTO users (nick, password, email, privileges) VALUES ('$slapyvardis', '$slaptazodis', '$email', '1')") or die(mysql_error()) or die(mysql_error());

}

echo $er;

}

echo "</div>

<div id='desine'>Dešinė</div>";


?>
</body>
</html>

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Abejojų, kad jis žino kas yra PDO, manau dar neverta tokiam lygyje gilintis.

 

Jei būtu rašyta mano stilium tai tikrinčiau

 

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

 

tik registracijos puslapyje, ir atskiras dalis išskaidyčiau failais kuriuos includinčiau prireikus pvz.: (register.php, addpost.php, addcomment.php ir t.t.)

 

Dar vienas dalykas, patogesnis jei darai echo HTML kodą:

 

echo '<span class="red">'.$msg.'</span>';

 

Dedant viengubas kabutes galima "valid" HTML kodą rašyti papraščiau, nes pas tave viengubos kabutės yra tai kaip ir netaisiklinga. O jei vistiek nori daryti taip kaip darai tai prieš dvigubas kabutes įterpk slash.

 

echo "<span class=\"red\">$msg</span>";

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siūlau visas klaidas talpinti į MASYVĄ $er, o ne kintamąjį ir tikrinti ne su "else if()" statement'ais , o su atskirais if'ais. Taip iš karto visos klaidos įsirašytų į masyvą ir bus atvaizduotos vartotojui, nes dabar tavajame variante, jeigu vartotojas suveda per trumpą vardą ir email'ą, tai jam rašys tik tai ,kad jo vardas per trumpas. Dar vertėtų priskirti input'ams 'value', kad vartotojui nereikėtų gavus klaidą visko per naujo suvedinėti :) .

Sekmės ;) .

Redagavo WebON
Nuoroda į pranešimą
Dalintis kituose puslapiuose

MD5 koduoti slaptažodžiams? ext/mysql? O dar escapini slaptažodį mysql'ui ir tik tada hešuoji... :)

 

HTML kažkodėl kiši į PHP echo, kai to nė velnio nereikia ir jis visiškai statinis. Vienur apostrofai, kitur kabutės HTML'e. Ir t.t.

 

TL;DR: Žr. mano parašą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasidomėk, pasiskaitinėk, bet nebenaudok mysql, nes jis jau nebėra palaikomas - nebesaugus ir pan.

http://php.net/manua...book.mysqli.php

http://www.meekro.com/ - labai patogi ir lengvai naudojama klasė

 

P.S. saugiam slaptažodžių kodavimui - http://net.tutsplus.com/tutorials/php/understanding-hash-functions-and-keeping-passwords-safe/

Redagavo w3ber
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nebenaudot MySQL nes jis nepalaikomas? wtf?

 

* Tikiuos turėta omeny nenaudok mysql_() funkcijų, naudok mysqli arba PDO kaip tau minėjo anksčiau.

* echo labiau ir performanco ir skonio reikalas, bet dėčiau į globalų kintamajį pvz $html ir jį pačiam gale echo'inčiau.

* Dvigubas kabutes keisk viengubom, tau jau paaiškino aukščiau apie tai.

* Slaptažodį jei jau md5'ini, tai daryk su druska(salt), t.y. prifarširuok aplinkui kažkokį string'ą.

* Imi reikšmes tiesiogiai iš $_GET ir $_POST superglobalų, bet net nepatikrini ar raktai egzistuoja. Warning'us užslėps error_reporting(0), tačiau gera praktika - nepalikt jokių warningų.

* Kintamųjų vardai beprasmiai, pvz $fetch ? Beto, jis niekur nenaudojamas, nors tikslas buvo patikrinti ar toks nick'as ir emeilas egzistuoja.

 

Tam kartui tiek.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nebenaudot MySQL nes jis nepalaikomas? wtf?

 

* Tikiuos turėta omeny nenaudok mysql_() funkcijų, naudok mysqli arba PDO kaip tau minėjo anksčiau.

* echo labiau ir performanco ir skonio reikalas, bet dėčiau į globalų kintamajį pvz $html ir jį pačiam gale echo'inčiau.

* Dvigubas kabutes keisk viengubom, tau jau paaiškino aukščiau apie tai.

* Slaptažodį jei jau md5'ini, tai daryk su druska(salt), t.y. prifarširuok aplinkui kažkokį string'ą.

* Imi reikšmes tiesiogiai iš $_GET ir $_POST superglobalų, bet net nepatikrini ar raktai egzistuoja. Warning'us užslėps error_reporting(0), tačiau gera praktika - nepalikt jokių warningų.

* Kintamųjų vardai beprasmiai, pvz $fetch ? Beto, jis niekur nenaudojamas, nors tikslas buvo patikrinti ar toks nick'as ir emeilas egzistuoja.

 

Tam kartui tiek.

 

Turėta omeny, kad mysql funkcijos nebebus atnaujinamos, nebebus taisomos jų klaidos ir pan.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Informacijos tikrinimas: tau siūlė dėti į masyvą klaidas, aš siūlyčiau daryti štai taip:

$klaidos = "";
if (klaida) $klaidos .= "Ivyko pirma klaida<br/> ";
if (klaida2) $klaidos .= "Ivyko antra klaida<br/> ";

echo $klaidos;

PS, tikrindamas ar įvyko klaidų, tiesiog patikrink kintamojo "klaidos" ilgi. > 0 = įvyko

Redagavo Juodasiskatinas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nebenaudot MySQL nes jis nepalaikomas? wtf?

 

* Tikiuos turėta omeny nenaudok mysql_() funkcijų, naudok mysqli arba PDO kaip tau minėjo anksčiau.

* echo labiau ir performanco ir skonio reikalas, bet dėčiau į globalų kintamajį pvz $html ir jį pačiam gale echo'inčiau.

* Dvigubas kabutes keisk viengubom, tau jau paaiškino aukščiau apie tai.

* Slaptažodį jei jau md5'ini, tai daryk su druska(salt), t.y. prifarširuok aplinkui kažkokį string'ą.

* Imi reikšmes tiesiogiai iš $_GET ir $_POST superglobalų, bet net nepatikrini ar raktai egzistuoja. Warning'us užslėps error_reporting(0), tačiau gera praktika - nepalikt jokių warningų.

* Kintamųjų vardai beprasmiai, pvz $fetch ? Beto, jis niekur nenaudojamas, nors tikslas buvo patikrinti ar toks nick'as ir emeilas egzistuoja.

 

Tam kartui tiek.

md5 labai greitai ir lengvai crackinamas net su druska. Čia kaip slėptis nuo shotgun'o už popieriaus lapo.

 

Nėr ko dėliot į $html kažkokius - yra output bufferingas, jei to reikia, yra template sistemos. Tiesiog reikia pasidomėti ir matyti kažką už to, ką darai dabar.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Informacijos tikrinimas: tau siūlė dėti į masyvą klaidas, aš siūlyčiau daryti štai taip:

$klaidos = "";
if (klaida) $klaidos .= "Ivyko pirma klaida<br/> ";
if (klaida2) $klaidos .= "Ivyko antra klaida<br/> ";

echo $klaidos;

PS, tikrindamas ar įvyko klaidų, tiesiog patikrink kintamojo "klaidos" ilgi. > 0 = įvyko

 

Dar geriau, klaidas dėti į masyvą, o ne string'ą ir nebereikės rašinėti "<br />" kurį pamiršus errorai bus vienoje eilutėje.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

priimk iššūkį ir padaryk captcha dar ;)

 

Pasistengsiu padaryt :)

 

 

Padaryk tą patį tik vietoj pasenusio mysql_connect panaudok PDO.

 

Teko domėtis, visai gražiai atrodo, pasidomėsiu labiau ir kitoj versijoj padaryta jau tai turėtų būt :)

 

Abejojų, kad jis žino kas yra PDO, manau dar neverta tokiam lygyje gilintis.

 

Jei būtu rašyta mano stilium tai tikrinčiau

 

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

 

tik registracijos puslapyje, ir atskiras dalis išskaidyčiau failais kuriuos includinčiau prireikus pvz.: (register.php, addpost.php, addcomment.php ir t.t.)

 

Dar vienas dalykas, patogesnis jei darai echo HTML kodą:

 

echo '<span class="red">'.$msg.'</span>';

 

Dedant viengubas kabutes galima "valid" HTML kodą rašyti papraščiau, nes pas tave viengubos kabutės yra tai kaip ir netaisiklinga. O jei vistiek nori daryti taip kaip darai tai prieš dvigubas kabutes įterpk slash.

 

echo "<span class=\"red\">$msg</span>";

 

Supratau, pasistengsiu tai padaryti :)

 

Siūlau visas klaidas talpinti į MASYVĄ $er, o ne kintamąjį ir tikrinti ne su "else if()" statement'ais , o su atskirais if'ais. Taip iš karto visos klaidos įsirašytų į masyvą ir bus atvaizduotos vartotojui, nes dabar tavajame variante, jeigu vartotojas suveda per trumpą vardą ir email'ą, tai jam rašys tik tai ,kad jo vardas per trumpas. Dar vertėtų priskirti input'ams 'value', kad vartotojui nereikėtų gavus klaidą visko per naujo suvedinėti :) .

Sekmės ;) .

 

Galėtum duot pvz kaip su masyvais? Nes nelabai aš supratau

 

P.S Kitiems atsakiusiems irgi dėkui :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...