Hallo allemaal,

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"; ?>
Obelix en Idefix op 31/08/2016 08:47:44

Wat zit er in de variabelen op regel 27 / 29?
Echo ze eens.
Waarom maak je die extra variabelen eigenlijk aan?

Hallo,

Die variabelen zijn afkomstig van het formulier en daar zit het gewijzigde data in...
Wanneer ik ze echo, dan gebeurt er niets...
Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd heb...

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
		$med_name = $row['med_name'];
		$med_production= $row['med_create_date'];
		$med_expire= $row['med_expire_date'];
		
		echo $med_name . $med_production . $med_expire; 
		$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);
print_r ($result_update);
if(!$result_update){	
	die ("Query failed" . mysqli_error($connection));	
			}
	}

?>
Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd heb...

Afleren dan... Ik denk dat het daar al fout gaat in dit geval namelijk.

Je checkt of er een POST request is verstuurd en daarna doe je:
$med_name = $row['med_name'];

Waar komt op dat punt opeens $row vandaan? Bedoel je daar niet $_POST['med_name']?
Ramon van Dongen op 31/08/2016 10:36:11

Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd heb...

Afleren dan... Ik denk dat het daar al fout gaat in dit geval namelijk.

Je checkt of er een POST request is verstuurd en daarna doe je:
$med_name = $row['med_name'];

Waar komt op dat punt opeens $row vandaan? Bedoel je daar niet $_POST['med_name']?

Daar heb je helemaal gelijk Ramon!
Ik vind het ook vreemd dat ik het nu pas zie...
Maar nu ben ik even in de war...
Het is toch de bedoeling on de name attribuut van input text, in dit geval "medicine" op te geven of moet ik hier de tabelnaam vanuit DB opgeven?

Dus zo $med_name = $_POST['med_name']; of $med_name = $_POST['medicine'];?

Oh jah mijn PHP redirect werkt lokaal wel en niet op de web server.
Enig idee??? Ik word een beetje gek van de web server nl..
Misschien is mijn website reeds gehackt, want het verwijderen van een record werkt ook niet meer op de web server...en lokaal werkte het wel...

Hoe het in de name="" van je input attribuut staat, zo komt het (bij een POST method) ook in je $_POST['....'] te staan.

Dus als je input is:
<input type="text" name="med_name">

Dan haal je het op met:
$_POST['med_name']


<?php
$update = $connection->query("
UPDATE medicines
SET med_name = '".mysqli_real_escape_string($connection,$_POST['med_name'])."'
WHERE
med_id = '".mysqli_real_escape_string($connection,$_POST['med_id'])."'
");
?>




Toevoeging op 31/08/2016 11:21:50:

Welke code gaat er over je redirect?
Hoi Ramon,

Met jouw feedback is het me gelukt om een record te wijzigen.
Het nieuwe probleem waar ik tegen aanloop op de webhosting server is dat PHP redirect niet werkt.
Lokaal werkt de PHP redirect wel, maar op de server van de webhosting "strato" niet.
Betekent dit dat er andere instellingen zijn op de server van Strato? Zo, jah wat voor instellingen en denk je dat ik ze kan/mag aanpassen? of is dit gerelateerd aan FF/IE11?
Ramon van Dongen op 31/08/2016 11:20:27

Welke code gaat er over je redirect?


Voor med_edit.php is het op regel 41
En dezelfde code gebruik ik ook voor mijn andere pagina, maar met andere tekst..


<?php include "includes/db-config1.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 = $_POST['medicine'];
		$med_production= $_POST['production'];
		$med_expire= $_POST['expire'];
		
		$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){	

	echo "The selected recored is successfully modified";
	header ("Location: medicines.php");
	exit;
			} else {
				
die ("Query failed" . mysqli_error($connection));				
				
			}
	}

?>
<?php echo "<div>"; ?>
<?php echo "<h1>Edit page</h1>"; ?>

<form action="" 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"; ?>
Er mag geen enkele output zijn voor een header().
Jij hebt al echo gebruikt en dat kan niet.
- SanThe - op 31/08/2016 14:20:19

Er mag geen enkele output zijn voor een header().
Jij hebt al echo gebruikt en dat kan niet.

Hmm..Oke..
Ik ga nu echo uitschakelen en zal testen of het effect heeft...
Hoe kan ik anders een bericht weergeven plus een paar seconden wachten voordat een PHP redirect plaatsvindt?

Reageren