na toevoegen weergeven?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Pagina: 1 2 3 volgende »

Frits van Leeuwen

Frits van Leeuwen

24/08/2017 21:31:51
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
?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.
Gewijzigd op 24/08/2017 23:15:28 door Frits van Leeuwen
 
PHP hulp

PHP hulp

08/05/2024 16:56:45
 
Rob Doemaarwat

Rob Doemaarwat

25/08/2017 03:01:19
Quote Anchor link
Ik vermoed dat we nog iets missen (de switch/case waar je het over hebt, waar komt die $aantal['aantal'] vandaan, enz), maar met bovenstaande denk ik dat er dit gebeurt:
- administratie0.php#4: Hier toon je de informatie via administraties1.php. Die is dan echter nog niet opgeslagen (= leeg).
- administratie0.php#34+: Hier sla je de informatie pas op.
Daarom zie je de info een 2e keer wel; als ie dan langs regel 4 komt is er wel wat te tonen.
Je zult je 'opslaan' code (blok na regel 34) dus voor je 'toon' code (regel 4) moeten plaatsen (meestal is het sowieso handig om eerst alle 'afhandeling' te doen, en dan pas met je presentatie/weergave aan de slag te gaan.

Verder kun je nog naar SQL-injectie kijken (voer maar eens een "'s Hertogenbosch" in) en Cross Site Scripting (voer maar eens <script>alert("XSS")</script> in).
 
Frits van Leeuwen

Frits van Leeuwen

25/08/2017 08:43:10
Quote Anchor link
index.php bevat de de switch/case.

Index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Basisbestand</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">    
    </head>
    
    <body>
        <header>
        </header>
        <content>
            <?php
                include("databaseopenen.php");
                echo $b['algemeen']['programmanaam'] . " " . $b['algemeen']['versienummer'];
            ?>

            <table class="empty">
                <tr>
                    <td width="240" class="vak1">
                    </td>
                    <td class="programmadeel">
                        <form action="index.php" method="post">
                            <?php
                            if ($file_exist) {
                                $einde = false;
                                //aantal record tellen in een tabel
                                do {
                                    $query00 = "SELECT COUNT(*) as aantal FROM tabel_administraties";
                                    $stmt = $dbh->prepare($query00);
                                    $stmt->execute();
                                    //PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set
                                    $aantal = $stmt->fetch(PDO::FETCH_ASSOC);
                                    
                                    switch($aantal['aantal']) :
                                    case
0:
                                        include("administraties0.php");
                                        break;
                                    case
1:
                                        include("administraties1.php");
                                        break;
                                    default:

                                        echo "<p>Er zijn meerdere administraties aanwezig.</p>";
                                        //hier volgt een keuze knop van administraties
                                        break;
                                    endswitch;
                                }
while ($einde);
                            }
else {
                                echo "<p>Vermoedelijk is er iets mis gegaan bij de installatie.</p>";
                                //knop naar de installatie
                                echo "<p><button type=&quot;submit&quot; formaction=install.php>Click hier om te installeren</button></p>";
                            }
?>
    
                        </form>
                    </td>
                </tr>
            </table>
        </content>
        <footer>
        </footer>
    </body>
</html>


Er zijn geen records aanwezig en ik ga dan naar administraties0.php Er is nog niet op opslaan geklikt, dus val ik eerst in het invulscherm.
Daar vul ik de gegevens in en klik op opslaan.
(Als ik in de tabel kijk, zie ik dat hij daadwerkelijk is opgeslagen.)
Als ik dan opnieuw administraties0.php in ga, is de knop opslaan dus aangeklikt en open ik dus administraties1.php en wordt dit gepubliceerd als of er niets is ingevuld. (Na F5 zie ik in administraties1.php wel het ingevulde record.)

Als ik in de browser het tabblad sluit en opnieuw index.php open, krijg ik ook direct administraties1.php opgestart met daarin het ingevulde record.
Gewijzigd op 25/08/2017 14:15:49 door Frits van Leeuwen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/08/2017 18:06:13
Quote Anchor link
Een paar handvaten:

- één URL is één pagina. Een indexpagina waar dus een keuze gemaakt kan worden uit verschillende administraties OF een formulier A getoond wordt OF formulier B getoond wordt is een slechte keuze. Maak hier aparte pagina's van en gebruik een REDIRECT om de gebruiker door te sturen naar een andere pagina als dat nodig is.

- Laat formulieren POSTEN naar dezelfde URL. Dus op pagina mysite.nl/new-administration.php post je je formulier naar dezelfde url: ook mysite.nl/new-administration.php. Je action attribuut kun je dan gewoon leeg laten <form action="" method="post">.

- gebruik if($_SERVER['REQUEST_METHOD'] == 'POST') om te checken of je formulier verzonden is

- Nadat een formulier verzonden is ga je de verzonden data VALIDEREN. Dat wil zeggen dat je de invoer controleert op onjuistheden en als die er zijn toon je je formulier opnieuw met een foutmelding. (handig feitje is dat je toch nog steeds op dezelfde URL bent gebleven). Als de gegevens correct zijn doe je wat nodig is zoals gegevens opslaan in de database of het verzenden van een email.

- Nadat een formulier voltooid en verwerkt is REDIRECT ALTIJD de gebruiker. Hiermee voorkom je voor een belangrijk deel dat formulieren twee of meerdere keren in je database toegevoegd worden. Bovendien zal je gebruiker niet meer zo een vervelende alert van zijn browser krijgen met de vraag of die de gegevens opnieuw wil indienen.

- Zet de HTML of de OUTPUT van je webpagina helemaal onder in. Bovenin je code komt je PHP logica (bijvoorbeeld om je formulier te verwerken)
Gewijzigd op 25/08/2017 18:06:49 door Frank Nietbelangrijk
 
Frits van Leeuwen

Frits van Leeuwen

26/08/2017 00:12:30
Quote Anchor link
Zo zo.... dat is een hoop informatie. Hier krijg ik een lesje internet programmeren. bedankt hier voor.
Als ik het zo lees, lijkt het me allemaal wel heel logisch. Ik zal mijn kijk op het php programmeren wat moeten wijzigen. Ik begon al steeds meer het gevoel te krijgen dat ik een andere weg in moest slaan, maar zover was ik nog niet. Heb je ook wat tips op dat REDIRECT? Want daar heb ik wel oren naar. Onnodig klikken vind ik niet fijn in mijn programma.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/08/2017 02:18:53
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

header('Location: index.php');
exit;

?>


Twee belangrijke dingen:
- voordat je de header() functie gebruikt mag je nog geen enkele OUTPUT verzonden hebben. Dat wil zeggen: geen HTML en geen echo's. ook geen spatie e.d. Dat is (o.a.) waarom ik ook hamer op php logica boven in je code en output onder in je code.
- voeg ook een exit() toe na een redirect om je code dan ook werkelijk te beëindigen.
 
Frits van Leeuwen

Frits van Leeuwen

26/08/2017 22:13:24
Quote Anchor link
Na de boel gereorganiseerd te hebben d.m.v. jouw aanwijzingen, werkt het. Bedankt.
Ook zijn mijn pagina's duidelijke en overzichtelijker geworden (in de code natuurlijk)

Bedankt.
 
Frits van Leeuwen

Frits van Leeuwen

27/08/2017 22:23:42
Quote Anchor link
De uitgebreide uitleg die ik kreeg, verwerk ik beetje bij beetje en ik hoop dat ik hier mee ook tot een goed code ga komen. Toch vind ik het nog wat lastig.
Door het verder doorvoeren van dat wat ik er van heb begrepen of dacht begrepen te hebben, kreeg ik een oud probleem weer terug.
Als ik nu op "opslaan" klik, krijg ik weer een scherm, waarin alle velden van het form weer leeg zijn.
Ook in de database is het nu niet opgeslagen. De nieuwe versie van administratie0.php heb ik hier onder geplaatst. Is dit een beetje wat je bedoelde "Frans Nietbelangrijk"? En wie kan mij vertellen waar ik nu de mist in ga?

administratie0.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
if (isset($_POST['knop_opslaan']))    {
    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);
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $stmt->execute();
        header("Location:index.php");
        exit;
    }
}

?>
                    
<html>
 <head>
    <meta charset="utf-8">
    <title>Administratie 0</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="" 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>
 
- Ariën  -
Beheerder

- Ariën -

27/08/2017 22:31:43
Quote Anchor link
Eerst kijk je of er op je knop geklikt is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (isset($_POST['knop_opslaan']))    {


en dan kijk je of het formulier via POST verstuurd is:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    if($_SERVER['REQUEST_METHOD'] == 'POST') {


Best onlogisch.
Gebruik enkel alleen maar de tweede manier met REQUEST_METHOD bovenaan je script.
Verder lijkt het mij niet de bedoeling of de redirecten naar index, want zo gaat je $_POST waarde verloren, die je prima gebruiken in je formulier, om de ingevulde velden automatisch in te vullen als de validatie niet klopt.
 
Frits van Leeuwen

Frits van Leeuwen

27/08/2017 22:45:31
Quote Anchor link
Maar als ik

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == 'POST') {


gebruik, weet de pagina toch niet welke knop ik gedrukt heb? En onderaan werd mij geadviseerd om zo min mogelijk php code te hebben. Dus ik breng veel naar de bovenkant van de code.

Ik wil de input die op dit formulier gegeven wordt, in een database hebben, die ik vervolgens op index.php weer uitlees en ga tonen. Dit werkt al wel. Door het omgooien van de structuur bedacht ik weer nieuwe mogelijkheden. En 1 daar van is het presenteren van de administratie op de eerste pagina. En dat gedeelte werkt al wel.
Gewijzigd op 27/08/2017 22:56:10 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

27/08/2017 22:55:30
Quote Anchor link
Heb je dan meerdere submit-knoppen in je formulier? Ik tel er maar eentje.
 
Frits van Leeuwen

Frits van Leeuwen

27/08/2017 23:04:25
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?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.
Gewijzigd op 29/08/2017 20:55:03 door Frits van Leeuwen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/08/2017 23:09:53
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?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>


Toevoeging op 27/08/2017 23:14:57:

Oh en deze regel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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 ;-)
 
Ward van der Put
Moderator

Ward van der Put

28/08/2017 08:11:40
Quote Anchor link
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.
 
Frits van Leeuwen

Frits van Leeuwen

28/08/2017 08:46:08
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/08/2017 09:14:55
Quote Anchor link
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.



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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>';
?>
Gewijzigd op 28/08/2017 09:16:53 door Frank Nietbelangrijk
 
Ward van der Put
Moderator

Ward van der Put

28/08/2017 10:07:49
Quote Anchor link
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.
 
Frits van Leeuwen

Frits van Leeuwen

28/08/2017 13:32:12
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/08/2017 15:27:08
Quote Anchor link
>> 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.
 
Frits van Leeuwen

Frits van Leeuwen

28/08/2017 15:59:41
Quote Anchor link
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
 
Frits van Leeuwen

Frits van Leeuwen

29/08/2017 20:51:29
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?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]
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.