Hallo allemaal,

Momenteel heb ik een form waarmee je info kunt toevoegen aan de DB.
Tot zover werkt dit zonder problemen.
Nu wil ik graag een stap verder gaan en dat is form validatie toepassen.

Via de website http://www.tutorialspoint.com/php/php_validation_example.htm heb ik een voorbeeld gevonden waarmee form validatie kan toegepast worden.
Het form validatie werkt als volgt:

Op de insert.php pagina voer ik wat gegevens in. Wanneer de input van de gebruiker door de form validatie komt, dan vang ik alle input van de gebruiker op de pagina insert_proces.php. Via dit pagina heb ik een insert sql commando, die de input in de DB opslaat.


En wanneer ik een validatie toepas, dan krijg ik allemaal Notice: Undefined variable foutmeldingen op de insert_proces.php pagina. Vervolgens wordt er een leeg record toegevoegd aan de DB.

foutmelding:

Notice: Undefined variable: first in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 26

Notice: Undefined variable: lastname in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 27

Notice: Undefined variable: department in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 28

Notice: Undefined variable: position in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 29

Notice: Undefined variable: salary in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 30

Notice: Undefined variable: startdate in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 31

Notice: Undefined variable: first in C:\xampp\htdocs\employees_CRUD\insert_process.php on line 35
successfully loaded to the database
Go back to main page


code van insert.php pagina:

<?php

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// define variables and set to empty values
$firstnameErr = $lastnameErr = $positionErr = $salaryErr = $startdateErr ="";
$firstnamename = $lastname = $position = $salary = $startdate = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["firstname"])) {
$firstnameErr = "Name is required";
}else {
$firstname = test_input($_POST["firstname"]);
}

if (empty($_POST["lastname"])) {
$lastnameErr = "Lastname is required";
}else {
$lastname = test_input($_POST["email"]);

}

if (empty($_POST["position"])) {
$positionErr = "Position must be filled in";
}
else {
$position = test_input($_POST["position"]);
}

if (empty($_POST["salary"])) {
$salaryErr = "salary must be filled in";
}else {
$salary = test_input($_POST["salary"]);
}

if (empty($_POST["startdate"])) {
$startdateErr = "startdate is required";
}else {
$startdate = test_input($_POST["startdate"]);
}
if(count ($firstnameErr, $lastnameErr, $positionErr, $salaryErr, $startdateErr) == 0) {
header ("Location: insert_process.php");
exit();
}
}


?>

code van insert_proces.php pagina

<?php
require_once("inc/db-config.php");

if(isset($_POST['firstname'])) {
$first = $_POST['firstname'];
}

if(isset($_POST['lastname'])) {
$lastname = $_POST['lastname'];
}
if(isset($_POST['department'])) {
$department = $_POST['department'];
}
if(isset($_POST['position'])) {
$position = $_POST['position'];
}
if(isset($_POST['salary'])) {
$salary = $_POST['salary'];
}
if(isset($_POST['startdate'])) {
$startdate = $_POST['startdate'];
}

$sql = "INSERT INTO employees VALUES (
'',
'" . $first . "',
'" . $lastname . "',
'" . $department . "',
'" . $position . "',
'" . $salary . "',
'" . $startdate . "',
NOW()
)";
mysql_query($sql);
echo $first . " successfully loaded to the database";
echo "<br /> Go back to <a href='inventory.php'>main page</a>";
mysql_close($connection);
?>

Wat is jullie feedback hierop?

Alvast bedankt!

Helaas krijg ik allemaal
Foutafhandeling...
<?php
if(mysql_query($sql)) {
echo $first . " successfully loaded to the database";
} else {
echo mysql_error() . "<br>";
echo $sql;
}
?>
Mohamed nvt op 25/06/2016 22:20:29

Ik vermoed ook dat data verloren gaat na de form validatie, want zonder validatie werkt de form prima.

Welke validatie bedoel je? Waar heb je dan de insert-query? In 1 bestand?
Dan controleer je toch of die data doorkomt / verloren gaat? Want daar ligt volgens mij de oorzaak.

Mohamed nvt op 25/06/2016 22:20:29

Jah ik weet dat mysql_query verouderd is, maar dat geeft nu niet. Wanneer de test applicatie werkt, dan wil ik pas overstappen.

Als jij graag dubbel werkt. ;-)
Lijkt me inefficient. Straks loop je weer tegen problemen aan met omzetten, kun je weer alles nalopen. Waarom niet in 1x? Maar goed. Dat is jouw keuze.

Mohamed nvt op 25/06/2016 22:20:29

@Frank Nietbelangrijk, Je hebt gelijk dat het praktisch is wanneer het formulier, validatie en het inserten van data in DB gaat. Ik vraag me af of deze structuur mijn probleem gaat oplossen.

Dat denk ik wel. Nu raak je de informatie 'kwijt'. Door het in 1 bestand te houden, zal dat niet gebeuren.


Mohamed nvt op 25/06/2016 22:20:29

Ik krijg dus nu geen foutmeldingen meer, maar er wordt ook geen data opgeslagen in DB...

Je lost de basis van je probleem niet op: worden de waarden doorgestuurd? Nee. Dan kun je wel allerlei variabelen aanmaken, maar daarmee los je de oorsprong van je probleem niet op.

Kies voor de oplossing van Frank.

Hallo Obelix en Idefix,
Met andere woorden adviseer je mij om nu al over te stappen op OOP?
Ik vind dit een beetje eng, omdat ik niet zo lang geleden beb begonnen met het leren van PHP.
En, ik ben bang dat ik alles vanaf nul moet beginnen en vanaf de scracth te werken en dit zal nog langer duren...

Het idee van Frank heb ik al een keer toegepast door form + validatie + inserten op een pagina te doen, maar dat lukte niet. Vanavond zal ik weer een update plaatsen door alles op een pagina te doen.
mysqli functies kun je toepassen zoals mysql. Ze hebben voor iedere functie een OOP schilletje (Object oriented style) of de normale functie aanroep (Procedural style) net als bij mysql_ functies. Kijk als voorbeeld eens naar http://php.net/manual/en/mysqli.query.php. Je ziet daar onder 'Procedural style' de "niet-oop" functie aanroep staan. Er is maar één verschil met de mysql_query functie en dat is dat je de connectie op moet geven welke je krijgt met mysqli_connect(). Niet al te moeilijk als je er even de tijd voor neemt.
Even vanaf het begin mensen.

@Obelix zat nog het dichtste bij de oorzaak van het probleem.

POST data is alleen beschikbaar op het moment dat je deze verstuurt naar de server (via POST). Wanneer je vervolgens wegnavigeert van het doel-script in de action-eigenschap van het formulier is je POST data weg. Het is dus niet zo verwonderlijk dat $_POST leeg is omdat je vanuit het doel-script redirect naar een ander script...

---

Validatie en verwerking horen wel min of meer bij elkaar, het is allebei onderdeel van de afhandeling van een formulier submit, dus ik zou deze wel bij elkaar houden.

Reageren