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.
Nee nu niet, maar ik probeer er lering uit te trekken, zodat ik later als ik dat wel heb er gebruik van kan maken.

aministratie0.php
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	include("databaseopenen.php");									
	$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();
} 
?>					
<html>
 <head>
	<meta charset="utf-8">
	<title>index</title>
	<link rel="stylesheet" type="text/css" href="css/style.css">    
</head>
<body>
	<table class="empty">
		<tr>
			<td width="250" class="vak1">
			</td>
			<td class="programmadeel">
				<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">
				</table>
				</form>
			</td>
		</tr>
	</table>
</body>
</html>


Maar nu even lekker slapen, dan hoop ik morgen weer verder te kunnen puzzelen.
En al heb je meerdere knoppen dan is het nog steeds logischer om eerst te testen of het formulier wel verzonden is voordat je gaat bekijken op WELKE knop er gedrukt is.

Maar laten we niet alleen commentaar geven. Ik zie namelijk zeker al een verbetering :-) Je hebt het heel erg goed voor elkaar gekregen om de HTML (output) onderin te plaatsen. Het ziet er al zonder dat ik je code ga doorploegen veel logischer uit.

Ik wilde aan mijn vorige bericht nog een voorbeeldje toevoegen maar door gebeurtenissen in real life ben ik dat vergeten om te doen. Hier komt het:


<?php

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

// initialisatie van de variabelen (zorgt er voor dat variabelen altijd bestaan en een standaardwaarde hebben).
$naam = '';
$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['naam'];
    $email = $_POST['email'];
    
    // valideer de ingevulde gegevens
    $errors = validate($naam, $email);
    
    // als er dan geen fouten zijn stuur de gebruiker door naar een bedank pagina
    if(!count($errors))
    {
        // Verwerk hier je formulier, bijvoorbeeld een email versturen of de gegevens opslaan in de database
        
        header('Location: bedankt.html');
        exit;
    }
}
?>
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>een titel</title>
    </head>
    <body>
        
        <?php
            if(count($errors)) {
                echo '<ul id="errors">';
                foreach($errors as $error) {
                    echo '<li>' . $error . '</li>';
                }
                echo '</ul>';
            }
        ?>
        <form action="" method="post">
            <input type="text" name="naam" value="<?php echo htmlspecialchars($naam); ?>" />
            <input type="email" name="email" value="<?php echo $email; ?>" />
            <button type="submit">Verzenden</button>
        </form>
    </body>
</html>


[size=xsmall]Toevoeging op 27/08/2017 23:14:57:[/size]

Oh en deze regel:

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

Maak het jezelf niet te moeilijk en plaats deze gewoon boven in je code. en niet in een if statement want dan moet je daar de rest van je leven aan blijven denken ;-)
Kleine aanvulling, want je mist nog een stukje logica.

Als je op een knop Opslaan klikt, creëer je een nieuwe record met een nieuwe ID in de database of wijzig je een bestaande record met een bestaande ID uit de database. Die ID moet je hergebruiken in de redirect na het opslaan om een gevuld formulier weer te geven; je doet dat nu nog niet, waardoor je na het opslaan een leeg formulier ziet.
Ja klopt die logica zit hier niet in. Maar het is mijn bedoeling om de pagina, waarmee ik het record toevoeg, te sluiten. In een andere pagina (index.php) roep ik deze vervolgens op uit de database en toon ik hem als tekst. Er moet daar dan een knopje gaan komen om hem weer te kunnen wijzigen, maar zover ben ik nu nog niet. Ik wil eerst dat de toevoeg pagina administraties0.php een record kan toevoegen en dat ik die daarna dus verlaat.
Er is een engelse term CRUD: Create, Read, Update en Delete.

Dit zijn de vier actions die meestal nodig zijn voor iedere "entiteit". Daarnaast is er vaak nog een pagina die alle adressen onder elkaar in tabelvorm laat zien met pagination.

Je hebt nu Create gedaan. Je kan dus nog drie pagina's maken:

- edit-address
- show-address
- delete-address

Er is echter wel een dingetje. Om een nieuw adres te maken hoeft je applicatie geen adres te laden uit de database maar om die andere drie acties te doen moet je applicatie wel weten WELK adres je wilt wijzigen/laten zien/verwijderen.

Die drie pagina's die gaan komen hebben dus een extra GET variabele nodig. Bijvoorbeeld:

http://my-site/show-address.php?id=5

In php ga je dan een SELECT of DELETE query toepassen die adres met id 5 uit de database haalt dan wel verwijderd.



<?php
// show address

include("databaseopenen.php");

// initialisatie
$id = 0;

// probeer de GET variabele te verkrijgen. Het is nooit zeker dat je die meekrijgt dus testen!
if(isset($_GET['id']) {
$id = intval($_GET['id']);
}

$stmt = $dbh->prepare("SELECT * FROM tabel_administraties WHERE id=" . $id . " LIMIT 1");
$stmt->execute();
$row = $stmt->fetch();

if($row === false) {
// rij niet gevonden in de database
header('Location: index.php');
exit;
}

echo '<pre>' . print_r($row, true) . '</pre>';
?>
Ik zou een CRUD niet te streng uitsplitsen: de Create verschilt namelijk niet wezenlijk van de Update.

Als je verantwoordelijkheden netjes scheidt, moet het voor de voorkant niet uitmaken of de achterkant bij 'Opslaan' of 'Save' nu een INSERT of een UPDATE uitvoert. Zou je het objectgeoriënteerd bouwen, dan moet je bijvoorbeeld een user-object of een data-object aan een mapper kunnen doorgeven en moet die mapper vervolgens zelfstandig bepalen waar en hoe de data worden opgeslagen, zonder dat andere objecten zich daarover hoeven te bekommeren en zonder dat ze weten hoe de mapper intern werkt.
Bedankt voor de antwoorden.

Ik kan nu even de wijzigingen niet doorvoeren. Maar als ik vanavond thuis ben wil ik het zeker gaan proberen. Ik hoop dan ook dat ik na het wijzigen van mijn code, na het toevoegen van het record door stap naar index.php . Ik hoef de informatie niet nog eens te bekijken.

CRUD.... de R is in orde.
CUD hou ik over. ;-)

De volgende stap wordt idd een lijstje tonen. van alle records en er daar 1 van kiezen. Maar dan wil ik die gekozen administratie tonen in index.php

Als dat gelukt is, ga ik ook om de E en de D er aan toe te voegen, om zo CRUD te voltooien. Ik wil dan in index.php knopjes plaatsen om te bewerken en te verwijderen.

Welke schermen ik dan nodig ga hebben, dat ga ik dan bekijken.

Maar dat zijn dingen die ik zelf heb ingepland om zo langzaam maar zeker vooruit te komen. Dit noem ik hier niet om er in het forum iets mee te doen. Maar alle tip zijn natuurlijk welkom.

>> De volgende stap wordt idd een lijstje tonen. van alle records en er daar 1 van kiezen. Maar dan wil ik die gekozen administratie tonen in index.php

- Waarom in index.php ?

>> Als dat gelukt is, ga ik ook om de E en de D er aan toe te voegen, om zo CRUD te voltooien. Ik wil dan in index.php knopjes plaatsen om te bewerken en te verwijderen.

- goed plan maar die knopjes maak je gewoon met <a href="http://my-site/show-address.php?id=5">show</a>. en met css kun je er de look aan geven alsof het een knop is.
Ik heb index.php als basis bestand. Ik wil de administratie gegevens van de geselecteerde administratie voortdurend in beeld hebben. Mogelijk maak ik er later een include van.
Ik was idd. van plan mooie knopjes te maken met html en css
Het heeft even geduurd, maar ik heb de code aangepast naar het voorbeeld van Frank Nietbelangrijk.
Maar het effect is toch nog steeds dat als ik een nieuw record (eerste record) toevoeg door hier de velden te vullen, dat ik daarna een schoon formulier krijg te zien en dat de database nog geen record bevat.

Wat is er dan toch mis? Kan iemand dat verklaren?

administraties0.php
[code]<?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 stuur de gebruiker door naar een bedank pagina
if(!count($errors)) {
// Verwerk hier je formulier, bijvoorbeeld een email versturen of de 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 (
'" . $_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();
header('Location: index.php');
exit;
}
}

?><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>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>[\code]

Reageren