Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

PHP a MySQL Připojení k databázi:

Podobné prezentace


Prezentace na téma: "PHP a MySQL Připojení k databázi:"— Transkript prezentace:

1 PHP a MySQL Připojení k databázi:
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD); mysql_select_db($SQL_DBNAME); př. Kontrola spojení: $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');     if(!is_resource($link)) {         echo "Failed to connect to the server\n"; Uzavření spojení MySQL_Close(); MySQL_Close($link);

2 Získání výsledků získání pole, všech řádků
$vysledek=mysql_query("select * from psc where psc=".$_POST["psc"]); $vysledek = mysql_query($sql,$connection) or die ("Nemohu provést dotaz: “ . $query_error); zjištění počtu vrácených řádků $radku=mysql_num_rows($vysledek); if ($radku==0) echo "PSČ…

3 Procházení řádků while ($zaznam=MySQL_Fetch_Array($vysledek)) { echo …; } $zaznam je pole sloupců, hodnot řádku!

4 Výpis hodnot echo $zaznam[‘id’];
echo $zaznam[‘prijmeni’] . ‘, ’ . $zaznam[‘jmeno’]; echo “<a href=\“edituser.php?ID_user=\“ . $zaznam[‘id’] . “<\a>”; … $ID=$_GET[‘ID_user’] … $sql=“SELECT * FROM admins WHERE ID=$ID”;

5 Stránkování zjistit počet záznamů omezit dotazem přes LIMIT
předávat přes URL list.php?page=2 SELECT count(ID) FROM … SELECT … LIMIT 11,10

6 Neukládání hesel Pro případ krádeže dat: hesla neukládat!
Použít jednostrannou funkci – hash př.: $heslo=md5($_POST[‘heslo’]); $heslo=md5($_POST[‘heslo’] . ‘sul’); $sql=“SELECT * FROM usernames WHERE user=‘$username’ AND psw=$heslo”

7 SQL injection Kontrolovat hodnoty, typy!
settype($offset, 'integer'); $query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;", $offset); Kontrolovat uvozovky, escape sekvence mysql_escape_string(), sql_escape_string(), addslashes(), str_replace($search, $replace)… př.: $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",             mysql_real_escape_string($user),             mysql_real_escape_string($password)); Nezveřejňovat databázové schéma, SQL dotazy…

8 SQL injection, ochrana ve funkci
<?php function sanitize($input){     if(is_array($input)){         foreach($input as $k=>$i){             $output[$k]=sanitize($i);         }     }     else{         if(get_magic_quotes_gpc()){             $input=stripslashes($input);         }                $output=mysql_real_escape_string($input);     }            return $output; } ?> // use: if you are going to use $_POST, $_GET, $_COOKIE or $_REQUEST, include the appropriate line first. $_POST=sanitize($_POST); $_GET=sanitize($_GET); $_COOKIE=sanitize($_COOKIE); $_REQUEST=sanitize($_REQUEST);

9 Vložení uživatele do databáze
if(IsSet($sent)): require("db.php"); $write = true; if($name=="" || $password=="" || $password_2==""): $error = 'Musíte vyplnit všechny povinné údaje - označeny tučným písmem.'; $write = false; elseif($password!=$password_2): $error = 'Heslo nebylo zadáno správně.'; $write = false; else: $user = MySQL_Query("SELECT name FROM users") or die($query_error); while($entry = MySQL_Fetch_Array($user)): if(StrToLower($name)==StrToLower($entry["name"])): $error = 'Toto uživ. jméno již existuje, vyberte si prosím jiné.'; $write = false; break; endif; endwhile; endif; if($write): …

10 Vložení uživatele do databáze
… if($write): $add = MySQL_Query("INSERT INTO users VALUES ('$nick', '$name', '$password', '$ ', '$icq', '30', '$avatar', '$xfire', '$skype', '$sex')") or die(mysql_error()); SetCookie("cookie_author", $nick); SetCookie("cookie_ ", $ ); echo '<html><head><META HTTP-EQUIV="Refresh" CONTENT="5; URL=index.php"> <body> <b>Registrace proběhla úspěšně</b>:<br><br> Jméno:' . $name . '<br> ' . $ . '<br> Za 5 vteřin budete přesměrováni. </body></head></html>'; endif; MySQL_Close();

11 GET, POST opakování <input name="username" value="moje jmeno" />
<input type="submit" name="akce" value="OK" /> V PHP zaslané hodnoty získáme z pole: $user=$_GET["username"] pro <form action="test.php" method="get">… …test.php?username=moje%20jmeno&akce=OK data součástí URL (viditelná, omezeno délkou) $user=$_POST["username"] pro <form action="test.php" method="post">… data součástí HTTP požadavku (neviditelná v URL, uuencoded, "neomezená" délka dle URL)

12 Upload Souborů //příp. is_uploaded_file($_FILES['soubor']['tmp_name'])
<? … načtení proměnných z pole $HTTP_POST_FILES … if($_POST["akce"]=="Upload") { //příp. is_uploaded_file($_FILES['soubor']['tmp_name']) if ($_FILES["soubor"]["mime_type"]=="text/plain" or $_FILES["soubor"]["mime_type"]="text/html") { if (copy($_FILES["soubor"]["tmp_name"],"data/".$_FILES["soubor"]["name"])) { print "Soubor " . $_FILES["soubor"]["name"] . " o velikosti " . $_FILES["soubor"]["size"] . " bajtů byl úspěšně nahrán na server<br>";     }     else {       print "Při nahrávání souboru došlo k chybě!<br/>";     }   }   else {     print "Soubor není požadového MIME typu!<br/>";   } } … příp. při podmínce else ($_POST["akce"] == "Upload") řešit vypsání formuláře, při špatném mimetype smazat ?>

13 Pozor na… SQL Injection opětovné vkládání při refresh
kontrolovat obsah, hodnoty (viz Databáze, funkce mysql_real_escape_string(), settype()) opětovné vkládání při refresh <?php … // přesměrování na stránku s výsledkem header("Location: vysledek.php", true, 303);?> SELECT Count(ID) WHERE … -> INSERT/UPDATE Podvrhy při uploadu (is_uploaded_file()) Maximální velikost, upload více souborů viz manuál PHP, odkaz na konci prezentace

14 Identifikace, autentizace, autorizace
Jak se liší? Identifikace – kdo jsi? Autentizace – jsi skutečně ten, za koho se vydáváš Autorizace – máš sem skutečně přístup? Autorizace se sessions a MySQL

15 Autorizace I. soubor .htaccess pro Apache
platí pro Apache – adresář a podadresáře dále umí blokování přístupu z IP adres, redirect, vlastní chybové stránky aj. viz apache httpd.conf

16 Autorizace II. HTTP protokolem
proměnné $PHP_AUTH_USER, $PHP_AUTH_PW a $PHP_AUTH_TYPE Header("HTTP/ Unauthorized"); Header("WWW-Authenticate: Basic realm=\"Stranky XYZ\""); die("Neautorizovaný přístup\");

17 Autorizace III. vlastním formulářem použít SSL
pro uložení hash použít Sessions/Cookies a MySQL kontrolovat timeout, IP adresu pozor na ukládání username do Cookies aj. spoléhání na Cookies/Sessions

18 Kontrola přihlášení se sessions
Nutno kontrolovat, zda session existuje z dřívějška Možno uložit do session a kontrolovat IP adresu, zda nedošlo ke změně, a čas session_start(); if ($_SESSION['isvalid']!=1) { // pokud testovací proměnná neexistuje nebo nemá správnou hodnotu, vynutit např. nové přihlášení   Header('Location:   Exit; }

19 PHP a Mail if (!ereg("^.+@.+\\..+$", $email)) {
echo "Zadali jste je neplatný <BR>"; exit; } $hlavicky .= "From: ".$ ."\n"; // $hlavicky .= "Content-Type: text/html; charset=utf-8\n"; $predmet, $zprava, $hlavicky);


Stáhnout ppt "PHP a MySQL Připojení k databázi:"

Podobné prezentace


Reklamy Google