PHP/Bazy danych i sesje

Z Wikibooks, biblioteki wolnych podręczników.
< PHP
Poprzedni rozdział: Biblioteka PDO
Następny rozdział: Jak to się robiło kiedyś?

Przypomnijmy sobie najpierw wcześniejszy materiał. Używane były w nim tablice z użytkownikami.

Zaczniemy od utworzenia tabeli sesje (korzystając z bazy danych produkty).

CREATE TABLE `produkty`.`sesje` (
 `id` INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `login` VARCHAR( 100 ) NOT NULL ,
 `haslo` VARCHAR( 1000 ) NOT NULL
 ) ENGINE = MYISAM ;

Teraz, kiedy mamy gotowy skrypt, musimy zmienić pierwszą część skryptu sesji - wszystko do komentarza Wlasciwy skrypt zamieniamy na:

<?php
	function czyIstnieje($login, $haslo)
	{
		
		$haslo = sha1($haslo);
		
   try
   {
      $pdo = new PDO('mysql:host=localhost;dbname=produkty', 'root', 'root');
      $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $stmt = $pdo -> query('SELECT id, login, haslo FROM sesje');
      foreach($stmt as $dane)
      {
 if($dane['login'] == $login && $dane['haslo'] == $haslo)
 {
 // O, jest ktos taki - zwroc jego ID
 return $dane['id'];
 /* Chcesz uzyc loginu uzytkownika? dodaj po inicjacji sesji
 $_SESSION['user'] = $user;
 oraz przed tym nawiasem klamrowym ponizej, ale po tym komentarzu
$user = $dane['user'];
 */
 }
      }
      $stmt -> closeCursor();
   }
   catch(PDOException $e)
   {
      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
   }

		
		// Jeżeli doszedłeś a tutaj, to takiego użytkownika nie ma
		return false;
	} // end czyIstnieje();

Aby utworzyć konta, należy utworzyć taki plik (pamiętaj, każdy może sobie utworzyć konto aż do kasacji):

 <?php

	try
	{
		if($_SERVER['REQUEST_METHOD'] == 'POST')
		{	
			$pdo = new PDO('mysql:host=localhost;dbname=produkty', 'root', 'root');
	      $stmt = $pdo -> query('SELECT id, login, haslo FROM sesje');
 $id = '1';
 foreach($stmt as $dane)
 {
 $id++;
 }
 $haslo = sha1($_POST['haslo']);
 $magic = get_magic_quotes_gpc();
 if ($magic != "1") $login = mysql_escape_string($_POST['login']);
      $stmt -> closeCursor();
			$add = $pdo -> exec('INSERT INTO `sesje` (`id`, `login`, `haslo`)	VALUES(
				\''.$id.'\',
				\''.$login.'\',
				\''.$haslo.'\')');
	
			if($add > 0)
			{
				echo 'Dodano? '.$ilosc;
			}
			else
			{
				echo 'Wystąpił błąd podczas dodawania rekordów!';
			}
		}
		else
		{
			echo '
			<form method="post" action="sesje_5.php">
			<p>Login: <input type="text" name="login"/></p>
			<p>Hasło: <input type="password" name="haslo"/></p>
			<p><input type="submit" value="Dodaj"/></p>
			</form>
			';	
		}
	}
	catch(PDOException $e)
	{
		echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
	}
 ?>