Wat is beter?
Wij hebben een leraar.
Hij zegt het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// goed
$naam = $_POST['naam'];
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
// goed
$naam = $_POST['naam'];
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
Citaat: Als je dit op een toets doet (de foute manier) dan krijg je een onvoldoende
Wat zeggen jullie
Geheugenverspilling en veel meer typwerk. Tevens meer kans op fouten door typfouten.
Gewijzigd op 10/10/2011 16:14:51 door - Ariën -
Eigenlijk word er gezegd dat dat veiliger is .
Lol, dan mag hij mij wel eens uitleggen waarom...
Gerhard l op 10/10/2011 16:39:52:
Lol, dan mag hij mij wel eens uitleggen waarom...
Ja, en mij ook.
Vraag eens aan hem waarom het bovenste veiliger is dan? :p
Meeste leraren stammen af van een tijdperk van 20 jaar geleden toen er nog hele andere methodes waren :)
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// goed
$naam = $_POST['naam'];
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
// goed
$naam = $_POST['naam'];
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
Dit is complete onzin. Hetgene wat hier als "fout" staat is beter dan hetgene wat als "goed" staat, omdat zoals SanThe al zei, er onnodige geheugenverspilling plaatsvindt.
Wanneer het argument van de leraar eventueel wel zou opgaan is in dit geval:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// goed
$naam = strip_tags($_POST['naam']);
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
// goed
$naam = strip_tags($_POST['naam']);
$_SESSION['naam'] = $naam;
//fout
$_SESSION['naam'] = $_POST['naam'];
?>
Hier voer je eerst een beveiligingshandeling uit, voordat je de variabele in de sessie stopt. Dit heeft een meerwaarde, maar het voorbeeldje van jouw leraar raakt kant noch wal.
Gewijzigd op 11/10/2011 09:22:30 door Jordi Kroon
lol, die kerel faalt dan wel heel erg hard
Jordi kroon op 10/10/2011 21:54:47:
Hij zegt ook dat $_SESSION vars niet in een query mogen staan . Omdat je dan errors krijgt.
Misschien eens even met de directie van je school praten en zeggen dat die leraar klinkklare onzin verkoopt?
Ozzie PHP op 10/10/2011 22:13:08:
Misschien eens even met de directie van je school praten en zeggen dat die leraar klinkklare onzin verkoopt?
Jordi kroon op 10/10/2011 21:54:47:
Hij zegt ook dat $_SESSION vars niet in een query mogen staan . Omdat je dan errors krijgt.
Misschien eens even met de directie van je school praten en zeggen dat die leraar klinkklare onzin verkoopt?
Idd...
Is het soms je geschiedenisleraar?
- SanThe - op 10/10/2011 23:03:30:
Is het soms je geschiedenisleraar?
I lolled
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
session_start();
unset($_SESSION['id']);
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(empty($_POST['username'])){
echo "Geen username op gegeven.<br />";
}else{
if(empty($_POST['password'])){
echo "Geen password op gegeven.<br />";
}else{
$query = mysql_query("INSERT INTO members(username,password) VALUES('".mysql_real_escape_string($_POST['username'])."','".mysql_real_escape_string(md5($_POST['password']))."')");
if($query){
header("location: index.php");
}else{
echo "Registratie mislukt.<br />Probeer het opnieuw, klik <a href='index.php'>hier</a>";
}
}
}
}else{
// terug form
}
?>
session_start();
unset($_SESSION['id']);
include 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(empty($_POST['username'])){
echo "Geen username op gegeven.<br />";
}else{
if(empty($_POST['password'])){
echo "Geen password op gegeven.<br />";
}else{
$query = mysql_query("INSERT INTO members(username,password) VALUES('".mysql_real_escape_string($_POST['username'])."','".mysql_real_escape_string(md5($_POST['password']))."')");
if($query){
header("location: index.php");
}else{
echo "Registratie mislukt.<br />Probeer het opnieuw, klik <a href='index.php'>hier</a>";
}
}
}
}else{
// terug form
}
?>
Je code is dan niet helemaal goed, maar $_POST data in een query is niets mis mee als je het beveiligd?
@gerhard, ben pas 4 weken bezig met php. Geloof graag dat het hier en daar niet klopt. Maar deze discussie lezende weet ik niet hoe ik nu door moet gaan met programmeren. Haar methodes hanteren of luisteren naar het advies van Jordi en andere klasgenoten.
Toevoeging op 11/10/2011 13:43:54:
Rick van Hout op 11/10/2011 13:35:12:
Code (php)
Dit scriptje van Rick (uit een ander topic gehaald) is een mooi voorbeeld van het nuttig gebruik van een extra variable. Hier geeft het een helder en duidelijk overzicht. Zeer netjes.
Roel Sluper op 11/10/2011 09:38:55:
Ik zit bij Jordi in de klas. Onze docente zegt dat de onderstaande code een onvoldoende zou krijgen. Simpelweg omdat er _POST data in een query word gebruikt. :S
Het hangt er vanaf of je de _POST data hebt gecontroleerd. Als bezoekers van jouw website zich moeten inschrijven en daarbij een gebruikersnaam en wachtwoord moeten verzinnen, dan wil je dat de gebruikersnaam en het wachtwoord aan bepaalde eisen voldoen. Bijvoorbeeld: de gebruikersnaam moet minimaal 6 en hooguit 8 tekens bevatten en het wachtwoord moet minimaal 6 en hooguit 8 tekens bevatten, en daarnaast moet het wachtwoord bestaan uit tenminste 1 letter en tenminste 1 cijfer.
Als je nu de _POST data meteen in de query zet, dus zonder deze te controleren, dan kan het zijn dat iemand een gebruikersnaam van 100 tekens invoert, of het kan zo zijn dat iemand een wachtwoord invoert waar geen cijfers inzitten. Daarom is het een goede gewoonte om _POST data altijd eerst te controleren zodat je weet of de data voldoet aan jouw eisen. Ik denk dat dat is wat jouw lerares bedoelt. Dat je dus niet zomaar de _POST data in een query mag gebruiken zonder deze data eerst gecontroleerd te hebben. Echter, als je de _POST data hebt gecontroleerd en deze aan jouw eisen voldoet, dan mag je de _POST data wel in de query gebruiken. Ik hoop dat het zo wat duidelijker is.
Gewijzigd op 11/10/2011 14:46:29 door Ozzie PHP
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$naam = $_POST['naam'];
$error = array();
if(!strlen($naam) <5 || !strlen($naam) > 20)
{
$error[] = 'veld naam is niet goed';
}
if(!$error)
{
//insert query met $naam
}
}
?>
<form method='post' action=''>
<input type='text' name='naam' />
<input type='submit' value='submit' />
</form>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$naam = $_POST['naam'];
$error = array();
if(!strlen($naam) <5 || !strlen($naam) > 20)
{
$error[] = 'veld naam is niet goed';
}
if(!$error)
{
//insert query met $naam
}
}
?>
<form method='post' action=''>
<input type='text' name='naam' />
<input type='submit' value='submit' />
</form>
Dit is dus een voldoende voor mij want $naam is gedefineerd met $_POST['naam'];
ook al vind ik is dat $_POST['naam'] ook direct in de controle + query kan
waarom staat bas kreleger als last post? ik zie hem hier niet tussen staan.