Hallo allemaal,

Momenteel heb ik een medicijn form waar een ingelogde gebruiker een medicijn kan invoeren. Vervolgens worden deze gegevens in verschillende tabellen ingevoerd en dit gaat zonder problemen.
En wat ik nu graag wil bereiken is dat een ingelogde gebruiker de mogelijkheid heeft om de ingevoerde medicijnen te kunnen wijzigen.

Wanneer er geklikt wordt op edit, dan worden alle relevante gegevens van betreffende medicijn op basis van id opgehaald en in het formulier geladen. Dit gaat to zover goed.
Echter, wanneer je klikt op de knop wijzigen dan krijg ik op het scherm de foutmelding: "geen medicijn gekozen" en in de logs krijg ik de foutmeldingen:
"user_registration/med_edit.php' on line 28: Undefined index: id"

"user_registration/med_edit.php' on line 38: Undefined variable: result"


De reden waarom de eerste foutmelding,tweede en derde vaag vindt, omdat er reeds alle relevante medicijn info geladen zijn. Tevens, bestaat result variabel ook.
Ik weet niet of het uitmaakt, maar de info op medicines pagina wordt uit verschillende tabellen weergegeven met als medicine tabel als hoofd tabel..

Mijn tweede vraag is; hoe kan ik gegevens uit een eerder gekozen dropdown-menu weergeven op de edit pagina als in de originele dropdown-menu. En, dat gebruiker in kwestie ziet welke waarde hij gekozen heeft en indien nodig hij een andere waarde kan zien uit de lijst...Hiermee ben ik nog bezig, maar ik dacht misschien heeft iemand een idee/tutorial...


Graag ontvang ik jullie feedback hierover.


Code van edit pagina:

<?php
require ('includes/config.inc.php'); 
$page_title = 'Overview of all medicines saved to the database';
include ('includes/header.php');

// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {


	$url = BASE_URL . 'index.php'; // Define the URL.
	ob_end_clean(); // Delete the buffer.
	header("Location: $url");
	exit(); // Quit the script.
	
}else{
	
	echo "Welcome " . "{$_SESSION['firstname']}". "<br>";
}

// Need the database connection:
	require(MYSQL);
// 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 medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id=$id";
	$result = mysqli_query($dbc,$query);
	while($row = mysqli_fetch_assoc($result)){
			$id= $row['id'];
			$medicinename = $row['medicinename'];
			$productiondate = $row['productiondate'];
			$expirationdate = $row['expirationdate'];
			$medicineprice = $row['medicineprice'];
	}	
} else {
	echo "No medicines has been chosen";
}

if(!$result){
	die (mysqli_error($dbc));	
}

?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
		$id= $row['id'];		
		$update_medicine = "UPDATE medicines SET
		medicinename = '$medicinename', productiondate = '$productiondate', expirationdate = '$expirationdate', medicineprice = '$medicineprice'
		WHERE id= $id";

		$result_update = mysqli_query($dbc,$update_medicine);
		if($result_update){	
		header ("Location: medicines.php");
		exit;
			} else {
				
				die ("Query failed" . mysqli_error($connection));				
				
			}
	}

?>
<div>
<h1>Medicines edit page</h1>

<form action="med_edit.php" method="post">
<fieldset>
<legend>Medicines edit form</legend>
<input type="hidden" name="id" value="<?php echo $id; ?>">
<p><label for="medicinename"><b>Medicine Name:</b></label> <input type="text" name="medicinename" id="medicinename" value="<?php if (isset($medicinename)) echo $medicinename; ?>" /></p>
	
	<p><label for="productiondate"><b>Production Date:</b></label> <input type="text" name="productiondate" id="productiondate" value="<?php if (isset($productiondate)) echo $productiondate; ?>" /></p>

	<p><b><label for="expirationdate">Expiration Date:</b></label> <input type="text" name="expirationdate" id="expirationdate" value="<?php if (isset($expirationdate)) echo $expirationdate; ?>" /> </p>
	
	<p><b><label for="medicineprise">Medicine price:</b></label> <input type="text" name="medicineprise" id="medicineprise" value="<?php if (isset($medicineprice)) echo $medicineprice; ?>" /> </p>
	
<input type="submit" name="update_medicine" value="Update medicine">
</fieldset>
</form>
</div>
<?php include "includes/footer.php"; ?>
Omdat je $result blijkbaar geen waarde heeft.
Zie je code uit mijn post van 31/12/2016 17:12:19.
- Ariën - op 02/01/2017 12:00:00

Omdat je $result blijkbaar geen waarde heeft.
Zie je code uit mijn post van 31/12/2016 17:12:19.


Hallo - Ariën -,

Jouw code heb ik weer terug geplaatst in mijn code, en helaas worden er gegevens geladen in het formulier wanneer ik een item wil bijwerken...En zonder jouw stukje code worden er wel gegevens in het form geladen...
Is het nodig dat ik de code van het insert_med pagina hier ook laat zien?

<?php
// Need the database connection:
	require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
	$id = mysqli_real_escape_string($dbc,$_GET['id']);
	$query = "SELECT * FROM medicines WHERE id= $id ";
	$result = mysqli_query($dbc,$query);
	if($result===true) {
		while($row = mysqli_fetch_assoc($result)){
            $id= mysqli_real_escape_string($dbc,$row['id']);
            $medicinename = mysqli_real_escape_string($dbc,$row['medicinename']);
            $productiondate = mysqli_real_escape_string($dbc,$row['productiondate']);
            $expirationdate = mysqli_real_escape_string($dbc,$row['expirationdate']);
            $medicineprice = mysqli_real_escape_string($dbc,$row['medicineprice']);
	}
			} else {
				echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
			}
}
?>
Alles staat of valt met de ID van het medicijn in $_GET['id'].
Waar zet je die ID in de URL en/of het formulier?
Hallo Ward van der Put,

De ID heb ik in opgenomen in het url van medicines.php.


<td align="left"><a href="med_edit.php?id=' . $row['id'] .'">Edit</a></td>


Huidige code van med_edit.php

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 'On');
?>
<?php
require ('includes/config.inc.php'); 
$page_title = 'Overview of all medicines saved to the database';
include ('includes/header.php');

// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {


	$url = BASE_URL . 'index.php'; // Define the URL.
	ob_end_clean(); // Delete the buffer.
	header("Location: $url");
	exit(); // Quit the script.
	
}else{
	
	echo "Welcome " . "{$_SESSION['firstname']}". "<br>";
}

// Need the database connection:
	require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
	$id = mysqli_real_escape_string($dbc,$_GET['id']);
	$query = "SELECT * FROM medicines WHERE id= $id ";
	$result = mysqli_query($dbc,$query);
	if($result===true) {
		while($row = mysqli_fetch_assoc($result)){
            $id= mysqli_real_escape_string($dbc,$row['id']);
            $medicinename = mysqli_real_escape_string($dbc,$row['medicinename']);
            $productiondate = mysqli_real_escape_string($dbc,$row['productiondate']);
            $expirationdate = mysqli_real_escape_string($dbc,$row['expirationdate']);
            $medicineprice = mysqli_real_escape_string($dbc,$row['medicineprice']);
	}
			} else {
				echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
			}
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
		$id= $row['id'];		
		$update_medicine =" UPDATE medicines SET
		medicinename = '$medicinename', productiondate = '$productiondate', expirationdate = '$expirationdate', medicineprice = '$medicineprice' WHERE id ='$id'";

		$result_update = mysqli_query($dbc,$update_medicine);
		if($result_update){	
		header ("Location: medicines.php");
		exit;
			} else {
				
				die ("Query failed" . mysqli_error($dbc));				
				
			}
	}

?>
<div>
<h1>Medicines edit page</h1>

<form action="" method="post">
<fieldset>
<legend>Medicines edit form</legend>
<input type="hidden" name="id" value="<?php echo $id; ?>">
<p><label for="medicinename"><b>Medicine Name:</b></label> <input type="text" name="medicinename" id="medicinename" value="<?php if (isset($medicinename)) echo $medicinename; ?>" /></p>
	
	<p><label for="productiondate"><b>Production Date:</b></label> <input type="text" name="productiondate" id="productiondate" value="<?php if (isset($productiondate)) echo $productiondate; ?>" /></p>

	<p><b><label for="expirationdate">Expiration Date:</b></label> <input type="text" name="expirationdate" id="expirationdate" value="<?php if (isset($expirationdate)) echo $expirationdate; ?>" /> </p>
	
	<p><b><label for="medicineprise">Medicine price:</b></label> <input type="text" name="medicineprise" id="medicineprise" value="<?php if (isset($medicineprice)) echo $medicineprice; ?>" /> </p>
	
<input type="submit" name="update_medicine" value="Update medicine">
</fieldset>
</form>
</div>
<?php include "includes/footer.php"; ?>
Welke editor gebruik je, want je manier van inspringen verschilt behoorlijk.
Ik heb het even aangepast.



<?php
// Need the database connection:
    require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
    $id = mysqli_real_escape_string($dbc,$_GET['id']);
    $query = "SELECT * FROM medicines WHERE id= $id ";
    $result = mysqli_query($dbc,$query);
    if($result===true) {
        while($row = mysqli_fetch_assoc($result)){
            $id= mysqli_real_escape_string($dbc,$row['id']);
            $medicinename = mysqli_real_escape_string($dbc,$row['medicinename']);
            $productiondate = mysqli_real_escape_string($dbc,$row['productiondate']);
            $expirationdate = mysqli_real_escape_string($dbc,$row['expirationdate']);
            $medicineprice = mysqli_real_escape_string($dbc,$row['medicineprice']);
    	}
    } else {
                echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
            }
} else {
	echo "Er is geen medicijn-ID gekozen!";
}
?>

Alleen heb ik nog wat vraagtekens bij je code....
Verder vraag ik me af waarom je een while() loop gebruikt, terwijl je maar één record terug hoort te krijgen. En verder is mysqli_real_escape_string() alleen bedoeld voor data die je in een query stopt. Niet om data daarna nog eens te escapen, want je wilt je uitvoer namelijk niet verminken.
Hallo - Ariën -,

Ik gebruik Notepad++.

De reden waarom ik een loop gebruik, is om straks de variabelen te kunnen gebruiken in de INSERT statement. Eigenlijk, zo heb ik het geleerd tijdens verschillende php-trainingen.
En, indien deze loop niet nodig is, dan hoor ik dat graag en ook wat een betere manier om het aan te pakken.
Verder, begrijp ik niet begrijp is dat het formulier wel wordt geladen met gegevens en niet wanneer ik achter een controle op uitvoer...
Zou iemand mij verder kunnen helpen of in de juiste richting sturen?

Alvast bedankt.

Update 1:

Code van medicines.php om het gehele plaatje duidelijk te hebben:
FYI; niet alle code van medicines.php is actief, vandaar veel gemarkeerd als commentaar...


<?php
require ('includes/config.inc.php'); 
$page_title = 'Overview of all medicines saved to the database';
include ('includes/header.php');

// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {
	
	$url = BASE_URL . 'index.php'; // Define the URL.
	ob_end_clean(); // Delete the buffer.
	header("Location: $url");
	exit(); // Quit the script.
	
}else{
	
	echo "Welcome " . "{$_SESSION['firstname']}";
}

require ('includes/db-connection.php'); // Connect to the db.

// Number of records to show per page:
/* $display =5; */

// Determine how many pages there are...
/*
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Already been determined.

	$pages = $_GET['p'];

} else { // Need to determine.

	// Count the number of records:
	$q = "SELECT COUNT(user_id) FROM users";
	$r = @mysqli_query ($dbc, $q);
	$row = @mysqli_fetch_array ($r, MYSQLI_NUM);
	$records = $row[0];

	// Calculate the number of pages...
	if ($records > $display) { // More than 1 page.
		$pages = ceil ($records/$display);
	} else {
		$pages = 1;
	}
	
} // End of p IF.
*/
// Determine where in the database to start returning results...
/*
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
	$start = $_GET['s'];
} else {
	$start = 0;
}
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'rd';
//Determine the sorting order:
switch ($sort) {
case 'fn':
	$order_by = 'firstname ASC';
	break;
case 'ln':
	$order_by = 'lastname ASC';
	break;
case 'em':
	$order_by = 'email ASC';
	break;
case 'pn':
	$order_by = 'pharmacyname ASC';
	break;
case 'tl':
	$order_by = 'telephone ASC';
	break;
case 'rd':
	$order_by = 'registrationdate ASC';
	break;
default:
	$order_by = 'registrationdate ASC';
	$sort = 'rd';
	break;
}
*/
// Make the query:
$q = "SELECT medicines.id,medicines.medicinename,medicines.productiondate,medicines.expirationdate,medicinestype.medicinetypename,suppliers.suppliername
FROM medicines
LEFT JOIN users ON users.user_id = medicines.userid
LEFT JOIN medicines_suppliers ON medicines_suppliers.medicine_id=medicines.id
LEFT JOIN suppliers ON medicines_suppliers.supplier_id=suppliers.id
LEFT JOIN medicines_medicinestype ON medicines_medicinestype.medicine_id=medicines.id
LEFT JOIN medicinestype ON medicines_medicinestype.medicinetype_id=medicinestype.id
where users.user_id= '{$_SESSION['user_id']}'";

$r = @mysqli_query ($dbc, $q); // Run the query.

//Count the number of returned row:
$num = mysqli_num_rows($r);

if ($num > 0) { // If it ran OK, display the records.

		//Print how many users there are:
		echo "<p>There are currently $num registered medicines</p>\n";

	// Table header.
	echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
				<tr>
				<td align="left"><b><a href="medicines.php?sort=fn">medicinename</a></b></td>
				<td align="left"><b><a href="medicines.php?sort=ln">productiondate</a></b></td>
				<td align="left"><b><a href="medicines.php?sort=em">expirationdate</a></b></td>
				<td align="left"><b><a href="medicines.php?sort=pn">medicinetypename</a></b></td>
				<td align="left"><b><a href="medicines.php?sort=tl">suppliername</a></b></td>
				<td align="left"><b>Edit</b></td>
				<td align="left"><b>Delete</b></td>
				</tr>';
	
	// Fetch and print all the records:
	while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
		echo '<tr>
		<td align="left">' . $row['medicinename'] .'</td>
		<td align="left">' . $row['productiondate'] .'</td>
		<td align="left">' . $row['expirationdate'] .'</td>
		<td align="left">' . $row['medicinetypename'] .'</td>
		<td align="left">' . $row['suppliername'] .'</td>
		<td align="left"><a href="med_edit.php?id=' . $row['id'] .'">Edit</a></td>
		<td align="left"><a href="med_delete.php?id=' . $row['id'] .'">Delete</a></td>
		</tr>';
	}

	echo '</table>'; // Close the table.
	
	mysqli_free_result ($r); // Free up the resources.	

} else { // If  no records were returnd.
	echo '<p class="error">There are currently no registered medicines</p>';
	
} // End of if ($r) IF.

mysqli_close($dbc); // Close the database connection.


// Make the links to other pages, if necessary.
/*
if ($pages > 1) {
	
	// Add some spacing and start a paragraph:
	echo '<br /><p>';
	
	// Determine what page the script is on:	
	$current_page = ($start/$display) + 1;
	
	// If it's not the first page, make a Previous link:
	if ($current_page != 1) {
		echo '<a href="medicines.
		php?s=' . ($start - $display) .
		'&p=' . $pages . '&sort=' .
		$sort. '">Previous</a> ';
	}
	
	// Make all the numbered pages:
	for ($i = 1; $i <= $pages; $i++) {
		if ($i != $current_page) {
			echo '<a href="medicines.
			php?s=' . (($display * ($i -
			1))) . '&p=' . $pages .
			'&sort=' . $sort.'">' . $i . '</a> ';
		} else {
			echo $i . ' ';
		}
	} // End of FOR loop.
	
	// If it's not the last page, make a Next button:
	if ($current_page != $pages) {
		echo '<a href="medicines.
		php?s=' . ($start + $display) .
		'&p=' . $pages . 
		'&sort=' . $sort.'">Next</a>';
	}
	
	echo '</p>'; // Close the paragraph.
	
} // End of links section.
*/
include ('includes/footer.php');
?>  

<?php
// Need the database connection:
    require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
    $query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id='".mysqli_real_escape_string($dbc,$_GET['id'])."'";
    $result = mysqli_query($dbc,$query);
    if($result===true) {
		$row = mysqli_fetch_assoc($result)){
		// toon hier je formulier of de inhoud van wat je wilt tonen met de data uit je query.
		// echo $row['medicinename']; // kan je bijv. gebruiken.
	} else {
		echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
	}
} else {
    echo "Er is geen medicijn-ID gekozen!";
}
?>

Ik heb...
- De while-loop eruit gehaald
- Alleen de nodige veldnamen in de SELECT-query benoemd
- De locatie aangegeven waar je formulier moet komen.
- mysqli_real_escape_string direct in je query gezet, zodat het overzichtelijker is.
Hallo - Ariën -,

Bedankt voor je feedback.
Je geeft aan op regel 10 dat ik daar het formulier moet laten zien, inclusief de variabelen in form-vakjes..
Dit betekent dus dat de afhandeling van het formulier onderaan komt, toch?
Ja, dat kan je doen. Maar die kan je ook op die ge-commentariseerde plek (regel 10/11) afhandelen op deze manier:


<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
	// hier je afhandeling
} else {
	// hier je formulier.
}
?>
Ik zou de "view" echt onderaan houden.


<?php
// Need the database connection:
    require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
    $query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id='".mysqli_real_escape_string($dbc,$_GET['id'])."'";
    $medicinesResult = mysqli_query($dbc,$query);
    if($medicinesResult === FALSE) {
        echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
	    exit;
    }
} else {
    echo "Er is geen medicijn-ID gekozen!";
    exit;
}
?>
<html>
<body>
blablabla ...
<?php
	if(medicinesResult) {
        	// toon hier je formulier of de inhoud van wat je wilt tonen met de data uit je query.
	}
?>
nog meer blabla ...
</body>
</html>


Of zo afhankelijk van de situatie:

<?php
// Need the database connection:
    require(MYSQL);
// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
    $query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id='".mysqli_real_escape_string($dbc,$_GET['id'])."'";
    $medicinesResult = mysqli_query($dbc,$query);
} else {
    echo "Er is geen medicijn-ID gekozen!";
    exit;
}
?>
<html>
<body>
blablabla ...
<?php
	if(medicinesResult) {
        	// toon hier je formulier of de inhoud van wat je wilt tonen met de data uit je query.
	} else {
		echo 'Geen medicijnen gevonden.';
	}
?>
nog meer blabla ...
</body>
</html>

Reageren