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"; ?>
is_int() gaat sowieso niet werken omdat $_GET['id'] een string is (zoals alle variabelen in $_GET en $_POST). is_int() checkt namelijk het type, zoals ook op PHP.net staat.

Daar staat tevens:
Note:

To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric().


Of je maakt gebruik van een regexp, omdat is_numeric() nogal breed is.

Ook is het niet nodig om lappen HTML te echo'en. Je kunt te allen tijde een PHP-blok afbreken en opnieuw opstarten:
<?php
if ($whatever) {
    ?><b>Dit is een stuk beter leesbaar dan een lap HTML echo'en.</b><?php
}
?>

Hallo - Ariën -,

Als je tips hebt, dan hoor ik dat graag of is er een beter programma om PHP te schrijven dan Notepad++?
Ik kan die syntax errors maar niet vinden helaas...


@Thomas,
is_int heb ik vervangen door is_numeric en voor het form beëindig ik php code en na het form begin ik weer met PHP code...

Zou iemand willen kijken waar ik precies een syntax error heb?

Alvast bedankt.

<?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']) && !empty($_GET['id']) && is_numeric($_GET['id'])){
    $query = "SELECT * FROM medicines WHERE id='".mysqli_real_escape_string($dbc,$_GET['id'])."'";

    $result = mysqli_query($dbc,$query);
    if($result===true) {
			$row = mysqli_fetch_assoc($result){
		
				} else {
					echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
			}
		} else {
    echo "Er is geen medicijn-ID gekozen!";
	}
}
?>
<?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));				
				
		}
	} else { ?>
	<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 }

?>
<?php include "includes/footer.php"; ?>


[size=xsmall]Toevoeging op 04/01/2017 07:13:56:[/size]

Update:

De foutmelding "wit pagina" heb ik nu opgelost.
Helaas krijg ik nog steeds de foutmelding dat er geen medicijn_ID wordt gekozen en dus het formulier wordt niet geladen met medicijn gegevens...

Nieuw code:


<?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']) && !empty($_GET['id']) && is_numeric($_GET['id'])){
    $query = "SELECT * FROM medicines WHERE id='".mysqli_real_escape_string($dbc,$_GET['id'])."'";

    $result = mysqli_query($dbc,$query);
    if($result===true) {
			$row = mysqli_fetch_assoc($result);
		} else {
			echo "Er is geen medicijn-ID gekozen!";
	}
}
?>
<?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));				
				
		}
	} else { ?>
	<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 }

?>
<?php include "includes/footer.php"; ?>
Die foutmelding staat op de verkeerde plaats. Eigenlijk is het je query die niet werkt.

Ikzelf gebruik Netbeans IDE.
Waar komt $row['id'] op regel 40 vandaan?
En waar komende de variabelen op regel 42 vandaan?

Debuggen: Wat zit er in $_GET['id'] als je die echoot op bv regel 26?
Wederom verwijs ik je naar PHP.net.

mysqli_query met een SELECT-statement levert:
- ofwel false op wanneer er syntax-fouten in de query zitten
- ofwel een mysqli_result object (dit kan overigens een lege resultset zijn)

Op regel 31 vergelijk je het resultaat echter met true. Dit gaat nooit werken.

Dit had je ook zelf kunnen zien, je zegt immers:
Helaas krijg ik nog steeds de foutmelding dat er geen medicijn_ID wordt gekozen en dus het formulier wordt niet geladen met medicijn gegevens...

Dit wijst je rechtstreeks naar het if-statement waar het resultaat blijkbaar dus geen true was.

Reageren