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"; ?>
Misschien is het ook wel handig om de tips die je krijgt te gebruiken.

Het voorbeeld heb ik niet voor niets met mysqli_real_escape_string gemaakt, dat is niet omdat ik graag mijn toetsenbord sneller wil verslijten maar omdat je nu echt vatbaar bent voor SQL injectie. Daarnaast gaf je aan dat je extra variabelen aanmaken zo gewend bent, maar probeer het bij dit project toch eens zonder dit te doen.

Ook zou ik het gebruik van die(); wat minder doen.
In het echte leven zeg je ook niet tegen iemand als iets niet lukt: "sterf!"

Hoe kan ik anders een bericht weergeven plus een paar seconden wachten voordat een PHP redirect plaatsvindt?

Misschien kun je ook eerst de redirect doen en op die pagina pas de melding weergeven?
- SanThe - op 31/08/2016 14:26:11

https://en.wikipedia.org/wiki/Meta_refresh

Tnx! voor je feedback.
Overigens, ik was ook even aan het zoeken waarom het lokaal de php header werkt en op de webhosting server niet. Ik kwam deze link tegen:
http://stackoverflow.com/questions/10165247/php-header-not-working-for-server-but-works-perfectly-fine-on-local-host
Daar wordt uitgelegd dat PHP header niet zal werken, als er een fout opgetreden is voor de PHP header.
Ik heb op 3 pagina's nu het volgende aangezet:


<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 'On');
?>

En tot mijn verbazing zie dat de website zeurt om een bestand wat ik niet eens heb geupload...
Als je bijv naar http://dev.pc-on-rails.nl/test2/med_edit.php?id=19 dan zult je ook de foutmelding zien...
En nogmaals db-config.php bestaat niet eens op de webhosting server

volledige foutmelding:

Warning: include(includes/db-config.php): failed to open stream: No such file or directory in /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/sidebar.php on line 1 Warning: include(): Failed opening 'includes/db-config.php' for inclusion (include_path='.:/opt/RZphp56/includes') in /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/sidebar.php on line 1


Search

Categories


Category name

Broerte
Mazelen
test01
Warning: Cannot modify header information - headers already sent by (output started at /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/header.php:37) in /mnt/weba/e1/99/51995699/htdocs/dev/test2/med_edit.php on line 45
Wat staat er op de eerste lijnen van sidebar.php?

- Ariën - op 31/08/2016 15:30:26

Wat staat er op de eerste lijnen van sidebar.php?

Hahaha! Je bent geweldig Ariën!
In de sidebar.php bestand stond idd nog een verwijzing naar "includes/db-config.php".
Dit heb ik nu aangepast.

Wanneer ik nu een item wil invoegen, dan verschijnt volgende foutmelding:

Warning: Cannot modify header information - headers already sent by (output started at /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/header.php:37) in /mnt/weba/e1/99/51995699/htdocs/dev/test2/med_insert.php on line 32

Code van header.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="includes/main.css">
<title></title>

</head>
<body>
<div id="wrapper">
<div id="header">
<div id="menu">
	<ul class="main-nav">
      <li><a href="index.php">Home</a></li>
      
	  
	  <li class="dropdown">
        <a href="medicines.php">Medicines</a>
        <ul class="drop-nav">
          <li><a href="med_insert.php">Insert medicine</a></li>       
        </ul>
      </li>
      
	  
	  <li class="dropdown">
        <a href="categories.php">Categories</a>
        <ul class="drop-nav">
          <li><a href="cat_insert.php">Insert category</a></li>       
        </ul>
      </li>
      <li><a href="contact.php">Contact</a></li>
    </ul> 

</div>


</div>

Zoals te zien, is er helemaal geen php code

en de code van med_insert.php

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 'On');
?>
<?php include "includes/db-config1.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php //echo "<div id='content'><h1>Insert Page</h1>";  ?>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
    if(isset($_POST['submit']) && strlen(trim($_POST['submit'])) > 0){
					$med_name = $_POST['name'];
					$med_production= $_POST['production'];
					$med_expire= $_POST['expire'];
					//$med_factory= $_POST['factory'];
					//$med_category= $_POST['category'];	
					if($med_name =="" || empty($med_name)){
						echo "This field can't be empty";
			
			
		} else {
				$query = "INSERT into medicines (med_name,med_create_date,med_expire_date,med_register_date) 
							values ('$med_name','$med_production','$med_expire', NOW()) ";
				$create_medicines = mysqli_query($connection,$query);
				$last_id = mysqli_insert_id($connection);
					
				if(!$create_medicines){ // Niet nodig en nooit DIE gebruiken buiten de ontwikkel versie.
				die(mysqli_error($connection));
				} else {
					/*echo "<p>New category created successfully and the last inserted ID is: " . $last_id .
					"<br>You will be automatically redirected to the previous page in 3 seconds...</p>";*/
					header ("refresh:3;url=medicines.php");
					exit;
				}
        
			}
	}
}
?>



<?php
echo "<div>";

echo "<form action='' method='post'>";
echo "<fieldset>";
echo "<legend>Insert form</legend>";
echo "<p><label for='name'>Medicine name:</label><input type='text' name='name' id='name'></p>"; 
echo "<p><label for='production'>Medicine production date:</label><input type='text' name='production' id='production'></p>";
echo "<p><label for='expire'>Medicine expire date:</label><input type='text' name='expire' id='expire'></p>";
echo "<p><label for='factory'>Delivered by factory:</label><input type='text' name='factory' id='factory'></p>";
echo "<p><label for='category'>belongs to category:</label><input type='text' name='category' id='category'></p>";
echo "<input type='submit' name='submit' value='Insert'";
echo "</fieldset>";
echo "</form>";
echo "</div>" ;

?>

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

En, idd op regel 32 heb ik PHP header gebruikt...

Ik zoek nog even verder om te kijken en ik zou het vinden als jullie nog willen meedenken!

Alvast bedankt!
Ongeacht of het PHP code is, output is output, en output mag niet voordat je headers verstuurt. Als je headers wilt kunnen gebruiken zul je eerst je acties moeten uitvoeren, waarna je je sidebar.php include't.
Ben van Velzen op 31/08/2016 15:51:37

Ongeacht of het PHP code is, output is output, en output mag niet voordat je headers verstuurt. Als je headers wilt kunnen gebruiken zul je eerst je acties moeten uitvoeren, waarna je je sidebar.php include't.


Hallo Ben,

Dus als ik je goed begrijp, moet ik eerst al mijn acties uitvoeren, zoals query/inserten van gegevens in formulieren en daarna mag ik header.php/footer.php includen?
Correct!

1) DB connectie
2) Inserten/updaten van gegevens
3) Ophalen van gegevens of redirect naar andere pagina
4) Weergeven HTML / output
Ramon van Dongen op 31/08/2016 16:30:13

Correct!

1) DB connectie
2) Inserten/updaten van gegevens
3) Ophalen van gegevens of redirect naar andere pagina
4) Weergeven HTML / output

Hoi Ramon,
Deze constructie heb ik nu ook, echter voor PHP header heb ik nog een echo die wat tekst laat zien samen met een HTML tag. En klopt het dat wanneer ik deze HTML tag verwijder dan zou de PHP header kunnen werken?

Anders zet ik te realiseren dat je PHP header niet kunt gebruiken, wat ik me eigenlijk niet kan voorstellen, het is niet voor niets gemaakt lijkt me! En dus je bent eigenlijk gewezen op PHP header alternatieven zoals wellicht javascript redirect...

Die constructie heb je dus niet, dat omschrijf je net, en dat blijkt ook niet uit je broncode.
Je mag *geen*, en dus ook echt *geen* output hebben verstuurd voor je header(), setcookie() of session_start() gebruikt. Nog geen spatie. Nog geen null byte. Wat je nu doet is dit:
1. Verbind met database
2. Verstuur een hele lap HTML
3. Verwerken, inserten, updaten gegevens
4. Nog weer wat HTML

Als je dit omwerkt naar de omschrijving van Ramon kun je niet alleen header() gebruiken, je hebt ook meteen veel meer controle over je script. Je kunt immers veel flexibeler omgaan met je HTML.
Hallo Ben,

Ik weet niet of je mijn code heb gezien, maar voor pagine med_insert.php heb ik de volgorde als volgt:
1. DB-connectie
2. includen header.php
3. includen sidebar.php
4. gegevens worden uit een formulier gehaald
5. deze gegevens worden verwerkt in de DB
6. Wanneer de query gelukt is, dan vindt er een PHP header functie plaats
7. HTML formulier wordt weergegeven
8. includen footer.php

Als er een betere manier is om de code te herstructureren, dan hoor ik dat graag.
Tnx!


<?php include "includes/db-config1.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php //echo "<div id='content'><h1>Insert Page</h1>";  ?>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
    if(isset($_POST['submit']) && strlen(trim($_POST['submit'])) > 0){
					$med_name = $_POST['name'];
					$med_production= $_POST['production'];
					$med_expire= $_POST['expire'];
					//$med_factory= $_POST['factory'];
					//$med_category= $_POST['category'];	
					if($med_name =="" || empty($med_name)){
						echo "This field can't be empty";
			
			
		} else {
				$query = "INSERT into medicines (med_name,med_create_date,med_expire_date,med_register_date) 
							values ('$med_name','$med_production','$med_expire', NOW()) ";
				$create_medicines = mysqli_query($connection,$query);
				$last_id = mysqli_insert_id($connection);
					
				if(!$create_medicines){ // Niet nodig en nooit DIE gebruiken buiten de ontwikkel versie.
				die(mysqli_error($connection));
				} else {
					/*echo "<p>New category created successfully and the last inserted ID is: " . $last_id .
					"<br>You will be automatically redirected to the previous page in 3 seconds...</p>";*/
					header ("refresh:3;url=medicines.php");
					exit;
				}
        
			}
	}
}
?>



<?php
echo "<div>";

echo "<form action='' method='post'>";
echo "<fieldset>";
echo "<legend>Insert form</legend>";
echo "<p><label for='name'>Medicine name:</label><input type='text' name='name' id='name'></p>"; 
echo "<p><label for='production'>Medicine production date:</label><input type='text' name='production' id='production'></p>";
echo "<p><label for='expire'>Medicine expire date:</label><input type='text' name='expire' id='expire'></p>";
echo "<p><label for='factory'>Delivered by factory:</label><input type='text' name='factory' id='factory'></p>";
echo "<p><label for='category'>belongs to category:</label><input type='text' name='category' id='category'></p>";
echo "<input type='submit' name='submit' value='Insert'";
echo "</fieldset>";
echo "</form>";
echo "</div>" ;

?>

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

Reageren