Beste allen ,

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:

<?php
$leren = new Categorieen();
$leren->find_all();
$i = 1;

if($_POST['naam'] || $_POST['hash']) {

if ($test->naam !== "test") {

$test = new Categorieen();
$test->naam = $_POST['naam'];
$test->hash = $_POST['hash'];

$test->save();

} else {
$error = "Categorie is niet opgeslagen";
}

}
?>
Zoiets?

if( $_POST['naam'] <> '' && $_POST['hash'] <> '' ) {
Dit is ook een beetje een rare:
<?php
if ($test->naam !== "test") {
    $test = new Categorieen();
?>

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:
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:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>


Een wellicht betere manier om te controleren of een formulier is verstuurd is de volgende:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // ...
}
?>

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.
Het hoorde zo bedankt Adoptive Solution alleen een andere vergelijking!

<?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";
}

}
?>

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 is doorgaans beter om niet te controleren wat niet is toegestaan (blacklist) maar juist te controleren wat wel is toegestaan (whitelist).

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.
Het is makkelijk dat Adoptive Solution met een oplossing komt dat jou 'dom' houdt, maar veel heb je er zelf niet aan. Overigens had je je laatste vraag makkelijk kunnen googlen.
Dat houdt me niet dom ik leer er meer van davier.

<?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";
}

}
?>
Je leert hier dus niks van, want er is al aangehaald dat je niet kunt vertrouwen dat $_POST variabelen bestaan. Hier zul je altijd op moeten controleren.

Daarbij moet je eens kijken naar je code, er klopt geen hout van die trim van $_POST['hash'].

Reageren