Problemen met Notice: Undefined index: A1 in ... on line 22
Door
Kristof Bruyneel
op 07-10-2019 18:23
gewijzigd op 07-10-2019 18:25
4.749 views
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:
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.
<?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');}
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 <?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?
[size=xsmall]Toevoeging op 08/10/2019 17:38:31:[/size]
Oei, ik zie dat er al antwoord geschreven is op mijn vragen toen ik mijn vragen naar Ariën nog aan het schrijven was. :)
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.
<?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.
<?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.
#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...
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.
<?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');}
$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
<?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.";
}?
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.' :)
[size=xsmall]Toevoeging op 08/10/2019 18:08:42:[/size]
- 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 */