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.751 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:
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.
@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? :(
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.