Ik ben net begonnen voor mijn hobby om PHP te leren en zou graag een enquête maken welke gelinkt is aan een database.
Wanneer ik echter een vraag oningevuld laat krijg ik steeds de melding 'Notice: Undefined index...'.

Ik begrijp dat dit betekent dat de vraag niet ingevuld is, maar dacht dit te laten melden door volgende code:

<?php
if (empty($Email) || empty($Voornaam) || empty($Achternaam) || empty($Geslacht) || empty($Postcode) || empty($A1) || empty($A2) || empty($A3) || empty($A4) || empty($A5) || empty($A6) || empty($A7) || empty($A8) || empty($A9) || empty($B1) || empty($B2) || empty($B3) || empty($B4) || empty($B5) || empty($B6) || empty($B7) || empty($B8) || empty($B9)) {
echo "Gelieve alle vragen in te vullen.";
?>

Het gevolg is nu dat de Notice meldingen nog steeds op de webpagina verschijnen mét daaronder mijn melding "Gelieve alle vragen in te vullen.'

Ik heb hieronder de code van mijn .php bestand geplaatst. Kan iemand me uitleggen wat ik verkeerd doe en hoe ik het beter kan doen? Alvast bedankt!!!

<?php

/* Onderstaande code maakt connectie met de database */

function Connect_DB () {
global $connection;
$connection = mysqli_connect ('localhost', 'root', '', 'DatabaseHobby'); /* 'Servernaam', 'gebruikersnaam', 'wachtwoord', 'databasenaam' */
if (!$connection) {
die ('connection failed' . mysqli_error());
}
}

/* Haalt alle gegevens uit het formulier en stockeert ze in database */

if (isset($_POST ['Submit'])){

$Email = $_POST['Email'];
$Voornaam = $_POST['Voornaam'];
$Achternaam = $_POST['Achternaam'];
$Geslacht = $_POST['Geslacht'];
$Postcode = $_POST['Postcode'];
$A1 = $_POST['A1'];
$A2 = $_POST['A2'];
$A3 = $_POST['A3'];
$A4 = $_POST['A4'];
$A5 = $_POST['A5'];
$A6 = $_POST['A6'];
$A7 = $_POST['A7'];
$A8 = $_POST['A8'];
$A9 = $_POST['A9'];
$B1 = $_POST['B1'];
$B2 = $_POST['B2'];
$B3 = $_POST['B3'];
$B4 = $_POST['B4'];
$B5 = $_POST['B5'];
$B6 = $_POST['B6'];
$B7 = $_POST['B7'];
$B8 = $_POST['B8'];
$B9 = $_POST['B9'];

if (empty($Email) || empty($Voornaam) || empty($Achternaam) || empty($Geslacht) || empty($Postcode) || empty($A1) || empty($A2) || empty($A3) || empty($A4) || empty($A5) || empty($A6) || empty($A7) || empty($A8) || empty($A9) || empty($B1) || empty($B2) || empty($B3) || empty($B4) || empty($B5) || empty($B6) || empty($B7) || empty($B8) || empty($B9)) {
echo "Gelieve alle vragen in te vullen.";
}

Connect_DB ();

$query = "INSERT INTO DatabaseTabel (Email, Voornaam, Achternaam, Geslacht, Postcode, A1, A2, A3, A4, A5, A6, A7, A8, A9, B1, B2, B3, B4, B5, B6, B7, B8, B9) "; /* Naam tabel (kolommen) */
$query .= "VALUES ('$Email','$Voornaam','$Achternaam','$Geslacht','$Postcode','$A1','$A2','$A3','$A4','$A5','$A6','$A7','$A8','$A9','$B1','$B2','$B3','$B4','$B5','$B6','$B7','$B8','$B9')"; /*ingevulde waarde */

$result = mysqli_query ($connection, $query);
if (!$result) {
die ('query failed' . mysqli_error());
}

}

?>
Michael - op 07/10/2019 18:30:39

Regel 17 t/m 39 is complete onzin. Zolang je niks verandert aan die variabele is het onzin om deze te kopiëren. Gebruik gewoon direct de POST variabele.

Complete onzin is het nou ook weer niet. Het kan wat handiger zijn (zodat je niet elke keer die $_POST uit hoeft te schrijven), maar icm je probleem kun je ook dit doen:

$A1 = $_POST['A1'] ?? null;

Als "A1" nu niet in je POST zat heeft $A1 toch een geldige waarde (null). Je foutmelding is hiermee dus opgelost (als je dit toepast voor $A1 t/m $B9).
Michael - op 07/10/2019 18:30:39

Variabele moet je buiten quotes plaatsen.
Dus niet echo "hallo $naam"; maar echo "Hallo " . $naam;

Dat moet niet (mag wel). Zeker met dubbele aanhalingstekens kan het juist wel. "hallo $naam" is 100% valide PHP code (en persoonlijk vindt ik het lekkerder lezen dan "Hallo " . $naam ; zeker als de tekst wat langer wordt met meer variabelen, zoals je $query). Let bij je query wel op SQL-injectie. Als iemand nu bewust of onbewust een enkel aanhalingsteken in (bijvoorbeeld) z'n achternaam gebruikt, dan klopt je query niet meer. Kijk hiervoor eens naar mysqli_real_escape_string.
Los daarvan is het in deze tijd ook verstandig om: "Anders" aan te bieden. ;-)
@Rob, Schrijfwijze is enigszins een persoonlijke voorkeur. Zoals jij het doet zou het echo "Hallo {$naam}"; moeten zijn.
Dat PHP alles valide vind, zegt meer iets over de taal ;-) echo "Hallo " . $naam; is imo de correcte en duidelijkste manier.
@Rob, Het is makkelijker om eenvoud te houden. Daarom kun je beter altijd accolades plaatsen ipv soms wel en soms niet.
<?php
$money = 10;

echo "you have earned $$money.00"; // Gaat helemaal fout.
echo "you have earned ${$money}.00"; // kan wel.
echo 'You have earned $' . $money . '.00'; // kan ook.
?>
Ik heb ondertussen mijn code proberen aanpassen en ben tot onderstaande code geraakt. Maar nog steeds blijf ik foutmeldingen krijgen in plaats van een mooie "Gelieve alle antwoorde te beantwoorden." boodschap. Kan iemand me verduidelijken waar ik nu weer in de fout ga en hoe ik dit kan oplossen? :(

<?php

include 'Connection_db.php';

/* Haalt alle gegevens uit het formulier */

if (isset($_POST ['Submit'])){

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 {
$Email = $_POST['Email'];
$Voornaam = $_POST['Voornaam'];
$Achternaam = $_POST['Achternaam'];
$Geslacht = $_POST['Geslacht'];
$Postcode = $_POST['Postcode'];
$A1 = $_POST['A1'];
$A2 = $_POST['A2'];
$A3 = $_POST['A3'];
$A4 = $_POST['A4'];
$A5 = $_POST['A5'];
$A6 = $_POST['A6'];
$A7 = $_POST['A7'];
$A8 = $_POST['A8'];
$A9 = $_POST['A9'];
}

$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) "; /* Naam tabel (kolommen) */
$query .= "VALUES ('$Email','$Voornaam','$Achternaam','$Geslacht','$Postcode','$A1','$A2','$A3','$A4','$A5','$A6','$A7','$A8','$A9')"; /*ingevulde waarde */

$result = mysqli_query ($connection, $query);
if (!$result) {
die ('query failed' . mysqli_error());
}

}

?>

Dit is de foutboodschap als ik vragen niet invul:

Gelieve alle vragen te beantwoorden.connection completed
Notice: Undefined variable: Email in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: Voornaam in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: Achternaam in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: Geslacht in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: Postcode in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A1 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A2 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A3 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A4 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A5 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A6 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A7 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A8 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Notice: Undefined variable: A9 in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 34

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\Wolf\Likert_form_php.php on line 38
query failed
Controlleer eens met dit op lijn 7 of een formulier is verstuurd:

if ($_SERVER['REQUEST_METHOD'] == "POST") {

Verder is een validatie met isset() niet voldoende. Als iemand een spatie invult dan is het al oké.
Dus bouw een if-elseif-elseif-else constructie in waarbij je controleert of iets is ingevuld. Waarbij er bij de 'else' aan alle validaties is voldaan.

Een mooie doch simpele check of iets is ingevuld is:
<?php
if(trim($_POST['iets'])=="") {
echo "Is niet ingevuld";
}
?>
Dat komt omdat je bracket } niet goed staat op regel 26.
Alles na regel 26 wordt altijd uitgevoerd of het nou wel of niet is toegevoegd. Daarom die foutmeldingen.
Ik heb de bracket van lijn 26 verplaatst naar lijn 39 en heb op lijn 7 de code
if (isset($_POST ['Submit'])){ vervangen door if ($_SERVER['REQUEST_METHOD'] == "POST") { .

De errors zijn inderdaad verdwenen (bedankt!), maar ik krijg gewoon terug mijn formulier te zien met bovenaan de boodschap 'Gelieve alle vragen te beantwoorden.' terwijl er niets ingevoerd is in mijn database óókal heb ik alle vragen ingevuld.

Verder zie ik geen wijzigingen of boodschappen...

Dit is de meest recente code die ik nu heb:

<?php

include 'Connection_db.php';

/* Haalt alle gegevens uit het formulier */

if ($_SERVER['REQUEST_METHOD'] == "POST") {

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 {
$Email = $_POST['Email'];
$Voornaam = $_POST['Voornaam'];
$Achternaam = $_POST['Achternaam'];
$Geslacht = $_POST['Geslacht'];
$Postcode = $_POST['Postcode'];
$A1 = $_POST['A1'];
$A2 = $_POST['A2'];
$A3 = $_POST['A3'];
$A4 = $_POST['A4'];
$A5 = $_POST['A5'];
$A6 = $_POST['A6'];
$A7 = $_POST['A7'];
$A8 = $_POST['A8'];
$A9 = $_POST['A9'];


$connection = mysqli_connect ('localhost', 'root', '', 'wolfsecurity'); /* '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) "; /* Naam tabel (kolommen) */
$query .= "VALUES ('$Email','$Voornaam','$Achternaam','$Geslacht','$Postcode','$A1','$A2','$A3','$A4','$A5','$A6','$A7','$A8','$A9')"; /*ingevulde waarde */

$result = mysqli_query ($connection, $query);
if (!$result) {
die ('query failed' . mysqli_error());
}
}

}

?>
Laat je relevante code nu eens zien tussen code-tags? En heb je mijn validatie al toegepast?

let ook op SQL-injection!!!!

Reageren