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"; ?>
Regel 38, 39 en 40 horen nog voor regel 37 te staan.
Anders bestaat $result_update inderdaad niet.
Hoi,
Bedankt voor je snelle reactie!
Ik wil je feedback graag begrijpen en daarbij heb ik een vraag:
Hoe kan ik een variabel controleren terwijl het op dat moment niet bestaat?
Btw; ik heb je feedback verwerkt en krijg dezelfde foutmelding plus dat het aangeeft dat er geen medicine gekozen is...:
No medicine has been chosen
Notice: Undefined variable: result_update in D:\xampp\htdocs\inventory_test\med_edit.php on line 37
Query failed
<?php
if(isset($var))
{ // bestaat
}
else
{ // bestaat niet
}
?>
No medicine has been chosen
Die hoort bij de Select en niet bij de Update.
$_GET['id'] zal niet bestaan.
Je zet dat id direct in de query, dat houdt in dat de query lek is. (Zie sql-injection).
Toevoeging op 30/08/2016 21:51:53:
Maak van if(!$result_update) eens if($result_update === false).
Het klopt dat de melding " No medicine has been chosen" bij SELECT hoort, maar vreemd genoeg wanneer ik op een item klik, dan wordt alles weergegeven netjes in een tabel in een volgend pagina..dus deze foutmelding vind ik een beetje vreemd...
Voor nu maak ik me even geen zorgen over security, want dat pak ik later op...
Nu verschijnt nog steeds dezelfde foutmelding, en de record wordt gewijzigd met als resultaat lege waarden...
Nieuw code
<?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']."' ";
if($result_update === False){
die ("Query failed" . mysqli_error($connection));
}
$result_update = mysqli_query($connection,$update_medicines);
}
?>
<?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"; ?>
Voor nu maak ik me even geen zorgen over security, want dat pak ik later op...
Sloten zet je ook niet pas later op je huis.
Nu kan het nog. Straks moet je alle queries nalopen of er SQL-injection in zit, en is er een kans dat je er eentje vergeet. Ikzelf heb geleerd om dit direct aan een querie toe te voegen. Het beschermt bovendien niet alleen tegen security maar ook tegen ongewenste manipulaties van je query. Vul eens voor de grap een ' (apostrof) in.
Of stap anders over op PDO, dan wordt alles vanzelf gedaan als een een waarde gaat binden ;-)
Tussen 36 en 37, niet tussen 37 en 38.
Serieus, volg eens een tutorial (en begrijp deze ook, niet klakkeloos dingen overnemen), je bent nu gewoon maar wat aan het proberen.
Tussen 36 en 37, niet tussen 37 en 38.
Serieus, volg eens een tutorial (en begrijp deze ook, niet klakkeloos dingen overnemen), je bent nu gewoon maar wat aan het proberen.
Hahaha! Sorry!
Ik vond het al raar, vandaar ook mijn commentaar....
Het blijkt dat alles binnen de isset() functie moet zijn...
Tnx! Dit heb ik nu aangepast.
Na verschijnt enkel "No medicine has been chosen" met een leeg formulier eronder.
De waardes in de DB worden aangepast/leeg gemaakt....