if stament met twee post methodes
Ik loop vast met een php code die ik moet maken heb jullie hulp daarbij nodig.
Wat er moet gebeuren is in de if statement moet twee post methoden staan naam en hash die mogen niet leeg zijn heb zelf ook opgezocht naar multiple conditions maar kwam er niet uit.
Controller:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Gewijzigd op 30/05/2018 12:02:14 door Jan Trent
Tenzij $test ergens eerder, en buiten het bovenstaande fragment, is gedeclareerd bestaat deze variabele nog niet.
In dat geval zal er een foutmelding (of waarschuwing, zo je wilt) optreden:
Quote:
Notice: Undefined variable: test in <script> on line <regel>
Zet voor de ontwikkeling altijd debugging aan zodat je dit soort bugs meteen lokaliseert, voer hiertoe de volgende code toe aan het begin van je script:
Een wellicht betere manier om te controleren of een formulier is verstuurd is de volgende:
Vervolgens valideer je allereerst de data, en als deze goed is verwerk je deze.
Indien er fouten optreden wordt een gebruiker (idealiter) teruggestuurd naar het formulier waar deze begrijpelijke foutmeldingen voorgeschoteld krijgt en waarbij de eerder ingevulde gegevens weer terug ingevuld zijn.
Ook is het handig om de verwerking van een formulier, of in het algemeen, het uitvoeren van een specifieke actie zoals:
- het tonen van een formulier
- het verwerken van een formulier
- het tonen van een bedankpagina
te compartimenteren.
En het liefst niet in één groot switch- of if-statement zodat je code één grote brei wordt, maar bijvoorbeeld door deze acties onder te brengen in aparte methoden van een klasse, of simpelweg door hier verschillende PHP-bestanden van te maken. Deze laatste variant creëert wel meerdere ingangen in je applicatie, en mogelijk ook meer overhead in de (vaste, herhalende) opbouw van je webpagina's.
Gewijzigd op 30/05/2018 15:06:28 door Thomas van den Heuvel
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
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if( $_POST['naam'] != '' && $_POST['hash'] != '' ) {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
?>
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if( $_POST['naam'] != '' && $_POST['hash'] != '' ) {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
?>
Wat ik nu moet doen is als je in naam en hash een spatie invult word hij gewoon toegevoegd dat mag niet gebeuren enige idee hoe ik dat kan oplossen?
Je bent met classes bezig, maar beheerst basis php kennis niet? Zoek je het niet beetje teveel op?
Bedankt Adoptive Solution , heb er niet zoveel ervaring mee vandaar.
Het nadeel van een blacklist is dat wanneer je een geval (een invoer of format die niet is toegestaan) vergeet dit de hele werking van de blacklist ongedaan maakt.
Een whitelist daarentegen schrijft precies voor wat wél is toegestaan.
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
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if ( trim($_POST['naam']) != '' && trim($_POST['hash'] != '' )) {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
?>
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if ( trim($_POST['naam']) != '' && trim($_POST['hash'] != '' )) {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
?>
Gewijzigd op 30/05/2018 17:23:31 door Jan Trent
Daarbij moet je eens kijken naar je code, er klopt geen hout van die trim van $_POST['hash'].
Gewijzigd op 30/05/2018 21:04:22 door Jan te Pas
Hierbij is het ook verstandig om van het Post/Redirect/Get patroon gebruik te maken. Dit houdt kortweg in dat nadat je iets POST je meteen redirect. Dit is voornamelijk, maar niet uitsluitend, bedoeld om dubbelposts tegen te gaan.
Bijvoorbeeld: $naam = mysqli_real_escape_string($conn, $naam);
Als je het meer bedoelt in de betekenis van escaping, m.a.w. de invoer van enige speciale betekenis ontdoen binnen een specifieke context, by all means. Gebruik voor elke context (HTML, SQL et cetera) voor ALLE output de juiste escaping-functionaliteit maar vooral ook: gebruik deze op de juiste manier!
real_escape_string() alleen is niet afdoende en is alleen "veilig" in combinatie met quotes, en is sowieso geen wondermiddel (interne link).
Jan te Pas op 31/05/2018 19:10:53:
Dan moet na posten de invoer worden gesantized ...
Is de Kerstman alweer in het land?
Dan ga ik volgende week alvast de oliebollen voorbakken!
Toevoeging op 31/05/2018 22:12:36:
En quoten voor de database......
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
30
31
32
33
34
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
30
31
32
33
34
<?php
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if (trim($_POST['naam']) != '' && trim($_POST['hash']) != '') {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
if (($_POST['naam']) != '') {
} else{
$errornaam = "Naam is niet ingevuld";
}
if (($_POST['hash']) != ''){
} else{
$errorhash = "</br> Hash is niet ingevuld";
}
?>
$leren = new Categorieen();
$leren->find_all();
$i = 1;
if (trim($_POST['naam']) != '' && trim($_POST['hash']) != '') {
if ($_POST['naam'] !== "test") {
$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];
$test->save();
} else {
$error = "Categorie is niet opgeslagen";
}
}
if (($_POST['naam']) != '') {
} else{
$errornaam = "Naam is niet ingevuld";
}
if (($_POST['hash']) != ''){
} else{
$errorhash = "</br> Hash is niet ingevuld";
}
?>
Gewijzigd op 01/06/2018 10:28:34 door Jan Trent
Lees je uberhaupt wel adviezen en tips van Thomas en Ben? Je blijft maar vragen stellen, zonder er ook maar iets van begrepen te hebben.
Begin eerst maar eens met documentatie van trim() te lezen voor je verder gaat.