Momenteel ben ik bezig om een record op basis van een ID aan te passen, helaas lukt het me niet om dit werkend te krijgen.
Het invoegen van een record gaat goed.
Het lezen van een record gaat goed
Het verwijderen van een record gaat goed
Het wijzigen van een record gaat helaas niet goed...
Ik heb verschillende opties geprobeerd, maar de foutmelding heeft geen betrekking tot de php update query. En toch weet ik precies dat het probleem toch in PHP update query zit.
De genereerde foutmelding is als volgt:
Notice: Undefined variable: result_update in D:\xampp\htdocs\inventory_test\med_edit.php on line 36
Query failed
Alvast bedankt voor het meedenken!
<?php include "includes/db-config.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
$id = $_GET['id'];
$query = "SELECT * FROM medicines WHERE med_id=$id";
$result = mysqli_query($connection,$query);
while($row = mysqli_fetch_assoc($result)){
$med_id= $row['med_id'];
$med_name = $row['med_name'];
$med_production= $row['med_create_date'];
$med_expire= $row['med_expire_date'];
}
} else {
echo "No medicine has been chosen";
}
if(!$result){
die (mysqli_error($connection));
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$med_name = $row['med_name'];
$med_production= $row['med_create_date'];
$med_expire= $row['med_expire_date'];
$update_medicines = "UPDATE medicines
SET
med_name = '$med_name',
med_create_date = '$med_production',
med_expire_date ='$med_expire'
WHERE med_id= '".$_POST['id']."' ";
$result_update = mysqli_query($connection,$update_medicines);
}
if(!$result_update){
die ("Query failed" . mysqli_error($connection));
}
?>
<?php echo "<div>"; ?>
<?php echo "<h1>Edit page</h1>"; ?>
<form action="med_edit.php" method="post">
<fieldset>
<legend>Medicine edit form</legend>
<input type="hidden" name="id" value=" <?php echo $med_id; ?> " >
<label for="medicine">Medicine name:</label><input type="text" name="medicine" id= "medicine" value="<?php if(isset($med_name)) echo $med_name; ?>"> <br>
<label for="production">production Date:</label><input type="text" name="production" id= "production" value="<?php if(isset($med_production)) echo $med_production; ?>"> <br>
<label for="expire">Medicine name:</label><input type="text" name="expire" id= "expire" value="<?php if(isset($med_expire)) echo $med_expire; ?>"> <br>
<input type="submit" name="update_medicine" value="Edit">
</fieldset>
</form>
</div>
<?php include "includes/footer.php"; ?>
Bedankt voor je feedback.
Ik begrijp nu ook beter welke PHP code waar ik moet plaatsen.
Helaas heb ik dit niet geleerd tijdens verschillende PHP cursussen!
Maar goed, je bent nooit oud om te leren, zeg ik dan altijd :)
Na aanleiding van je reactie heb ik de code geherstructureerd en het ziet er als volgt uit:
De PHP redirect werkt nu ook, maar toch wil ik nog een tekst laat zien wanneer een item is toegevoegd zoals jullie dat hier doen wanneer iemand een gebruiker is ingelogd...
Moet ik afstappen van PHP redirect of zijn er nog andere mogelijkheden..
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
?>
<?php include "includes/db-config1.php"; ?>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['submit']) && strlen(trim($_POST['submit'])) > 0){
$med_name = $_POST['name'];
$med_production= $_POST['production'];
$med_expire= $_POST['expire'];
//$med_factory= $_POST['factory'];
//$med_category= $_POST['category'];
if($med_name =="" || empty($med_name)){
echo "This field can't be empty";
} else {
$query = "INSERT into medicines (med_name,med_create_date,med_expire_date,med_register_date)
values ('$med_name','$med_production','$med_expire', NOW()) ";
$create_medicines = mysqli_query($connection,$query);
$last_id = mysqli_insert_id($connection);
if(!$create_medicines){ // Niet nodig en nooit DIE gebruiken buiten de ontwikkel versie.
die(mysqli_error($connection));
} else {
/* echo "New category created successfully and the last inserted ID is: " . $last_id .
"You will be automatically redirected to the previous page in 3 seconds..."; */
header ("Location: medicines.php");
exit;
}
}
}
}
?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<div>
<form action="" method="post">
<fieldset>
<legend>Insert form</legend>
<p><label for="name">Medicine name:</label><input type="text" name="name" id="name"></p>
<p><label for="production">Medicine production date:</label><input type="text" name="production" id="production"></p>
<p><label for="expire">Medicine expire date:</label><input type="text" name="expire" id="expire"></p>
<p><label for="factory">Delivered by factory:</label><input type="text" name="factory" id="factory"></p>
<p><label for="category">belongs to category:</label><input type="text" name="category" id="category"></p>
<input type="submit" name="submit" value="Insert">
</fieldset>
</form>
</div>
<?php include "includes/footer.php"; ?>
Waarom sluit je php-tag af om die op de volgende regel weer te openen?
(zie regels 4/5 5/6 36/37 37/38)
Zoals eerder aangegeven: een header werkt niet als er al output is geweest. Je kunt, als je een tekst wilt laten zien voor je doorverwijst naar een andere pagina, dus geen header gebruiken.
SanThe heeft in de post van 31/08/2016 14:26:11 al laten zien hoe het dan zou kunnen.
Wat wil je met $last_id gaan doen? Je maakt hem wel aan, maar die is daarna (door de verwijzing naar een andere pagina), volgens mij niet meer beschikbaar.
Waarom sluit je php-tag af om die op de volgende regel weer te openen?
(zie regels 4/5 5/6 36/37 37/38)
Omdat elk code eigen functie uitvoert.
Zoals je ziet, is het dus niet allemaal dezelfde code. En ik heb begrepen om voor elk code eigen php-tag te gebruiken of is het aan te raden om een php tag te gebruiken?
Obelix en Idefix op 01/09/2016 09:52:31
Zoals eerder aangegeven: een header werkt niet als er al output is geweest. Je kunt, als je een tekst wilt laten zien voor je doorverwijst naar een andere pagina, dus geen header gebruiken.
SanThe heeft in de post van 31/08/2016 14:26:11 al laten zien hoe het dan zou kunnen.
Duidelijk, ik ga me verdiepen in de feedback van Santhe.
Obelix en Idefix op 01/09/2016 09:52:31
Wat wil je met $last_id gaan doen? Je maakt hem wel aan, maar die is daarna (door de verwijzing naar een andere pagina), volgens mij niet meer beschikbaar.
Klopt, na de redirect is het niet meer beschikbaar.
Ik had hem nog niet weggehaald, omdat ik dacht, als er nog wat opties waren mbt PHP header
[quote="Obelix en Idefix op 01/09/2016 09:52:31"]
Waarom sluit je php-tag af om die op de volgende regel weer te openen?
(zie regels 4/5 5/6 36/37 37/38)
Omdat elk code eigen functie uitvoert.
Zoals je ziet, is het dus niet allemaal dezelfde code. En ik heb begrepen om voor elk code eigen php-tag te gebruiken of is het aan te raden om een php tag te gebruiken?
Wie / waar is je dat vertelt? Het wordt er naar mijn idee niet overzichtelijker op. Het voegt niets toe.
Met jouw redenatie zou je bijna elke regel moeten openen/afsluiten met een php-tag.
Zou ik niet doen.
Mohamed nvt op 01/09/2016 10:11:21
[quote="Obelix en Idefix op 01/09/2016 09:52:31"]
Wat wil je met $last_id gaan doen? Je maakt hem wel aan, maar die is daarna (door de verwijzing naar een andere pagina), volgens mij niet meer beschikbaar.
Klopt, na de redirect is het niet meer beschikbaar.
Ik had hem nog niet weggehaald, omdat ik dacht, als er nog wat opties waren mbt PHP header
Ook al had die header gewerkt, volgens mij had je dan nog niets gehad aan $last_id op die nieuwe pagina. Die wordt namelijk niet meegenomen. Dan zou je hem in een sessie moeten zetten.
Daarna zou je een echo kunnen plaatsen, die men ziet, waarin staat dat diegene wordt doorverwezen.
Verder is het niet nodig om op lijn 9 t/m 13 variabelen te kopieeren. Je kan prima je $_POST-variabelen gebruiken in je echo. Zorg er dan wel voor dat je deze ook ALTIJD escaped tegen manipulatie en SQL-injection.
Nooit mee wachten, maar direct en consistent blijven toevoegen bij het schrijven van elke query!! Anders kan je net zo goed overstappen op PDO om geparameteriseerde queries te gebruiken.
Ik heb nu een refresh gezet bij PHP header.
Daarna echo ik wat tekst.
Dit werkt wel, maar de lay-out wordt niet meegenomen zoals.
Volgens mij ben ik genoodzaakt om html meta refresh te gaan gebruiken...
Nee, want wat je nu beschrijft is dat je gewoon de rest van je includes niet doet na de header(). Misschien is het handig om eens op te zoeken hoe HTML en headers etc werken? (HTTP protocol).