Programmeren in PHP/MySQL in PHP: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Erwin (overleg | bijdragen)
k titel 'Programmeren in PHP/MySql in PHP' gewijzigd in 'Programmeren in PHP/MySQL in PHP': Gebruikelijke spelling
Erwin (overleg | bijdragen)
k MySql => (MySQL, mysql)
Regel 1:
{{PiPHP}}
 
=MySqlMySQL verbinding in PHP=
Nu we de basisfuncties kennen, kunnen we al een simpele website opzetten. Een hoop van deze websites zullen een manier nodig hebben om met de gebruiker te communiceren of om de website te personaliseren. Of om bijvoorbeeld een gastenboek te maken, zoals wij aan de hand van deze les, stap voor stap gaan doen.
 
Regel 16:
 
De conventie is om deze in een configuratiebestand te zetten. We hebben nog geen verbinding gemaakt, alleen de gegevens in een [[Programmeren_in_PHP/Inleiding#Associatieve_lijsten|associatieve array]] gezet, zodat we ze makkelijk terug kunnen vinden.
Om verbinding te maken met een database heeft PHP voor iedere database een hoop functies aan boord. Wij gaan die voor MySqlMySQL gebruiken, deze beginnen met "MySql_mysql_" gevolgd door het doel, bijvoorbeeld MySql_connectmysql_connect().
Omdat er natuurlijk het een en ander fout kan gaan met het maken van de verbinding moeten we ook zorgen voor een goede foutafhandeling, dat doen we met trigger_error(). Omdat die functie makkelijk aan te passen is en standaard een hoop extra informatie kan leveren over de foutmelding.
Als je klaar bent met het gebruik van de database is het netjes om de verbinding te sluiten, PHP doet dat, als het niet door jou gebeurt, zelf. Toch is het niet netjes hier op te vertrouwen. Een verbinding sluiten doen we met MySql_closemysql_close().
<source lang=php>
<?php
Regel 25:
$_CONFIG["Host"] = 'localhost';
 
$Verbinding = MySql_connectmysql_connect($_CONFIG["Host"], $_CONFIG["Username"], $_CONFIG["Password"]);
 
if($Verbinding == false) // Verbinding is mislukt!
Regel 32:
}
 
MySql_closemysql_close($Verbinding);
?>
</source>
Regel 43:
$_CONFIG["Host"] = 'localhost';
 
$Verbinding = MySql_connectmysql_connect($_CONFIG["Host"], $_CONFIG["Username"], $_CONFIG["Password"]) or die("Kan geen verbinding maken met de database");
MySql_closemysql_close($Verbinding);
?>
</source>
Regel 50:
Als het goed is levert het vorige programma geen tekst op als je het uitvoert, dat betekent dat de verbinding gelukt is. Als het niet lukt kan dit een aantal oorzaken hebben:
* De gegevens in $_CONFIG zijn fout, probeer dat eerst goed te krijgen.
* Je gebruikt een verouderde manier om verbinding met MySqlMySQL te maken, vraag aan de administrator van de database om een wachtwoord in te stellen met OLD_PASSWORD.
 
==Database aanmaken==
Regel 57:
<source lang=mysql>CREATE DATABASE db_name</source>
 
Waarbij db_name de uiteindelijke naam voor de database is. Ook gaan we daarvoor een regel aan de $_CONFIG array toevoegen met daarin de te gebruiken database. Ook wordt dit onze eerste echte query in MySqlMySQL.
 
<source lang=php>
Regel 89:
</source>
 
Als het goed is, komt er nu "De database is succesvol aangemaakt" op je scherm te staan. Om de SQL-query te versturen gebruiken we MySql_querymysql_query, die als eerste argument de query wil en als tweede argument wil MySql_querymysql_query de verbinding, zodat hij weet waar de query heen gestuurd moet worden. MySql_querymysql_query geeft, als de query gelukt is een "identifier" terug, waar de opgehaalde rows in staan. Of false als de query mislukt is.
 
Zoals je wellicht gezien hebt, gebruiken we ook een andere functie. Namelijk MySql_escape_stringmysql_escape_string, deze zorgt er voor dat er geen "foute" tekens in je query terechtkomen en dat de query daardoor niet uitgevoerd wil worden. Ook lost deze functie in een later stadium een groot deel van de database beveiligingsproblemen op.
 
==De tabel aanmaken==
Regel 173:
</source>
 
Een functie is er nog bij gekomen, en dat is mysql_select_db, om aan te geven welke database we willen gebruiken om de tabel in aan te maken. MySql_Select_Dbmysql_select_db geeft true terug als het selecteren van de database gelukt is, als het mislukt krijg je false terug. Dus daar kun je mooi op testen met een if-statement.
 
==De tabel vullen met test data==
Regel 315:
$query = "SELECT * FROM `table` WHERE `x` = " . $waarde
 
Hier kun je alles in de variabele $waarde zetten, ook bijvoorbeeld de string " 1 OR 1=1" die er voor zorgt dat alle gegevens uit de hele tabel worden opgevraagd en niet alleen de gegevens die voldoen aan de voorwaarde die wij in gedachten hadden. Nou is dat niet zo'n ramp in dit geval, omdat het geen gegevens verwijdert uit onze query. Daar steekt MySqlMySQL zelf namelijk een stokje voor. Normaal zou je namelijk een query 'koppelen' door het ; teken, als je $waarde dan in "1; DELETE * FROM table" verandert, zie je de bui al hangen? Maar, omdat MySqlMySQL niet twee query's kan verwerken die gescheiden zijn door een ; werkt dit niet.
Om toch een groot deel van de fouten te voorkomen, meest voorkomende is het injecteren van een apostrof (') in de query, om simpelweg te kijken of MySqlMySQL over z'n nek gaat, gebruiken we de functie [http://nl3.php.net/mysql_real_escape_string mysql_real_escape_string], in combinatie met de functie [http://nl3.php.net/array_map array_map] omdat we alle gegevens uit $_POST in de SQL query gaan gebruiken.
De aanroep wordt dan dus:
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.