Tutorials
Hoe zet je iets correct op phphulp
Deze tutorial is er om te laten lezen hoe je iets correct plaatst op PHPhulp. Deze tutorial is geschreven met uitleg en voorbeelden.
Pagina 1
Als je het op phphulp zet :
- Zorg voor een goede titel.
- Zorg voor een uitgebreide beschrijving van het probleem.
- Plaats alleen de relevante code.
- Doe iets met de tips.
- Plaats geen 5 jaar oude scripts.
Pagina 2
Voordat je iets op phphulp post :
Voordat je iets op phphulp post :
- Ik krijg een fout: Lees deze goed door ! ken je de fout niet zoek hem op.
Meer hierover volgt in de volgende pagina
- Variabelen buiten de quotes houden.
Voorbeeld:
<?php
$naam = 'iedereen';
//goed
echo 'hallo'.$naam;
//fout
echo 'hallo $naam';
?>
- Gebruik comentaar dan weet je wat je fout doet.
Comentaar kan je toevoegen door:
in html : <!-- en af te sluiten met -->
in php : // hier je comentaar
# hier je komentaar #
- Pas op voor mysql injection.
Voorbeeld:
<?php
//goed
$query= "SELECT u_name, u_pass FROM SFI_users WHERE u_name='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".$_POST['naam']."'";
?>
- Gebruik geen * dit is een wildcard selecteer wat je wilt.
<?php
//goed
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT * FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
?>
- Zet error reporting aan.
dit doe je met:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
- Binnen je INSERT,UPDATE,DELETE etc geen quotes.
<?php
//goed
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT 'colom1', 'colom2' FROM 'table1' WHERE 'colom1='".mysql_real_escape_string($_POST['naam'])."''";
?>
- Niet onnodig variabelen aanmaken.
<?php
//goed
Echo $_POST['naam'];
//fout
$naam = $_POST['naam']
echo $naam;
?>
- Gebruik een salt + pepper voor het coderen van een wachtwoord
<?php
$pass = '12345';
$salt = 'Een Hele LaNgE Reeks WiLlEkEUriGe Van LeTTeRs En 12348';
$pepper = 'Een Andere LaNgE Reeks Van LeTTeRs En 12348';
$gecodeerd = sha1($salt . $pass . $pepper);
?>
- controleren of er gepost is doe je met if( $_SERVER['REQUEST_METHOD'] == 'POST' ) Niet met if(isset($_POST['submit']))
- gebruik vernieuwde functies dus niet bijv eregi maar preg
Zie hier de tutorial over preg_match :php.net preg_match
- gebruik [ignore]<?php [/ignore] in plaats van [ignore]<? [/ignore] - Waarom? sommige servers ondersteunen geen shorttags leer het daarom meteen goed aan
- veel mensen gebruiken in hun htmlform action=[ignore]<?php echo $_SERVER['PHP_SELF']; ?>[/ignore] Dit is niet verantwoord wegens XSS Meer hierover zie deze url
- Ik krijg een fout: Lees deze goed door ! ken je de fout niet zoek hem op.
Meer hierover volgt in de volgende pagina
- Variabelen buiten de quotes houden.
Voorbeeld:
<?php
$naam = 'iedereen';
//goed
echo 'hallo'.$naam;
//fout
echo 'hallo $naam';
?>
- Gebruik comentaar dan weet je wat je fout doet.
Comentaar kan je toevoegen door:
in html : <!-- en af te sluiten met -->
in php : // hier je comentaar
# hier je komentaar #
- Pas op voor mysql injection.
Voorbeeld:
<?php
//goed
$query= "SELECT u_name, u_pass FROM SFI_users WHERE u_name='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".$_POST['naam']."'";
?>
- Gebruik geen * dit is een wildcard selecteer wat je wilt.
<?php
//goed
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT * FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
?>
- Zet error reporting aan.
dit doe je met:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
- Binnen je INSERT,UPDATE,DELETE etc geen quotes.
<?php
//goed
$query= "SELECT colom1, colom2 FROM table1 WHERE colom1='".mysql_real_escape_string($_POST['naam'])."'";
//fout
$query= "SELECT 'colom1', 'colom2' FROM 'table1' WHERE 'colom1='".mysql_real_escape_string($_POST['naam'])."''";
?>
- Niet onnodig variabelen aanmaken.
<?php
//goed
Echo $_POST['naam'];
//fout
$naam = $_POST['naam']
echo $naam;
?>
- Gebruik een salt + pepper voor het coderen van een wachtwoord
<?php
$pass = '12345';
$salt = 'Een Hele LaNgE Reeks WiLlEkEUriGe Van LeTTeRs En 12348';
$pepper = 'Een Andere LaNgE Reeks Van LeTTeRs En 12348';
$gecodeerd = sha1($salt . $pass . $pepper);
?>
- controleren of er gepost is doe je met if( $_SERVER['REQUEST_METHOD'] == 'POST' ) Niet met if(isset($_POST['submit']))
- gebruik vernieuwde functies dus niet bijv eregi maar preg
Zie hier de tutorial over preg_match :php.net preg_match
- gebruik [ignore]<?php [/ignore] in plaats van [ignore]<? [/ignore] - Waarom? sommige servers ondersteunen geen shorttags leer het daarom meteen goed aan
- veel mensen gebruiken in hun htmlform action=[ignore]<?php echo $_SERVER['PHP_SELF']; ?>[/ignore] Dit is niet verantwoord wegens XSS Meer hierover zie deze url
Pagina 3
Fouten en oplossen
Meest voorkomende foutmeldingen en hoe los je ze op:
Parse errors:
In het geval van parse errors klopt er vaak iets niet aan de syntax van je PHP script. Laten we eens naar een voorbeeld kijken:
<?php
ini_set('display_errors', 'On'); // error reporting aan
error_reporting(E_ALL);
$sNaam = 'Kees'
echo $sNaam;
?>
Dit script geeft de volgende foutmelding:
Parse error: syntax error, unexpected T_ECHO in /pad/naar/bestand.php on line 6
De foutmelding geeft vrij veel informatie over de fout die opgetreden is.
Het betreft een parse error en wel door een fout in de syntax. PHP verwacht de echo op regel 6 om een of andere reden niet.
En dat klopt ook wel, in het script is vergeten om regel 5 netjes met een ; af te sluiten.
Unexpected $end
Deze foutmelding betekent dat er een onverwacht einde is
Wat vaak betekent dat je ergens een } bent vergeten
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
if(isset($_GET['naam']))
{
echo $_GET['naam'];
?>
Foutmelding: Parse error: syntax error, unexpected $end in /pad/naar/bestand.php on line 8
Dit kun je oplossen door simpelweg een } na de echo $_GET['naam']; te zetten
Undefined variable
Deze error betekent dat er ergens in het script een variabele is die niet bestaat
zoals hier:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
Echo $variable;
?>
Notice: Undefined variable: variable in /pad/naar/bestand.php on line 5
dit kun je oplossen door de variabel aantemaken:
$variable = 'geef hem een waarde';
warnings
dit zijn fouten in het script alleen geen fatale fouten dus het script word niet gestopt
foutmelding:
Warning: include(bestaat_niet.php) [function.include]: failed to open stream: No such file or directory in /pad/naar/bestand.php on line 5
Warning: include() [function.include]: Failed opening 'bestaat_niet.php' for inclusion (include_path='.:') in /pad/naar/bestand.php on line 5
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include 'bestaat_niet.php';
?>
dit komt omdat het bestand wat je include niet bestaat
Headers already sent :
Een lastige bug zeker voor beginners
dit komt omdat een kleine spatie al voor problemen kan zorgen
Zorg daarom dat je goed oplet
voorbeeld:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
echo 'Hello World!';
header('Refresh: 3; url=index.php');
?>
Warning: Cannot modify header information - headers already sent by (output started at /pad/naar/bestand.php:5) in /pad/naar/bestand.php on line 6
Bij deze error komt het omdat er een echo voor de header staat dus moeten we de echo en de header omdraaien
Pagina 4
slot
Ik hoop dat sommige hier even naar toe gewezen kunnen worden
zodat je niet steeds een lijstje hoeft te maken.
zodat je niet steeds een lijstje hoeft te maken.
Reacties
0