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());
}

}

?>
Ik begrijp dat je net bent begonnen met PHP, maar er kunnen een hoop zaken beter.

Die notice komt omdat een variabele niet is ge-set. Dit zou je zo op kunnen lossen:

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

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.

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

Een beter alternatief voor if (isset($_POST ['Submit'])){ is
if($_SERVER['REQUEST_METHOD'] == "POST") {

Toevoeging: Wanneer je gebruikers input ($_GET, $_POST) gebruikt is dit altijd een veiligheids risico. Gebruik daarom in je query mysqli_real_escape_string($connection, $_POST['Email']) enz.

edit:typo's
Vind je A1 t/m A9 en B1 t/m B9 zelf duidelijk, vraag ik mij af?

Ik weet niet wat het is, maar dit kan je groeperen:
<?php
$items['auto']['masda'] = $_POST['auto']['masda'];
$items['auto']['audi'] = $_POST['auto']['audi'];
$items['fiets']['batavus'] = $_POST['fiets']['batavus'];
$items['fiets']['gazelle'] = $_POST['fiets']['gazelle'];
?>

Maar zonder duidelijkheid over de betekenissen van deze velden wordt het lastig om te zeggen hoe je dit kan normaliseren. Toch is het iets wat je zeker moet normaliseren voor de duidelijkheid.
Michael:

Sorry voor mijn trage begrip maar heb ik regel 17 t/m 39 niet nodig om de 'name' uit het html formulier om te zetten naar de juiste variabele in PHP?

En is het dan de bedoeling dat ik regel 17 t/m 39 volledig wis en vervang door:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset($Email,$Voornaam,$Achternaam,$Geslacht,$Postcode,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9)) {
echo "Gelieve alle vragen in te vullen.";
}
?>

Ariën:

De vragen A1 t/m B9 zijn vragen gesteld in de vorm van een 5-punts Likert schaal waarbij men per vraag een antwoord kan geven van 'totaal niet akkoord' tot 'helemaal akkoord'
Omdat ik deze antwoorden wil hebben in een database heb ik de kolom in de database afgekort naar A1 (= da's vraag 1) t/m B9 (da's vraag 18).
Geen probleem. We hebben het allemaal een keer moeten leren.
Nee dan wordt het
<?php
if (!isset($_POST['Email'],$_POST['Voornaam'])) {
echo "Gelieve alle vragen in te vullen.";
}
?>
etc.
Variabelen kopiëren is alleen nodig als je de inhoud wijzigt.
$_POST['A1'],$_POST['A2'],$_POST['A3'] etc...

moet je dan gebruiken..
Anders sta je nu onnodig variabelen te kopiëren.

Oef, genummerde velden, niet echt handig, dat kan veel beter worden opgeslagen....
- Ariën - op 07/10/2019 18:45:55

$_POST['A1'],$_POST['A2'],$_POST['A3'] etc...

moet je dan gebruiken..
Anders sta je nu onnodig variabelen te kopiëren.

Oef, genummerde velden, niet echt handig, dat kan veel beter worden opgeslagen....


Hoe dan? Alle tips zijn handig!
Dan moeten we meer weten over wat je aan het maken bent.
Wat hij bedoelt met genummerd, is dat een nummer niet zegt wat erin zit. Wat is een A1,A2,A3 ??
Ariën:

Ik ben een html formulier aan het maken waar een 18- tal vragen gesteld zullen worden om te peilen naar de mate waarin men akkoord is of niet.

Hieronder een deel van de html/css code:

<html>
<form action="Likert_form.php" method="post">

<label class="statement">Emailadres:</label>
<input type="text" name="Email"><br/><br/>
                 
<label class="statement">Voornaam:</label>
<input type="text" name="Voornaam"><br/><br/>

<label class="statement">Achternaam:</label>
<input type="text" name="Achternaam"><br/><br/>
                 
<label class="statement">Geslacht:</label>
<ul class="demography">
<li>
<input type="checkbox" name="Geslacht" value="Man">
<label>Man</label>
</li>
<li>
<input type="checkbox" name="geslacht" value="Vrouw">
<label>Vrouw</label>
</li>
</ul>
    
<label class="statement">Postcode:</label>
<input type="text" name="Postcode"><br/><br/>
        
<label class="statement"><br/><!-- A1 --><br/>Hoe tevreden bent u over de muziekkeuze van de dirigent?</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>

<label class="statement"><br/><!-- A2 --><br/>Hoe tevreden bent u de duurtijd van de pauze?</label>
<ul class='likert'>
<li>
<input type="checkbox" name="A2" value="Absoluut niet tevreden">
<label>Absoluut niet tevreden</label>
</li>
<li>
<input type="checkbox" name="A2" value="Niet tevreden">
<label>Niet tevreden</label>
</li>
<li>
<input type="checkbox" name="A2" value="Neutraal">
<label>Neutraal</label>
</li>
<li>
<input type="checkbox" name="A2" value="Tevreden">
<label>Tevreden</label>
</li>
<li>
<input type="checkbox" name="A2" value="Zeer tevreden">
<label>Zeer tevreden</label>
</li>
</ul>

</form>
</html>


Deze ingevulde data wil ik dan laten inlezen in een database die ik met MySQL geschreven heb. Dus dacht ik gebruik te maken van de C (van CRUD) om deze in mijn database te krijgen dmv POST.

Moet de php code dan zo zijn? Want zo krijg ik nog steeds de meldingen te zien :/

<?php

/* Onderstaande code maakt connectie met de database */

function Connect_DB () {
global $connection;
$connection = mysqli_connect ('localhost', 'root', '', 'wolfsecurity'); /* '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['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'], $_POST['B1'], $_POST['B2'], $_POST['B3'], $_POST['B4'], $_POST['B5'], $_POST['B6'], $_POST['B7'], $_POST['B8'], $_POST['B9'])) {
echo "Gelieve alle vragen in te vullen.";
}

Connect_DB ();

$query = "INSERT INTO klantentevredenheid_2019 (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());
}

?>
$A1','$A2','$A3'etc hebben geen waarde. Ze komen uit POST dus is het:

$_POST['A1'] etc.....
Uiteraard verdient dit ook verplichte escaping tegen SQL-injection.
Verder is een tabelnaam met een jaar ook niet echt genormaliseerd.

Als ik zo kijk heb je
Vragen en meningen van 1 t/m 5

DAn zul je dus een tabel moeten hebben met:
- De vragen
- Een tabel met de meningen (gekoppeld op ID nummer van de vraag), de ID-nummer van de persoon, en het jaar.
Kristof Bruyneel op 07/10/2019 19:11:43

<input type="checkbox" name="Geslacht" value="Man">
<input type="checkbox" name="geslacht" value="Vrouw">


Dus men kan zowel man als vrouw zijn.

Geef ze exact dezelfde name en gebruik typ="radio"

Reageren