Hallo allemaal,

Dit is merkwaardig.
Ik heb een case die reageert op 0 records, 1 record en meer dan1 record.

Als er geen record is, en dat is ook zo, toont hij een form.(administratie0.php)
Die verlaat ik na het invullen door op opslaan te klikken en dan wordt een query uitgevoerd:

administratie0.php
<?php										
if (isset($_POST['knop_opslaan']))	{
	$aantal['aantal'] = $aantal['aantal'] + 1;
	include("administraties1.php");

} else {
	?><form action="index.php" method="post">
	<p><B>Voer hier de administratie gegevens in.<B></p>												
	<table>
	<tr><td>
	<div class="pf">Naam</div></td><td><input type="text" id="adm_naam" name="adm_naam" value="" tabindex="1" size="107"> 
	</td></tr><tr><td>
	<div class="pf">Straat + Huisnummer</div></td><td><input type="text" id="adm_straat" name="adm_straat" value="" tabindex="2" size="90"> 
	<input type="text" id="adm_huisnummer" name="adm_huisnummer" value="" tabindex="3" size="10">
	</td></tr><tr><td>
	<div class="pf">Postcode + Plaats</div></td><td><input type="text" id="adm_postcode" name="adm_postcode" value="" tabindex="4" size="7">
	<input type="text" id="adm_Plaats" name="adm_Plaats" value="" tabindex="5" size="93">
	</td></tr><tr><td>
	<div class="pf">Telefoonnr</div></td><td><input type="text" id="adm_telefoonnr" name="adm_telefoonnr" value="" tabindex="6" size="20">
	</td></tr><tr><td>
	<div class="pf">KvK</div></td><td><input type="text" id="adm_kvk" name="adm_kvk" value="" tabindex="7" size="20">
	</td></tr><tr><td>
	<div class="pf">BTWnr</div></td><td><input type="text" id="adm_btwnr" name="adm_btwnr" value="" tabindex="8" size="20">
	</td></tr><tr><td>
	<div class="pf">Website</div></td><td><input type="text" id="adm_website" name="adm_website" value="" tabindex="9" size="107">
	</td></tr><tr><td>
	<div class="pf">e-mail</div></td><td><input type="text" id="adm_email" name="adm_email" value="" tabindex="10" size="107">
	</td></tr><tr><td>
	<input type="reset" value="Velden legen" id="knop_reset" name="knop_reset" alt="Alle velden terug zetten in de default waarde" tabindex="11">
	</td><td>
	<input type="submit" value="Opslaan"; id="knop_opslaan" name="knop_opslaan" alt="Administratie opslaan" tabindex="12">
	<?php
}
if (isset($_POST['knop_opslaan'])) {
	$query01 = "INSERT INTO tabel_administraties (	
	administraties_naam, administraties_straat, administraties_huisnr, administraties_postcode, administraties_plaats, administraties_telefoonnr, administraties_kvk, administraties_btwnr, administraties_email
	) VALUES (
	'" . $_POST["adm_naam"] . "', '" . $_POST["adm_straat"] . "', '" . $_POST["adm_huisnummer"] . "', '" . $_POST["adm_postcode"] . "', '" . $_POST["adm_Plaats"] . "', '" . $_POST["adm_telefoonnr"] . "', '" . $_POST["adm_kvk"] . "', '" . $_POST["adm_btwnr"] . "', '" . $_POST["adm_website"] . "', '" . $_POST["adm_email"] . "');";
	$stmt = $dbh->prepare($query01);
	$stmt->execute();
}?>
</table>
</form>


Dit werkt, want daarna zie ik in de tabel 1 record staan.
Maar aansluitend wil ik de informatie in een ander form weer tonen. Maar die blijkt dan leeg te zijn, terwijl ik toch echt een gevuld record in de tabel zie staan. Met F5 krijg ik het wel in beeld.

Als ik het hele programma opnieuw start, kom ik weer door de case, maar dit keer ziet hij dat er 1 record is en toont hij die met het zelfde form als dat ik eerder gebruikte nadat ik een record had toegevoegd. Maar dit keer zie ik het record wel in het form. Hier volgt de code om het ingevulde record te tonen.

administratie1.php
?php
$query01 = "SELECT * FROM tabel_administraties";
$stmt = $dbh->prepare($query01);
$stmt->execute();
//PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set 
$record = $stmt->fetch(PDO::FETCH_ASSOC);

echo "<table>";
echo "<tr><td>Administratie van: </td><td>" . $record['administraties_naam'] . "</TD></TR>";
echo "<tr><td>adres is: </td><td>" . $record['administraties_straat'] . " " . $record['administraties_huisnr'] . "</TD></TR>";
echo "<tr><td></td><td>" . $record['administraties_postcode'] . " " . $record['administraties_plaats'] . "</TD></TR>";
echo "<tr><td>Telefoonnr.: </td><td>" . $record['administraties_telefoonnr'] . "</TD></TR>";
echo "<tr><td>K.v.K. nr.: </td><td>" . $record['administraties_kvk'] . "</TD></TR>";
echo "<tr><td>B.T.W. nr.: </td><td>" . $record['administraties_btwnr'] . "</TD></TR>";
echo "<tr><td>e-mail adres: </td><td>" . $record['administraties_email'] . "</TD></TR>";
echo "</table>";	
?>


Wie heeft er een tip.

Alvast bedankt.
Wat zit je met die query te doen? Half prepared statement, half onveilig prutswerk? Schrijf dit eerst eens om naar hoe prepared statements gebruikt dienen te worden, en als je toch bezig bent, haal die nutteloze variabelen die je toch niet gebruikt zoals $straat, $huisnr eens weg.
De variabele die ik niet gebruik heb ik even daar aangemaakt om ze op een later tijdstip te kunnen gaan valideren.
Wat bedoel je met half onveilig prutswerk?
Zo als ik mijn PDO SQL query heb neergezet, heb ik aanwijzingen en voorbeelden overgenomen c.q. geïnterpreteerd.
Maar misschien heb je een aanwijzing voor me?

Nu je het over de query hebt, bedacht ik me dat de variabele ook in de query gebruikt kunnen worden. Hiermee is het wel leesbaarder. verder lost het natuurlijk niets op.

Ik heb de query in de en wat omschrijvingen aangepast zie dit stukje code.

[code] // als er dan geen fouten zijn ga na het opslaan naar index.php
if(!count($errors)) {
//gegevens opslaan in de database
$query01 = "INSERT INTO tabel_administraties (
administraties_naam, administraties_straat, administraties_huisnr, administraties_postcode, administraties_plaats, administraties_telefoonnr, administraties_kvk, administraties_btwnr, administraties_email
) VALUES (
'" . $naam . "', '" . $straat . "', '" . $huisnummer . "', '" . $postcode . "', '" . $plaats . "', '" . $telefoonnr. "', '" . $kvk . "', '" . $btwnr . "', '" . $website . "', '" . $email . "');";
$stmt = $dbh->prepare($query01);
$stmt->execute();
header('Location: index.php');
exit;
}[\code]
Nee. Prepared statements scheiden hun parameters van de query, zoals in de manual voor prepare wordt beschreven: http://php.net/manual/en/pdo.prepare.php Je hoort NOOIT de parameters in de query op te nemen als je prepared statements gebruikt.
YES!!!
Daar zat dus de fout. Bedankt allemaal. Ben, je gaf net de laatste tip die ik nodig had om tot dit resultaat te komen.
Mogelijk dat ik de velden en variabele nog in een array kan zetten, om zo de code korter te maken, maar dit werkt en dat was het doel. Van de vraag.
Wat mijbetreft kan deze topic gesloten worden.

Voor de volledigheid de werkende code

administraties0.php
<?php
include("databaseopenen.php");

// functie die de formuliervelden valideert en foutmeldingen aanmaakt
function validate($naam, $email) {
	$errors = array();
	
	// validatieregels voor de naam
	if(strlen($naam) < 1) {
		$errors[] = 'U heeft geen naam ingevuld.';
	}
	
	// validatieregels voor het mailadres
	if(!strlen($email)) :
		$errors[] = 'U heeft geen email adres ingevuld.';
	elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)):
			$errors[] = 'U heeft een ongeldig email adres ingevuld.';
	endif;
	
	// geef de array met foutmeldingen terug
	return $errors;
}

// initialisatie van de variabelen (zorgt er voor dat variabelen altijd bestaan en een standaardwaarde hebben).
$naam = '';
$straat = '';
$huisnummer = '';
$postcode = '';
$plaats = '';
$telefoonnr = '';
$kvk = '';
$btwnr = '';
$website = '';
$email = '';
$errors = array();

// indien het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	// overschrijf de standaardwaarden voor de waarden die ge-POST zijn
	$naam = $_POST["adm_naam"];
	$straat = $_POST["adm_straat"];
	$huisnummer = $_POST["adm_huisnummer"];
	$postcode = $_POST["adm_postcode"];
	$plaats = $_POST["adm_plaats"];
	$telefoonnr = $_POST["adm_telefoonnr"];
	$kvk = $_POST["adm_kvk"];
	$btwnr = $_POST["adm_btwnr"];
	$website = $_POST["adm_website"];
	$email = $_POST["adm_email"];
	
	// valideer de ingevulde gegevens
	$errors = validate($naam, $email);

	// als er dan geen fouten zijn ga na het opslaan naar index.php
	if(!count($errors)) {
		//gegevens opslaan in de database
		$stmt = $dbh->prepare("INSERT INTO tabel_administraties (	
		administraties_naam, administraties_straat, administraties_huisnr, administraties_postcode, administraties_plaats, administraties_telefoonnr, administraties_kvk, administraties_btwnr, administraties_website, administraties_email
		) VALUES (	
		:administraties_naam, :administraties_straat, :administraties_huisnr, :administraties_postcode, :administraties_plaats, :administraties_telefoonnr, :administraties_kvk, :administraties_btwnr, :administraties_website, :administraties_email
		)");
		
		$stmt->bindParam(':administraties_naam',$naam);
		$stmt->bindParam(':administraties_straat',$straat);
		$stmt->bindParam(':administraties_huisnr',$huisnummer);
		$stmt->bindParam(':administraties_postcode',$postcode);
		$stmt->bindParam(':administraties_plaats',$plaats);
		$stmt->bindParam(':administraties_telefoonnr',$telefoonnr);
		$stmt->bindParam(':administraties_kvk',$kvk);
		$stmt->bindParam(':administraties_btwnr',$btwnr);
		$stmt->bindParam(':administraties_website',$website);
		$stmt->bindParam(':administraties_email',$email);
		
		$stmt->execute();
		header('Location: index.php');
		exit;
	}
}

?><!DOCTYPE html>				
<html>
<head>
	<meta charset="utf-8">
	<title>Geldboom administraties0</title>
	<link rel="stylesheet" type="text/css" href="css/style.css">    
</head>
<body>
<?php
if(count($errors)) {
	echo '<ul id="errors">';
	foreach($errors as $error) {
		echo '<li>' . $error . '</li>';
		}
	echo '</ul>';
}
?>
	<table class="empty">
		<tr>
			<td width="250" class="vak1">
			</td>
			<td class="programmadeel">
				<form action="" method="post">
				<p><B>Voer hier de administratie gegevens in.<B></p>												
				<table>
				<tr><td>
				<div class="pf">Naam : </div></td><td><input type="text" id="adm_naam" name="adm_naam" value="" tabindex="1" size="107"> 
				</td></tr><tr><td>
				<div class="pf">Straat + Huisnummer : </div></td><td><input type="text" id="adm_straat" name="adm_straat" value="" tabindex="2" size="90"> 
				<input type="text" id="adm_huisnummer" name="adm_huisnummer" value="" tabindex="3" size="10">
				</td></tr><tr><td>
				<div class="pf">Postcode + Plaats : </div></td><td><input type="text" id="adm_postcode" name="adm_postcode" value="" tabindex="4" size="7">
				<input type="text" id="adm_Plaats" name="adm_plaats" value="" tabindex="5" size="93">
				</td></tr><tr><td>
				<div class="pf">Telefoonnr : </div></td><td><input type="text" id="adm_telefoonnr" name="adm_telefoonnr" value="" tabindex="6" size="20">
				</td></tr><tr><td>
				<div class="pf">KvK : </div></td><td><input type="text" id="adm_kvk" name="adm_kvk" value="" tabindex="7" size="20">
				</td></tr><tr><td>
				<div class="pf">BTWnr : </div></td><td><input type="text" id="adm_btwnr" name="adm_btwnr" value="" tabindex="8" size="20">
				</td></tr><tr><td>
				<div class="pf">Website : </div></td><td><input type="text" id="adm_website" name="adm_website" value="" tabindex="9" size="107">
				</td></tr><tr><td>
				<div class="pf">e-mail : </div></td><td><input type="text" id="adm_email" name="adm_email" value="" tabindex="10" size="107">
				</td></tr><tr><td>
				<input type="reset" value="Velden legen" id="knop_reset" name="knop_reset" alt="Alle velden terug zetten in de default waarde" tabindex="11">
				</td><td>
				<input type="submit" value="Opslaan"; id="knop_opslaan" name="knop_opslaan" alt="Administratie opslaan" tabindex="12">
				</table>
				</form>
			</td>
		</tr>
	</table>
</body>
</html>

Dit zijn fratsen die niet echt nodig zijn:


 $naam = $_POST["adm_naam"];
    $straat = $_POST["adm_straat"];
    $huisnummer = $_POST["adm_huisnummer"];
    $postcode = $_POST["adm_postcode"];
    $plaats = $_POST["adm_plaats"];
    $telefoonnr = $_POST["adm_telefoonnr"];
    $kvk = $_POST["adm_kvk"];
    $btwnr = $_POST["adm_btwnr"];
    $website = $_POST["adm_website"];
    $email = $_POST["adm_email"];

Waarom zou je ze kopiëren?
- Ariën - op 29/08/2017 23:18:27

Dit zijn fratsen die niet echt nodig zijn:


 $naam = $_POST["adm_naam"];
    $straat = $_POST["adm_straat"];
    $huisnummer = $_POST["adm_huisnummer"];
    $postcode = $_POST["adm_postcode"];
    $plaats = $_POST["adm_plaats"];
    $telefoonnr = $_POST["adm_telefoonnr"];
    $kvk = $_POST["adm_kvk"];
    $btwnr = $_POST["adm_btwnr"];
    $website = $_POST["adm_website"];
    $email = $_POST["adm_email"];

Waarom zou je ze kopiëren?


Tenzij je deze waarden weer in je formulier wilt weergeven (als de validatie mislukt). De $_POST variabelen zijn altijd onzeker (ontbreken zowiezo als de pagina in de GET modus wordt aangeroepen) dus zul je variabelen moeten initialiseren en voorwaardelijk overschrijven.


FOUT:

<input type="text" name="naam" value="<?php echo $_POST['naam']; ?>">


goed:

<?php
$naam = '';

if(isset($_POST['naam']) {
	$naam = $_POST['naam'];
?>
<input type="text" name="naam" value="<?php echo $naam; ?>">


Ik vind jullie commentaar dan ook niet heel erg terecht (Ben en Aar) als je bedenkt dat je een gebruiksvriendelijk formulier wilt maken met validatie zoals 99,9% van alle formulieren zijn.
ALS je dat doet dan KUN je gelijk hebben. Als zou ik dat nooit zo doen. Maar TS doet dat helemaal niet, dus is dat een onterecht argument.
Het gaat er denk ik niet om wie er gelijk heeft. Het gaat er om dat iemand die nog niet zo thuis is in PHP graag een formulier wil maken dat WERKT. Ik schrijf zelf ook in OOP en gebruik een vooraanstaand framework maar als ik die code laat zien aan Frits dan zal hij er zeer waarschijnlijk niets mee gaan doen. Als je de ladder op moet klimmen moet je beginnen met de onderste sport toch?
Daar heb je een punt, maar ondertussen is het zinloos kopieren van variabelen zoals het woord al zegt zinloos.

Reageren