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"; ?>
De eerste error; je roept het veld 'id' als index aan, maar deze benoemt je niet in de SELECT-query

De tweede error:
Pas je structuur aan naar dit:

<?php // kleurtjes in codeblok tonen
$result = mysqli_query($dbc,$query);
if($result===true) {
    while($row = mysqli_fetch_assoc($result)){
            $id= $row['id'];
            $medicinename = $row['medicinename'];
            $productiondate = $row['productiondate'];
            $expirationdate = $row['expirationdate'];
            $medicineprice = $row['medicineprice'];
    }
} else {
	echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
}
?>

$id= $row['id'];
Dit werkt niet omdat je geen 'id' in je SELECT hebt staan.

if(!$result)
Alleen als voorgaande if() true is bestaat $result, anders niet.
Beste - Ariën - & - SanThe -,

Bedankt voor jullie feedback.
Ik heb jullie verbetering aangebracht, en wanneer ik nu klik om een medicijn te bewerken, krijg ik enkel een wit pagina en verder niets...
Initieel dacht ik aan een synatix fout, maar kon niets vinden. Ook wordt er niets gerapporteerd mbt fouten..

De code van edit pagina ziet nu als volgt uit:


<?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 = $_GET['id'];
	$query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id=$id";
	$result = mysqli_query($dbc,$query);
	if($result === true) {
    while($row = mysqli_fetch_assoc($result)){
            $id= $row['id'];
            $medicinename = $row['medicinename'];
            $productiondate = $row['productiondate'];
            $expirationdate = $row['expirationdate'];
            $medicineprice = $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="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"; ?>
Je moet wel goed inspringen dan zie je de { en } beter.
<?php
if(isset($_GET['id'])){
$id = $_GET['id'];
$query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id=$id";
$result = mysqli_query($dbc,$query);
if($result === true) {
// Hier inspringen want er staat een {
while($row = mysqli_fetch_assoc($result)){
$id= $row['id'];
$medicinename = $row['medicinename'];
$productiondate = $row['productiondate'];
$expirationdate = $row['expirationdate'];
$medicineprice = $row['medicineprice'];
}
} else {
echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
}
// Nu zie je dat hier een } mist.
?>
Waarom de nieuwe variabele $id aanmaken?
Als id een getal is, waar controleer je dat?
Ik neem aan dat er voor elk id 1 resultaat zal zijn; dan heb je toch geen while nodig?

Bedenk ook dat, door het id in de broncode van het formulier aan te passen, e.e.a. vrij eenvoudig is te manipuleren.
- SanThe - op 31/12/2016 22:53:25

Je moet wel goed inspringen dan zie je de { en } beter.
<?php
if(isset($_GET['id'])){
$id = $_GET['id'];
$query = "SELECT id, medicinename, productiondate, expirationdate, medicineprice FROM medicines WHERE id=$id";
$result = mysqli_query($dbc,$query);
if($result === true) {
// Hier inspringen want er staat een {
while($row = mysqli_fetch_assoc($result)){
$id= $row['id'];
$medicinename = $row['medicinename'];
$productiondate = $row['productiondate'];
$expirationdate = $row['expirationdate'];
$medicineprice = $row['medicineprice'];
}
} else {
echo "Er is een fout bij ons opgetreden: ".mysqli_error($dbc);
}
// Nu zie je dat hier een } mist.
?>


Hoi - SanThe -,

Bedankt voor het meedenken. Ik was idd een { vergeten, en na het toevoegen van een { krijg ik nu geen wit pagina meer gelukkig :), maar de gegevens worden niet in het formulier geladen.
Er verschijnt de foutmelding: Er is een fout bij ons opgetreden, zoals eerder aangebracht door Arien.
Echter, de kolomnamen bestaan wel, want zie de kolomnamen van medicine tabel: http://dev.pc-on-rails.nl/user_registration/medicines.png

Blijkbaar gaat er iets fout tijdens het laden van de kolomnamen. Best wel vreemd eigenlijk...
Om het hele gebeuren te kunnen testen, is het url: http://dev.pc-on-rails.nl/user_registration/index.php
user: [email protected]
pass: test1
Waar moet ik die melding dan zien?
Obelix en Idefix op 01/01/2017 11:08:20

Waarom de nieuwe variabele $id aanmaken?
Als id een getal is, waar controleer je dat?
Ik neem aan dat er voor elk id 1 resultaat zal zijn; dan heb je toch geen while nodig?

Bedenk ook dat, door het id in de broncode van het formulier aan te passen, e.e.a. vrij eenvoudig is te manipuleren.

Hallo Obelix en Idefix,
Voor id heb ik een variabel aangemaakt om het straks op te kunnen nemen in de INSERT statement.
Je hebt gelijk, dat ik nergens controleer of de id een getal is...Dit kun idd beter, maar mijn focus ligt nu helemaal op de core-logica.
Daar heb je wel een punt, maar denk je dat een "simpele" internet-gebruiker weet hoe de broncode van een formulier bekijkt en gegevens aanpast? Of dit is meer voor een web-developer...

[size=xsmall]Toevoeging op 01/01/2017 14:54:09:[/size]

- Ariën - op 01/01/2017 14:51:25

Waar moet ik die melding dan zien?


Lijn 16 in het broncode of op de edit pagina, nadat je ingelogd bent en probeert een medicijn naam aan te passen...
Ik krijg dan: "No medicines has been chosen"
Je geeft blijkbaar je ID-parameter uit de GET niet door in de action van je form.

Ikzelf laat de action gewoon leeg, dan gebruikt de browser altijd de huidige URL voor de verwerking van het formulier.

En verder zit er SQL-injection in de SELECT-query.
Hallo - Ariën -,

Bedankt voor je feedback.
Ik snap je eerste opmerking niet. Wil je uitleggen hoe ik de ID-parameter wil in de action van het form kan zetten?

Ik heb nu de action form leeg gelaten en krijg nu geen foutmelding meer.
Echter, wanneer ik nu iets wil updaten dan wordt er niets bijgewerkt, en ik krijg ook geen foutmelding.
Vreemd dit!

Code ziet als volgt uit met escaping in:

<?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);
     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 "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($dbc));				
				
			}
	}

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

<form action="" method="post">

?>

Reageren