if stament met twee post methodes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan  Trent

Jan Trent

30/05/2018 11:36:11
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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";
            }

    }

?>
Gewijzigd op 30/05/2018 12:02:14 door Jan Trent
 
PHP hulp

PHP hulp

23/04/2024 23:23:48
 
Adoptive Solution

Adoptive Solution

30/05/2018 14:34:59
Quote Anchor link
Zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if( $_POST['naam'] <> '' && $_POST['hash'] <> '' ) {
 
Thomas van den Heuvel

Thomas van den Heuvel

30/05/2018 15:05:56
Quote Anchor link
Dit is ook een beetje een rare:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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:
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
Gewijzigd op 30/05/2018 15:06:28 door Thomas van den Heuvel
 
Jan  Trent

Jan Trent

30/05/2018 15:41:33
Quote Anchor link
Het hoorde zo bedankt Adoptive Solution alleen een andere vergelijking!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
            }

    }

?>


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?
 
Adoptive Solution

Adoptive Solution

30/05/2018 15:57:35
 
Davier doe

Davier doe

30/05/2018 16:16:13
Quote Anchor link
Je bent met classes bezig, maar beheerst basis php kennis niet? Zoek je het niet beetje teveel op?
 
Jan  Trent

Jan Trent

30/05/2018 16:35:14
Quote Anchor link
Bedankt Adoptive Solution , heb er niet zoveel ervaring mee vandaar.
 
Thomas van den Heuvel

Thomas van den Heuvel

30/05/2018 16:35:48
Quote Anchor link
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.
 
Davier doe

Davier doe

30/05/2018 17:18:19
Quote Anchor link
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.
 
Jan  Trent

Jan Trent

30/05/2018 17:21:16
Quote Anchor link
Dat houdt me niet dom ik leer er meer van davier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
            }

    }

?>
Gewijzigd op 30/05/2018 17:23:31 door Jan Trent
 
Ben van Velzen

Ben van Velzen

30/05/2018 17:58:43
Quote Anchor link
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'].
 
Jan te Pas

Jan te Pas

30/05/2018 21:03:02
Quote Anchor link
Zo zo... we willen allemaal helpen toch? Even een tip om te testen of $_POST goed gebruikt is: if (isset($_POST[‘naam’])) { ...
Gewijzigd op 30/05/2018 21:04:22 door Jan te Pas
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2018 16:31:55
Quote Anchor link
Actually, een neutralere check om te controleren of er gePOST wordt is, zoals hierboven al is aangehaald:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // ...
}
?>

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.
 
Jan te Pas

Jan te Pas

31/05/2018 19:10:53
Quote Anchor link
En zorg er voor dat je de input valideert voor er kan worden gesubmit. Dan moet na posten de invoer worden gesantized voordat je het naar de database wegschrijft.

Bijvoorbeeld: $naam = mysqli_real_escape_string($conn, $naam);
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2018 19:40:48
Quote Anchor link
Sanitizing wordt misschien in meerdere betekenissen gebruikt, maar ik associeer dat toch voornamelijk met het inhoudelijk aanpassen van input, wat wat mij betreft eigenlijk nooit wenselijk is want daarmee geef je in feite aan dat de invoer niet klopte en je een poging onderneemt om dit te repareren. Je probeert dan recht te maken wat krom was. Ik zou dit soort invoer gewoon weigeren. Fout is fout.

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).
 
Ward van der Put
Moderator

Ward van der Put

31/05/2018 19:42:18
Quote Anchor 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!
 
Jan te Pas

Jan te Pas

31/05/2018 22:09:59
Quote Anchor link
Ja ja, ik bedoelde escapen. Stom hè? ja. Zo zo, ik heb al wel zin in oliebollen..

Toevoeging op 31/05/2018 22:12:36:

En quoten voor de database......
 
Jan  Trent

Jan Trent

01/06/2018 10:14:42
Quote Anchor link
Wat ik nu gedaan heb is dat die de meldingen van naam en hash 2x hetzelfde checkt weet iemand hoe dit 1 keer kan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";
        }


?>
Gewijzigd op 01/06/2018 10:28:34 door Jan Trent
 
Davier doe

Davier doe

01/06/2018 11:05:57
Quote Anchor link
@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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.