Problemen met Notice: Undefined index: A1 in ... on line 22

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

- SanThe -

- SanThe -

08/10/2019 17:25:09
Quote Anchor link
Als een checkbox niet is aangevinkt zit die ook niet in $_POST.
 
PHP hulp

PHP hulp

24/04/2024 04:44:30
 
Michael -

Michael -

08/10/2019 17:32:24
Quote Anchor link
Zoiets zou het moeten doen. Al verdient het nog geen schoonheidsprijs :-) Inderdaad controle of een veld gevuld is zoals Arien zegt. En de checkboxen op deze manier werkt niet. Waarschijnlijk bedoel je een "radio".

EDIT: Heb je de opmerking van SanThe eerder ook gelezen? geslacht vs Geslacht. Het is hoofdlettergevoelig. Dus als je een vrouw kies, krijg je ook een foutmelding.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    //echo'<pre>';print_r($_POST);echo'</pre>';
    
    if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
        echo "Gelieve alle vragen te beantwoorden.";
    }
else {
    
        $connection = mysqli_connect ('localhost', 'root', '', 'wolf');     /* 'Servernaam', 'gebruikersnaam', 'wachtwoord', 'databasenaam' */
        if (!$connection) {
            die ('connection failed');}
        
        $query = "INSERT
            INTO
                klantentevredenheid_2019
                (
                Email,
                Voornaam,
                Achternaam,
                Geslacht,
                Postcode,
                A1,
                A2,
                A3,
                A4,
                A5,
                A6,
                A7,
                A8,
                A9
                )
            VALUES
                (
                '"
.mysqli_real_escape_string($connection, $_POST['Email'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Voornaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Achternaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Geslacht'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Postcode'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A1'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A2'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A3'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A4'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A5'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A6'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A7'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A8'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A9'])."'
                )"
;        /*ingevulde waarde */
        
        $result = mysqli_query ($connection, $query);
        if (!$result) {
            die ('query failed' . mysqli_error());
        }

            
        echo $query;
        
    }
}


?>
Gewijzigd op 08/10/2019 20:35:28 door Michael -
 
Kristof Bruyneel

Kristof Bruyneel

08/10/2019 17:35:54
Quote Anchor link
- Ariën - op 08/10/2019 17:21:40:
Laat je relevante code nu eens zien tussen code-tags? En heb je mijn validatie al toegepast?

let ook op SQL-injection!!!!


Laat je relevante code nu eens zien tussen code-tags? Wat bedoel je met relevante code?
Heb je mijn validatie al toegepast? Ik heb je check met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    if(trim($_POST['Email'])=="") {
    echo "Is niet ingevuld";
        }

    ?>
toegepast en als ik niets invul krijg ik je boodschap "is niet ingevuld" en als ik wel iets invul krijg ik geen enkele boodschap.

SQL injectie: Waar in mijn query zet ik mysqli_real_escape_string?

Ik begrijp niet goed hoe ik die if-elseif-elseif-else constructie moet inbouwen?



Toevoeging op 08/10/2019 17:38:31:

Oei, ik zie dat er al antwoord geschreven is op mijn vragen toen ik mijn vragen naar Ariën nog aan het schrijven was. :)
 
Michael -

Michael -

08/10/2019 17:40:57
Quote Anchor link
Kristof Bruyneel op 08/10/2019 17:35:54:

SQL injectie: Waar in mijn query zet ik mysqli_real_escape_string?



Zie mijn vorige post.

Kristof Bruyneel op 08/10/2019 17:35:54:
Ik begrijp niet goed hoe ik die if-elseif-elseif-else constructie moet inbouwen?


Je kunt dit op meerdere manieren doen. Zoals je nu hebt geef je een foutmelding "Niet alles ingevuld"
Je kunt ook zeggen "Voornaam niet ingevuld" "Achternaam niet ingevuld" etc.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if(trim($_POST['Email'])=="") {
    echo "E-mailadres is niet ingevuld";
}

if(trim($_POST['Voornaam'])=="") {
    echo "Voornaam is niet ingevuld";
}

?>

etc.
Je kunt dit ook met else-if maar dan krijg je de foutmeldingen een voor een.
 
- Ariën  -
Beheerder

- Ariën -

08/10/2019 17:45:25
Quote Anchor link
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
<?php
if (isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
// Alle velden bestaan, start de validatie

    // Simpele validatie

    if(trim($_POST['Voornaam'])=="") {
            echo "Voornaam is niet ingevuld<br>";
    }
elseif(trim($_POST['Email'])=="") {
        echo "Email is niet ingevuld<br>";
    }
else {
    // Er wordt aan alle validatie-controles voldaan. Voer hier je query uit, en toon een melding dat het gelukt is.
    }

}

?>


Of nog beter: Sla ze op in een array, en lees de array uit en kijk of de error-array niet gevuld is (count($array)==0) en voer alles uit. Dan kan je in één klap alle foutmeldingen op een rij tonen, en eventueel in je formulier verwerken, door velden te laten oplichten.
Gewijzigd op 08/10/2019 17:47:46 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

08/10/2019 17:47:27
Quote Anchor link
Twee dingen.

#1
Als die vragen A1 t/m B9 allemaal soortgelijke HTML produceren, wordt het dan niet eens tijd voor een arraytje in PHP die alle HTML genereert in een enkele of dubbele loop?

#2
Voordat je alles in de database probeert te frommelen en je applicatie vervolgens ontploft loont het de moeite om $_POST en de opgebouwde query eerst eens te inspecteren. Dan kun je namelijk precies zien waar er dingen foutgaan. Dump deze data eens naar je scherm. Dit heet ook wel debuggen. Nu ben je tegen een trits foutmeldingen aan het staren waarvan je niet weet waar deze precies vandaan komen. Het wordt dan (hoog) tijd dat je al je data gaat inspecteren voordat je er iets mee probeert te doen.

En ja, je formulierdata eerst valideren voordat je die ergens in probeert te duwen loont wellicht ook de moeite. Anders past iets mogelijk op voorhand al niet...
Gewijzigd op 08/10/2019 17:50:15 door Thomas van den Heuvel
 
Kristof Bruyneel

Kristof Bruyneel

08/10/2019 17:52:24
Quote Anchor link
Michael - op 08/10/2019 17:32:24:
Zoiets zou het moeten doen. Al verdient het nog geen schoonheidsprijs :-) Inderdaad controle of een veld gevuld is zoals Arien zegt. En de checkboxen op deze manier werkt niet. Waarschijnlijk bedoel je een "radio".

EDIT: Heb je de opmerking van SanThe eerder ook gelezen? geslacht vs Geslacht. Het is hoofdlettergevoelig. Dus als je een vrouw kies, krijg je ook een foutmelding.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    //echo'<pre>';print_r($_POST);echo'</pre>';
    
    if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
        echo "Gelieve alle vragen te beantwoorden.";
    }
else {
    
        $connection = mysqli_connect ('localhost', 'root', '', 'wolf');     /* 'Servernaam', 'gebruikersnaam', 'wachtwoord', 'databasenaam' */
        if (!$connection) {
            die ('connection failed');}
        
        $query = "INSERT
            INTO
                klantentevredenheid_2019
                (
                Email,
                Voornaam,
                Achternaam,
                Geslacht,
                Postcode,
                A1,
                A2,
                A3,
                A4,
                A5,
                A6,
                A7,
                A8,
                A9
                ) /* Naam tabel (kolommen) */
            VALUES
                (
                '"
.mysqli_real_escape_string($connection, $_POST['Email'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Voornaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Achternaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Geslacht'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Postcode'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A1'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A2'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A3'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A4'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A5'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A6'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A7'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A8'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A9'])."'
                )"
;        /*ingevulde waarde */
        
        $result = mysqli_query ($connection, $query);
        if (!$result) {
            die ('query failed' . mysqli_error());
        }

            
        echo $query;
        
    }
}


?>


Ik heb je code hier bovenstaand geprobeerd maar ik krijg dan geen reactie, niet als ik iets niet invul maar ook niet als ik alles invul.

Wbt de opmerking over de checkbox en radio: ik heb dit reeds aangepast in mijn html/css file :)

Wbt volgende codes
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if(trim($_POST['Email'])=="") {
    echo "E-mailadres is niet ingevuld";
}

if(trim($_POST['Voornaam'])=="") {
    echo "Voornaam is niet ingevuld";
}

?>


zet ik deze boven de if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
echo "Gelieve alle vragen te beantwoorden.";
}
?
 
- Ariën  -
Beheerder

- Ariën -

08/10/2019 17:55:25
Quote Anchor link
je wilt liever controleren of de variabelen bestaan, en dit niet met een ! voor je isset() ontkennen.
Daarna kan je doe en laten wat je wilt.

Trouwens, je weet wat // doet? ;-)
 
Michael -

Michael -

08/10/2019 17:55:46
Quote Anchor link
Ik denk dat je dit /* Naam tabel (kolommen) */ even moet weghalen op regel 32. foutje.

"zet ik deze boven de ..?"
Is al beantwoord door Arien.
 
Kristof Bruyneel

Kristof Bruyneel

08/10/2019 18:07:33
Quote Anchor link
Michael - op 08/10/2019 17:55:46:
Ik denk dat je dit /* Naam tabel (kolommen) */ even moet weghalen op regel 32. foutje.

"zet ik deze boven de ..?"
Is al beantwoord door Arien.


Ik heb je code gecorrigeerd volgens je instructies en krijg nu idd al mijn data in mijn databank, maar krijg bovenaan de melding:
INSERT INTO klantentevredenheid_2019 ( Email, Voornaam, Achternaam, Geslacht, Postcode, A1, A2, A3, A4, A5, A6, A7, A8, A9 ) VALUES ( '[email protected]', 'Kristof', 'Bruyneel', 'Man', '9032', 'Niet tevreden', 'Slecht', 'Niet', 'Reclame op de camionetten', 'Niet', 'Niet', 'Niet tevreden', 'Niet tevreden', 'fdsgw' )

Als ik één vraag niet invul krijg ik de gewenste boodschap 'Gelieve alle vragen in te vullen.' :)

Toevoeging op 08/10/2019 18:08:42:

- Ariën - op 08/10/2019 17:55:25:
je wilt liever controleren of de variabelen bestaan, en dit niet met een ! voor je isset() ontkennen.
Daarna kan je doe en laten wat je wilt.

Trouwens, je weet wat // doet? ;-)


// comments in PHP voor één enkele lijn
/* comment voor meerdere lijnen */

:)
 
Michael -

Michael -

08/10/2019 18:09:18
Quote Anchor link
"maar krijg bovenaan de melding:"

Dat is de echo $query op regel 56. Die kan je dan weghalen.
 
Kristof Bruyneel

Kristof Bruyneel

08/10/2019 18:09:54
Quote Anchor link
- Ariën - op 08/10/2019 17:45:25:
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
<?php
if (isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
// Alle velden bestaan, start de validatie

    // Simpele validatie

    if(trim($_POST['Voornaam'])=="") {
            echo "Voornaam is niet ingevuld<br>";
    }
elseif(trim($_POST['Email'])=="") {
        echo "Email is niet ingevuld<br>";
    }
else {
    // Er wordt aan alle validatie-controles voldaan. Voer hier je query uit, en toon een melding dat het gelukt is.
    }

}

?>


Of nog beter: Sla ze op in een array, en lees de array uit en kijk of de error-array niet gevuld is (count($array)==0) en voer alles uit. Dan kan je in één klap alle foutmeldingen op een rij tonen, en eventueel in je formulier verwerken, door velden te laten oplichten.


Ik heb dit test bestand gemaakt als Test.php maar dit zorgt voor geen enkele reactie?

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
if (isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
// Alle velden bestaan, start de validatie

    // Simpele validatie

    if(trim($_POST['Email'])=="") {
            echo "Email is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Voornaam'])=="") {
        echo "Voornaam is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Achternaam'])=="") {
        echo "Achternaam is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Geslacht'])=="") {
        echo "Geslacht is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Postcode'])=="") {
        echo "Postcode is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A1'])=="") {
        echo "Vraag 1 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A2'])=="") {
        echo "Vraag 2 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A3'])=="") {
        echo "Vraag 3 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A4'])=="") {
        echo "Vraag 4 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A5'])=="") {
        echo "Vraag 5 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A6'])=="") {
        echo "Vraag 6 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A7'])=="") {
        echo "Vraag 7 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A8'])=="") {
        echo "Vraag 8 is niet ingevuld<br>";    
        
    }
else {
    // Er wordt aan alle validatie-controles voldaan. Voer hier je query uit, en toon een melding dat het gelukt is.
        Echo "alles is ingevuld";
    }

}

?>




Toevoeging op 08/10/2019 18:21:18:

Michael - op 08/10/2019 18:09:18:
"maar krijg bovenaan de melding:"

Dat is de echo $query op regel 56. Die kan je dan weghalen.


Je suggestie heeft geholpen. Het script werkt nu! :)

Toevoeging op 08/10/2019 18:26:02:

Onderstaand is de code die werkt :)

Iedereen heel erg bedankt voor de hulp! Zijn er verder nog tips of opmerkingen of verbeteringen in het algemeen of over dit script? (Kwestie voor mezelf om bij te leren)

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php

include 'Connection_db.php';

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    //echo'<pre>';print_r($_POST);echo'</pre>';
    
    if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
        echo "Gelieve alle vragen te beantwoorden.";
    }
else {
    
        $connection = mysqli_connect ('localhost', 'root', '', 'wolf');     /* 'Servernaam', 'gebruikersnaam', 'wachtwoord', 'databasenaam' */
        if (!$connection) {
            die ('connection failed');}
        
        $query = "INSERT
            INTO
                klantentevredenheid_2019
                (
                Email,
                Voornaam,
                Achternaam,
                Geslacht,
                Postcode,
                A1,
                A2,
                A3,
                A4,
                A5,
                A6,
                A7,
                A8,
                A9
                )
            VALUES
                (
                '"
.mysqli_real_escape_string($connection, $_POST['Email'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Voornaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Achternaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Geslacht'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Postcode'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A1'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A2'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A3'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A4'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A5'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A6'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A7'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A8'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A9'])."'
                )"
;        /*ingevulde waarde */
        
        $result = mysqli_query ($connection, $query);
        if (!$result) {
            die ('query failed');
        }
            
    
    }
}


?>
 
Michael -

Michael -

08/10/2019 18:34:51
Quote Anchor link
"Zijn er verder nog tips of opmerkingen of verbeteringen in het algemeen of over dit script? (Kwestie voor mezelf om bij te leren)"

Je vraagt erom :-)
Ik zou de $connection sowieso bovenaan je script zetten. Nu kun je het formulier invullen, maar je bent niet eens zeker of de connectie lukt.
"die" is geen mooie oplossing. Hiermee "kill" je alles gelijk, terwijl je pagina prima kan functioneren zonder verbinding en netjes een foutmelding kan laten zien.
Nu geef je inderdaad niet aan welke vragen er niet zijn ingevuld dus dat zou mooier kunnen.
Type je alle input velden handmatig? Want zoals al was aangegeven kun je hier prima een array voor maken en steeds herhalen. Zeker als de antwoorden "tevreden, ontevreden" steeds het zelfde zijn.
 
- Ariën  -
Beheerder

- Ariën -

08/10/2019 18:47:57
Quote Anchor link
Goede validatie zoals ik al had aangegeven. ;-)
Als iemand wat vergeten is, moet diegene zich nu gaan blindstaren op welke hij/zij vergeten is in te vullen.
 
Kristof Bruyneel

Kristof Bruyneel

08/10/2019 18:57:07
Quote Anchor link
Michael:

Ik typ idd alle input velden handmatig, bv.
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
            <label class="statement"><br/><!-- A1 --><br/>Vraag 1</label>
                <ul class='likert'>
                  <li>
                    <input type="checkbox" name="A1" value="Absoluut niet tevreden">
                    <label>Absoluut niet tevreden</label>
                  </li>
                  <li>
                    <input type="checkbox" name="A1" value="Niet tevreden">
                    <label>Niet tevreden</label>
                  </li>
                  <li>
                    <input type="checkbox" name="A1" value="Neutraal">
                    <label>Neutraal</label>
                  </li>
                  <li>
                    <input type="checkbox" name="A1" value="Tevreden">
                    <label>Tevreden</label>
                  </li>
                  <li>
                    <input type="checkbox" name="A1" value="Zeer tevreden">
                    <label>Zeer tevreden</label>
                  </li>
                </ul>

Hoe zou ik dat dan moeten aanpakken met een array?

Ariën:

Ik vermoed dat dit door de if-elsif-else constructie moet gebeuren? Zet ik die na de if (isset()) functie en voor de $query?

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
35
36
37
38
39
40
41
42
43
44
45
46
<?php
    // Simpele validatie
    if(trim($_POST['Email'])=="") {
            echo "Email is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Voornaam'])=="") {
        echo "Voornaam is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Achternaam'])=="") {
        echo "Achternaam is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Geslacht'])=="") {
        echo "Geslacht is niet ingevuld<br>";
        
    }
elseif(trim($_POST['Postcode'])=="") {
        echo "Postcode is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A1'])=="") {
        echo "Vraag 1 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A2'])=="") {
        echo "Vraag 2 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A3'])=="") {
        echo "Vraag 3 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A4'])=="") {
        echo "Vraag 4 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A5'])=="") {
        echo "Vraag 5 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A6'])=="") {
        echo "Vraag 6 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A7'])=="") {
        echo "Vraag 7 is niet ingevuld<br>";
        
    }
elseif(trim($_POST['A8'])=="") {
        echo "Vraag 8 is niet ingevuld<br>";    
        
    }
else {
    // Er wordt aan alle validatie-controles voldaan. Voer hier je query uit, en toon een melding dat het gelukt is.
        Echo "alles is ingevuld";
    }

?>
Gewijzigd op 08/10/2019 19:06:46 door - Ariën -
 
Michael -

Michael -

08/10/2019 19:09:07
Quote Anchor link
"Hoe zou ik dat dan moeten aanpakken met een array?"

Bijvoorbeeld:
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
<?php
$enquete_array
= array(
    'vragen'=>array(
        'A1'=>'Hoe tevreden bent u over de muziekkeuze van de dirigent?',
        'A2'=>'Hoe tevreden bent u de duurtijd van de pauze?',
    ),

    'antwoorden'=>array(
        'Absoluut niet tevreden',
        'Niet tevreden',
        'Neutraal',
        'Tevreden',
        'Zeer tevreden',
    ),
);


foreach($enquete_array['vragen'] as $id=>$vraag) {
    echo '<label class="statement"><br/><!-- '.$id.' --><br/>'.$vraag.'</label>';
    foreach($enquete_array['antwoorden'] as $index=>$antwoord) {
        echo '
        <ul class="likert">
            <li>
                <input type="radio" id="'
.$id.$index.'" name="'.$id.'" value="'.$antwoord.'">
                <label for="'
.$id.$index.'">'.$antwoord.'</label>
            </li>
        </ul>
        '
;
    }
}

?>


Dit geeft dan de zelfde HTML. Alleen heb ik de 'for' en 'id' toegevoegd zodat de 'label' ook werkt ;-)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<label class="statement"><br/><!-- A1 --><br/>Hoe tevreden bent u over de muziekkeuze van de dirigent?</label>
<ul class="likert">
    <li>
        <input type="radio" id="A10" name="A1" value="Absoluut niet tevreden">
        <label for="A10">Absoluut niet tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A11" name="A1" value="Niet tevreden">
        <label for="A11">Niet tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A12" name="A1" value="Neutraal">
        <label for="A12">Neutraal</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A13" name="A1" value="Tevreden">
        <label for="A13">Tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A14" name="A1" value="Zeer tevreden">
        <label for="A14">Zeer tevreden</label>
    </li>
</ul>
<label class="statement"><br/><!-- A2 --><br/>Hoe tevreden bent u de duurtijd van de pauze?</label>
<ul class="likert">
    <li>
        <input type="radio" id="A20" name="A2" value="Absoluut niet tevreden">
        <label for="A20">Absoluut niet tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A21" name="A2" value="Niet tevreden">
        <label for="A21">Niet tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A22" name="A2" value="Neutraal">
        <label for="A22">Neutraal</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A23" name="A2" value="Tevreden">
        <label for="A23">Tevreden</label>
    </li>
</ul>

<ul class="likert">
    <li>
        <input type="radio" id="A24" name="A2" value="Zeer tevreden">
        <label for="A24">Zeer tevreden</label>
    </li>
</ul>
 
- Ariën  -
Beheerder

- Ariën -

08/10/2019 19:12:08
Quote Anchor link
Op deze manier kan je weer de errors in een array plaatsen :-)

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
<?php
$errors
= array(); // maak de array aan

    // Simpele validatie

        if(trim($_POST['Email'])=="") {
        $errors[] = "Email is niet ingevuld";
    }

        
       if(trim($_POST['Voornaam'])=="") {
        $errors[] = "Voornaam is niet ingevuld";
    }

        
        if(trim($_POST['Achternaam'])=="") {
        $errors[]= "Achternaam is niet ingevuld";
       
    if(count($errors)== 0) {
        // er zijn geen errors! Doe je ding!
    } else {    
        // Tijdelijk voor debugging: print_r($errors);
        // er zijn wel errors! Doorloop foreach over $errors en toon de errors
        // Zie: www.php.net/foreach

    }
        ?>
Gewijzigd op 08/10/2019 19:14:56 door - Ariën -
 
Kristof Bruyneel

Kristof Bruyneel

09/10/2019 08:33:42
Quote Anchor link
Bedankt voor de nuttige feedback!

En wat als ik wil dat sommige vragen niet persé ingevuld moeten worden? Bv. Naam en voornaam wel, maar vraag A1 hoeft niet ingevuld te worden als men niet wil.

Als ik die variabelen uit onderstaande code haal, krijg ik gewoon terug de Notice: Undefined index error te zien.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9']))
?>
Gewijzigd op 09/10/2019 08:46:42 door Kristof Bruyneel
 
- Ariën  -
Beheerder

- Ariën -

09/10/2019 09:11:12
Quote Anchor link
Dat is ook geen onderdeel van de validatie, maar de controle of een veld in je formulier bestaat (als die tenminste een name-attribute heeft)
Gewijzigd op 09/10/2019 09:24:40 door - Ariën -
 
Kristof Bruyneel

Kristof Bruyneel

10/10/2019 09:25:53
Quote Anchor link
Ok, maar nu heb ik een formulier dat niet wil verzenden als er één van alle vragen niet ingevuld is. Hoe kan ik ervoor zorgen dat de antwoorden toch doorgestuurd worden naar de database als er sommige vragen niet ingevuld zijn?

Door toevoeging van required in het input field in de html tags kan ik ervoor zorgen dat de deelnemer weet wanneer en welke vraag niet ingevuld is. Maar stel dat ik enkel zeker wil dat het emailadres, voornaam, achternaam, geslacht, en postcode ingevuld zijn voordat het formulier verzonden wordt naar de database ongeacht of de vragen A1 tem A9 ingevuld zijn of niet. Hoe kan ik dit voor elkaar krijgen?

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
35
36
37
38
39
40
41
42
43
44
45
<?php

include 'Connection_db.php';

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    //echo'<pre>';print_r($_POST);echo'</pre>';
    
    $connection = mysqli_connect ('localhost', 'root', '', 'wolf');    
        if (!$connection) {
            die ('connection failed');}
    
    if (!isset($_POST['Email'], $_POST['Voornaam'], $_POST['Achternaam'], $_POST['Geslacht'], $_POST['Postcode'], $_POST['A1'], $_POST['A2'], $_POST['A3'], $_POST['A4'], $_POST['A5'], $_POST['A6'], $_POST['A7'], $_POST['A8'], $_POST['A9'])) {
        echo "Gelieve alle vragen te beantwoorden.";
    }
else {
    
        $query = "INSERT INTO vragenlijst (Email, Voornaam, Achternaam, Geslacht, Postcode, A1, A2, A3, A4, A5, A6, A7, A8, A9 )
            VALUES
                (
                '"
.mysqli_real_escape_string($connection, $_POST['Email'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Voornaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Achternaam'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Geslacht'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['Postcode'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A1'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A2'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A3'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A4'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A5'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A6'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A7'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A8'])."',
                '"
.mysqli_real_escape_string($connection, $_POST['A9'])."'
                )"
;        /*ingevulde waarde */
        
        $result = mysqli_query ($connection, $query);
        if (!$result) {
            die ('query failed');
        }
            
    
    }
}


?>


Door toevoeging van deze code hoopte ik de niet ingevulde variabelen 'op te vullen' maar ook dit werkt niet om de data door te sturen naar de database:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    if (empty($_POST['A1'])) {
    $A1 = "";
    }

?>
Gewijzigd op 10/10/2019 09:53:37 door Kristof Bruyneel
 

Pagina: « vorige 1 2 3 volgende »



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.