Autorius Tema: PHP/MySQL užduotys  (Skaityti 152 kartai)

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
PHP/MySQL užduotys
« : 2011-04-09 08:54:18 »
Sveiki, norėdamas sutvirtinti savo PHP žinias sukūriau šią temą. Čia dėkite PHP užduotys taip pat galite prašyti kokio nors sunkesnio scripto. PHP esu ne pradinukas, atsirinksiu tik sunkesnes užduotys. Man dabar sunkiausiai sekasi su OOP. Laukiu užduočių ;)
Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

Lukas Liesis

  • Administratorius
  • Herojus
  • Žinutės: 4423
  • Karma: +130/-13
Re: PHP/MySQL užduotys
« Atsakyti #1 : 2011-04-09 12:48:20 »
tai padaryk su oop(php)   prijungima, atjungima, registracija su duomenu apsauga nuio sql injectiono.

2lvl: get'a surinkinek per 1 vieta filtrus visus leisk per ten ir poto naudok laisvai geta.
3lvl: viska ant ajax'o

pasirink lvl ir pirmyn ;D
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
Jums patinka manualai.lt projektas?
serveriai.lt 50% nuolaida!

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
Re: PHP/MySQL užduotys
« Atsakyti #2 : 2011-04-09 12:51:12 »
2lvl nesupratau
Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

vitalikaz

  • Naujokas
  • Žinutės: 349
  • Karma: +27/-0
Re: PHP/MySQL užduotys
« Atsakyti #3 : 2011-04-09 13:15:43 »
Šiaip, gan įdomi užduotėlė:
Įsivaizduok, kad turi tarkim tokį MySQL table'ą `items`:
name, description, description2, cost, date, [dar keli laukai kokie nors]
kur `name` yra Primary Key (kiekviename įraše - unikalus).
Tada antra lentelė pvz `comments`:
item_name, comment, username, email, date, [dar kasnors]
kur `item_name` yra Foreign Key (surištas su `items`.`name`)
Ir kad lentelė `items` turi tarkim 20 mln. įrašų, ir kiekvienas įrašas po kokius 5 komentarus. Pagalvok, kaip galėtum optimizuoti įrašų (su tarkim komentarais) išvedimą laiko atžvelgiu. Pvz kažkaip pakeisti realizaciją, ar dar kažkas :)

html css photoshop php forumas

Re: PHP/MySQL užduotys
« Atsakyti #3 : 2011-04-09 13:15:43 »

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
Re: PHP/MySQL užduotys
« Atsakyti #4 : 2011-04-09 16:22:56 »
tai padaryk su oop(php)   prijungima, atjungima, registracija su duomenu apsauga nuio sql injectiono.

2lvl: get'a surinkinek per 1 vieta filtrus visus leisk per ten ir poto naudok laisvai geta.
3lvl: viska ant ajax'o

pasirink lvl ir pirmyn ;D
<?php
class 
Veiksmai
{

var $sqlhost 'localhost';
var $sqluser 'root';
var $sqlpass '';
var $sqldb 'test';
function PrijungtiMySQL()
{
mysql_connect($this->sqlhost$this->sqluser$this->sqlpass) or die('Klaida: nepavyko prisijungti prie MySql.');
mysql_select_db($this->sqldb) or die('Klaida: nepavyko pasirinkti duomenų bazės.');
mysql_query('SET NAMES "utf8"');
}

function RegistruotiVartotoja($username$password$passwordc)
{
$uname mysql_real_escape_string($username);
$upass mysql_real_escape_string($password);
$upassc mysql_real_escape_string($passwordc);
if(empty($uname) or empty($upass) or empty($upassc))
{
print 'Klaida: užpildyti nevisi laukai.';
}
else
{
$results mysql_query("SELECT COUNT(*) as user FROM users WHERE name = $uname");
$results mysql_fetch_array($results);
if($results['user'] > 0
{
die('Klaida: vartotojas su tokiu vardu jau egzistuoja.');
}
else
{
if(strcmp($upass$upassc))
{
print 'Klaida: slaptažodžiai nesutampa.';
}
else
{
mysql_query("INSERT INTO users (name, pass) VALUES ('$uname', '$upass')") or die('Klaida: nepavyko sukurti vartotojo.');
print 'Registracija sėkminga, dabar galite prisijungti.';
}
}
}
}

function PrijungtiVartotoja($username$password)
{
session_start();
if(!isset($_SESSION['prisijunges'])) $_SESSION['prisijunges'] = false;
$results mysql_query("SELECT COUNT(*) as user FROM users WHERE name = $username");
$results mysql_fetch_array($results);
if($results['user'] <= 0
{
die('Klaida: toks vartotojas neegzistuoja.');
}
else
{
$results mysql_query("SELECT * FROM users WHERE name = $username");
$results mysql_fetch_array($results);
if(strcmp($username$results['name']) and strcmp($password$results['pass']))
{
print 'Klaida: neteisingai įvestas vartotojo vardas arba slaptažodis';
}
else
{
$_SESSION['prisijunges'] = true;
print 'Skmingai prisijungėte.';
}
}
}

function AtjungtiVartotoja()
{
session_destroy();
print 'Sėkmingai atsijungėte.';
}
}
$vartotojas = new Veiksmai;
$vartotojas -> PrijungtiMySQL();
if(isset($_POST['register'])) $vartotojas -> RegistruotiVartotoja($_POST['name'], $_POST['pass'], $_POST['passc']);
if(isset($_POST['login'])) $vartotojas -> PrijungtiVartotoja($_POST['name'], $_POST['pass']);
if(isset($_GET['logout'])) $vartotojas -> AtjungtiVartotoja();

print '<center><a href=\'index.php?site=1\'>Prisijungti</a><br/><a href=\'index.php?site=2\'>Registruotis</a></center>';
if(isset($_GET['site']) and $_GET['site'] == 1) print "<form action='index.php' method='POST'><input type='text' name='name'/><input type='password' name='pass'/><input type='submit' name='login'/></form>";
if(isset($_GET['site']) and $_GET['site'] == 2) print "<form action='index.php' method='POST'><input type='text' name='name'/><input type='password' name='pass'/><input type='password' name='passc'/><input type='submit' name='register'/></form>";
if(isset($_SESSION['prisijunges']) and $_SESSION['prisijunges'] == true) print '<a href="index.php?logout=1">Atsijungti</a>';
?>

Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

Lukas Liesis

  • Administratorius
  • Herojus
  • Žinutės: 4423
  • Karma: +130/-13
Re: PHP/MySQL užduotys
« Atsakyti #5 : 2011-04-09 17:27:01 »
padaryk taip, kad index.php faile uztektu tiesiog sukurti objekta ir tokie dalykai iskart butu patikrinami, kaip kad prisijungimai ir t.t. kad neterst index.php failo, kad jis isliktu itin paprastas
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
Jums patinka manualai.lt projektas?
serveriai.lt 50% nuolaida!

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
Re: PHP/MySQL užduotys
« Atsakyti #6 : 2011-04-10 08:35:02 »
Čia, kad tik sukūrus ar naudojant kreipimasį į funkcijas viską patikrintų?

Taip?
<?php
$oop 
= new veiksmai;
?>


Ar taip?
<?php
$oop 
= new veiksmai;
$oop -> tikrinti();
$oop -> prisijungti();
//...
?>

Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

Lukas Liesis

  • Administratorius
  • Herojus
  • Žinutės: 4423
  • Karma: +130/-13
Re: PHP/MySQL užduotys
« Atsakyti #7 : 2011-04-10 10:09:57 »
pirmas variantas :)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
Jums patinka manualai.lt projektas?
serveriai.lt 50% nuolaida!

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
Re: PHP/MySQL užduotys
« Atsakyti #8 : 2011-04-13 09:00:43 »
<?php
class 
Veiksmai
{

var $sqlhost 'localhost';
var $sqluser 'root';
var $sqlpass '';
var $sqldb 'test';
function PrijungtiMySQL()
{
mysql_connect($this->sqlhost$this->sqluser$this->sqlpass) or die('Klaida: nepavyko prisijungti prie MySql.');
mysql_select_db($this->sqldb) or die('Klaida: nepavyko pasirinkti duomenų bazės.');
mysql_query('SET NAMES "utf8"');
}

function RegistruotiVartotoja($username$password$passwordc)
{
$uname mysql_real_escape_string($username);
$upass mysql_real_escape_string($password);
$upassc mysql_real_escape_string($passwordc);
if(empty($uname) or empty($upass) or empty($upassc))
{
print 'Klaida: užpildyti nevisi laukai.';
}
else
{
$results mysql_query("SELECT COUNT(*) as user FROM users WHERE name = $uname");
$results mysql_fetch_array($results);
if($results['user'] > 0
{
die('Klaida: vartotojas su tokiu vardu jau egzistuoja.');
}
else
{
if(strcmp($upass$upassc))
{
print 'Klaida: slaptažodžiai nesutampa.';
}
else
{
mysql_query("INSERT INTO users (name, pass) VALUES ('$uname', '$upass')") or die('Klaida: nepavyko sukurti vartotojo.');
print 'Registracija sėkminga, dabar galite prisijungti.';
}
}
}
}

function PrijungtiVartotoja($username$password)
{
session_start();
if(!isset($_SESSION['prisijunges'])) $_SESSION['prisijunges'] = false;
$results mysql_query("SELECT COUNT(*) as user FROM users WHERE name = $username");
$results mysql_fetch_array($results);
if($results['user'] <= 0
{
die('Klaida: toks vartotojas neegzistuoja.');
}
else
{
$results mysql_query("SELECT * FROM users WHERE name = $username");
$results mysql_fetch_array($results);
if(strcmp($username$results['name']) and strcmp($password$results['pass']))
{
print 'Klaida: neteisingai įvestas vartotojo vardas arba slaptažodis';
}
else
{
$_SESSION['prisijunges'] = true;
print 'Skmingai prisijungėte.';
}
}
}

function AtjungtiVartotoja()
{
session_destroy();
print 'Sėkmingai atsijungėte.';
}

function RodytiLinkus()
{
print '<center><a href=\'index.php?site=1\'>Prisijungti</a><br/><a href=\'index.php?site=2\'>Registruotis</a></center>';
if(isset($_GET['site']) and $_GET['site'] == 1) print "<form action='index.php' method='POST'><input type='text' name='name'/><input type='password' name='pass'/><input type='submit' name='login'/></form>";
if(isset($_GET['site']) and $_GET['site'] == 2) print "<form action='index.php' method='POST'><input type='text' name='regname'/><input type='password' name='rpass'/><input type='password' name='passc'/><input type='submit' name='register'/></form>";
if(isset($_SESSION['prisijunges']) and $_SESSION['prisijunges'] == true) print '<a href="index.php?logout=1">Atsijungti</a>';
}

public function __construct()
{
$this -> PrijungtiMySQL();
if(isset($_POST['register'])) $this -> RegistruotiVartotoja($_POST['regname'], $_POST['rpass'], $_POST['passc']);
if(isset($_POST['login'])) $this -> PrijungtiVartotoja($_POST['name'], $_POST['pass']);
if(isset($_GET['logout'])) $this -> AtjungtiVartotoja();
$this -> RodytiLinkus();
}

public function __destruct()
{
mysql_close();
}
}

$vartotojas = new Veiksmai;
?>


Klasę tingėjau dėt į kitą failą.
Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

g1ntas

  • Naujokas
  • Žinutės: 96
  • Karma: +0/-0
Re: PHP/MySQL užduotys
« Atsakyti #9 : 2011-04-13 09:04:43 »
Šiaip, gan įdomi užduotėlė:
Įsivaizduok, kad turi tarkim tokį MySQL table'ą `items`:
name, description, description2, cost, date, [dar keli laukai kokie nors]
kur `name` yra Primary Key (kiekviename įraše - unikalus).
Tada antra lentelė pvz `comments`:
item_name, comment, username, email, date, [dar kasnors]
kur `item_name` yra Foreign Key (surištas su `items`.`name`)
Ir kad lentelė `items` turi tarkim 20 mln. įrašų, ir kiekvienas įrašas po kokius 5 komentarus. Pagalvok, kaip galėtum optimizuoti įrašų (su tarkim komentarais) išvedimą laiko atžvelgiu. Pvz kažkaip pakeisti realizaciją, ar dar kažkas :)

Nežinau :D. Šeip tai į puslapį vesčiau po 10 įrašų, su SELECT ... ORDER BY .... DESC LIMIT 10
Įgūdžiai be vaizduotės yra amatas, o vaizduotė be įgūdžių - modernus menas.

Tom Stoppard

vitalikaz

  • Naujokas
  • Žinutės: 349
  • Karma: +27/-0
Re: PHP/MySQL užduotys
« Atsakyti #10 : 2011-04-14 20:38:29 »
Nežinau :D. Šeip tai į puslapį vesčiau po 10 įrašų, su SELECT ... ORDER BY .... DESC LIMIT 10
čia kas be ko. Bet kad SELECT'as tas greičiau veiktų :)

Macaque

  • Dalyvis
  • Žinutės: 831
  • Karma: +25/-0
  • makakuje.
Re: PHP/MySQL užduotys
« Atsakyti #11 : 2011-04-14 23:54:52 »
Nežinau :D. Šeip tai į puslapį vesčiau po 10 įrašų, su SELECT ... ORDER BY .... DESC LIMIT 10
čia kas be ko. Bet kad SELECT'as tas greičiau veiktų :)

Nenaudot * (visų laukų selektinimo), naudot JOIN'tus, bazinį žodį WHERE ir tikrint? :)
„Tik vienas dalykas gali svajonę padaryti neįgyvendinamą: tai baimė, kad nepasiseks. “ - Paulo Coelho

Rekomenduoju pirkti domenus iš - IV.lt

html css photoshop php forumas

Re: PHP/MySQL užduotys
« Atsakyti #11 : 2011-04-14 23:54:52 »