Advies gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cobol Developer

Dit ga je doen Als Cobol Ontwikkelaar zal je gaan meebouwen aan een onderdeel van het backend systeem waarbij je het functionele ontwerp vertaald naar een technische oplossing die geïntegreerd kan worden in de huidige omgeving. Je zorgt ervoor dat de bedrijfsprocessen op een efficiënte manier worden uitgevoerd en werkt proactief aan het verbeteren hiervan. Samen met jouw collega’s reviewen jullie elkaars code en test je je eigen code. Je werkt nauw samen met andere ontwikkelaars, testers en functioneel ontwerpers. Taken pakket: Beheren en doorontwikkelen van de bestaande omgeving; Vertalen van een functionele vragen naar een technische oplossing; Doorvoeren van

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer start jij in een development team met twee ervaren software ontwikkelaars. Jouw persoonlijke ontwikkeling is voor ons erg belangrijk en jij gaat dan ook meelopen met onze Senior .NET ontwikkelaar die jou met zijn kennis en ervaring een goede begeleiding kan aanbieden. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

Front-end developer E-Commere

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als front-end developer heb je een adviserende rol en sta je aan het eindpunt van alles wat met designs te maken heeft. Je overlegt met klanten en collega’s, en zet je in om ideeen om te zetten tot unieke concepten. Je bent het aanspreekpunt voor de klant en bewaakt tevens de planning. Eisen

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij toe aan een nieuwe uitdaging en werk je graag en goed in C++ en C#? Dan zijn we op zoek naar jou! Dit bedrijf is dé specialist op het gebied van automatiseringssoftware voor een specifieke branche en ze zijn per direct op zoek naar versterking in hun development team. Wat jij gaat doen binnen jouw rol als C++ ontwikkelaar; Je vertaalt de wensen van gebruikers naar een functioneel ontwerp. Je houdt je bezig met het ontwerpen, programmeren en testen van product aanpassingen. Je gaat nieuwe product releases implementeren in de projectteams. Je gaat de effecten van nieuwe

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

Software Programmeur

Functie omschrijving Ben jij op zoek naar een organisatie waar je samen met een team werkt aan iets moois en waar je naast hard werken ook hard kunt lachen? Dan ben je hier aan het juiste adres! Voor een informeel IT-bedrijf in omgeving Wassenaar zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed

Bekijk vacature »

Front-end developer wanted! (Angular, React, Vue.j

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

Software programmeur

Functieomschrijving Voor een erkende werkgever in de regio van Goes zijn wij op zoek naar een enthousiaste software programmeur met PHP/Symfony ervaring. Een gedreven persoon die het development team komt versterken met het aanpakken van complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel professionele als persoonlijke groei? Lees dan snel verder! Dit ga je doen: Beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Testen en door ontwikkelen van software; Ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Lead Webdeveloper

As Lead Web Developer at KUBUS you are responsible for the implementation design of requirements and the software architecture of the web application and services of BIMcollab. In your role as lead developer you will naturally search for the optimum between the required implementation time, the performance of the application and a fast go-to-market of features, in line with our automated test and release train. Together with the other senior developers in your team you monitor the architecture of the application and you advise the product owner about necessary refactoring to improve the maintainability of the platform. Our development team

Bekijk vacature »

Fullstack developer (NodeJS, React, AWS)

Functie Als Fullstack developer kom je te werken in het ontwikkelteam, maar zoals gezegd komt er veel meer bij kijken dan alleen maar ontwikkelen. Je bent samen met je collega’s continu bezig om de software uit te breiden maar hiernaast doe je doorlopend onderzoek naar de inzet van bijvoorbeeld Machine Learning. Ze willen met hun software echt voorlopen op andere en toegevoegde waarde leveren voor de eindgebruiker. Mede hierom zijn ze erg benieuwd naar iemand zijn persoonlijkheid, of hij graag nieuwe dingen uitzoekt (Google!), en initiatief neemt. Maar waar staan ze nu? Na een onderzoeksfase van ruim een jaar zijn

Bekijk vacature »
Danny Dillema

Danny Dillema

14/07/2011 10:40:49
Quote Anchor link
Hallo,

Ik heb een simpel gastenboek gemaakt.
Mijn vraag is of jullie hier naar willen kijken en kunnen aangeven wat er eventueel verbeterd kan worden.
Alvast bedankt!!

connect.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
    $host
= "localhost";
    $user = "root";
    $pass = "";
    $db = "gastenboek";
    
    $connError = "Er kan op dit moment geen verbinding met de database worden gemaakt!<br />
                Probeert u het later nog eens.<br />"
;
    $dbError = "De database is op dit moment niet beschikbaar!<br />
                Probeert u het later nog eens."
;
                            
    mysql_connect($host, $user, $pass) or die($connError);
    
    if(!mysql_select_db($db)) {
        echo $dbError;
    }

?>


functies.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
<?php    
    //geeft de tijd terug in nederlandse notatie    
    function convert_time($time) {
        return $time = date("d-m-Y, H:i:s", strtotime($time));
    }
    
    function
select_query($tabel, $field, $limit) {
        if($limit > 0) {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC LIMIT $limit";    
        }

        else {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC";
        }

        return mysql_query($query);
    }

?>


gastenboek.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
<?php ob_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <meta name="Gastenboek" content="Gastenboek">
        <link rel="stylesheet" type="text/css" href="style/style.css" />
        <title>Simpel gastenboek</title>
    </head>
    <body>
        <?php
            session_start();
            
            include("include/connect.php");
            include("include/functies.php");
        ?>

        
        <h1>Simpel gastenboek</h1>
        
        <table width = "400">
            <tr><td><h3>Berichten</h3></td></tr>
            <tr><td>------------------------------------------------------------------<tr><td>
            <?php
                $result
= select_query("items", "datum", "5");
                
                if(mysql_num_rows($result) > 0) {
                    for($i = 0; $i < 20 && $array = mysql_fetch_array($result); $i++) {
                        echo "<tr><td><b>Gepost op ".convert_time($array[3])."";  
                        echo " door ".htmlspecialchars_decode($array[1])."</b></tr>";
                        echo "<tr><td> ".htmlspecialchars_decode($array[2])." </td></tr>";
                        echo "<tr><td>------------------------------------------------------------------<tr><td>";    
                    }
                }

                else {
                    echo "<tr><td>Er zijn nog geen berichten geplaatst!</td></tr>";
                    echo "<tr><td>-----------------------------------------------------------------</td></tr>";
                }

            ?>

        </table>
        
        <form method = "post" action = "<?php $_SERVER['PHP_SELF']; ?>">
            <table>
                <tr><td><h3>Plaats een nieuw bericht</h3></td></tr>
                <tr><td><b>Naam</b><br><input type = "text" name = "naam" value = "<?php if(isset($_SESSION['naam']))echo $_SESSION['naam']; ?>"></td></tr>
                <tr><td><b>Bericht</b><br><textarea name = "bericht" cols = "40" rows = "6"><?php if(isset($_SESSION['bericht']))echo $_SESSION['bericht']; ?></textarea>
                <br>* maximaal 200 karakters!</td></tr>
                <tr><td><input type = "submit" name = "verzenden" value = "Verzenden"></td></tr>  
            </table>
        </form>
        <?php
            define("MAX_SIZE_NAAM", 40);
            define("MAX_SIZE_BERICHT", 200);
            
            if(isset($_SESSION['naam']) || isset($_SESSION['bericht'])) {
                unset($_SESSION['naam']);
                unset($_SESSION['bericht']);
            }

            
            if(isset($_POST['verzenden'])) {                                            
                $naam = $_POST['naam'];
                $bericht = $_POST['bericht'];
                $datum = date("c");

                $_SESSION['naam'] = $naam;
                $_SESSION['bericht'] = $bericht;
                
                if(empty($naam)) {
                    echo "Vul aub uw naam in!";
                    header("Refresh: 3");    
                }

                elseif(strlen($naam) > MAX_SIZE_NAAM) {
                    echo "Uw naam mag niet langer zijn dan 40 karakters!";
                    header("Refresh: 3");    
                }

                elseif(empty($bericht)) {
                    echo "Typ aub eerst een bericht!";
                    header("Refresh: 3");    
                }

                elseif(strlen($bericht) > MAX_SIZE_BERICHT) {
                    echo "Uw bericht mag niet langer zijn dan 200 karakters!";
                    header("Refresh: 3");    
                }

                elseif(preg_match('/[^0-9A-Za-z_\']/', $naam)) {
                    echo "U heeft 1 of meer karakters in uw naam die niet zijn toegestaan!<br>";
                    echo "Gebruik alleen letters, cijfers en underscore!";
                    header("Refresh: 3");
                }

                else {
                    $naam = mysql_real_escape_string(htmlentities($naam));
                    $bericht = mysql_real_escape_string(htmlentities($bericht));
                    $date = date("Y-m-d, H:i:s");
                    
                    $query = "INSERT INTO items(naam, bericht, datum)VALUES('$naam', '$bericht', '$date')";
                    $result = mysql_query($query);
                    
                    //sessie verwijderen
                    session_destroy();
                    
                    header("Refresh: 0");
                }
            }

        ?>

    </body>
</html>
 
PHP hulp

PHP hulp

21/11/2024 12:38:25
 
Maikel  B

Maikel B

14/07/2011 10:44:27
Quote Anchor link
heb je ook ergens een voorbeeld online zodat we kunnen testen?

- Gebruik geen tables als opmaak maar gebruik div's en css
Gewijzigd op 14/07/2011 10:47:59 door Maikel B
 
Joris van Rijn

Joris van Rijn

14/07/2011 10:45:39
Quote Anchor link
Dit kan natuurlijk niet:
Eerst output naar de browser, en dan een header().

Lees even tutorials door waarom dat niet kan!
 
Danny Dillema

Danny Dillema

14/07/2011 11:02:26
Quote Anchor link
@Maikel
Nee ik heb geen voorbeeld online. Het is een klein project voor mijzelf waarmee ik mijn (web)programmeer vaardigheden wil verbeteren.

Welke redenen zijn er om div's in de plaats van tables als opmaak te gebruiken?

@Joris
Het werkt wel, dus ik neem aan dat het slechte programmeer stijl is?
Ik zal eens opzoek gaan naar waarom dit niet kan.
 
Bram Boos

Bram Boos

14/07/2011 11:07:42
Quote Anchor link
* Eerst de verwerking, dan pas HTML.
* Gebruik nooit ob_start, stop of flush.
* Waar is je foutafhandeling?

Ik heb een heel stuk van je code verbeterd:
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
122
123
124
125
126
127
128
129
130
<?php
session_start();
//Connect
$db = array (
    'host' => 'localhost',
    'user' => 'root',
    'pass' => '',
    'dbname' => 'gastenboek'
);

if(!mysql_connect($db['host'], $db['user'], $db['pass']))
{

    trigger_error('Fout bij verbinden: '.mysql_error());
}

elseif(!mysql_select_db($db['dbname']))
{

    trigger_error('Fout bij selecteren database: '.mysql_error());
}
                          


//Functies
  
    function convert_time($time) {
        return $time = date("d-m-Y, H:i:s", strtotime($time));
    }
    
    function
select_query($tabel, $field, $limit) {
        if($limit > 0) {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC LIMIT $limit";    
        }

        else {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC";
        }

        return mysql_query($query);
    }



             define("MAX_SIZE_NAAM", 40);
            define("MAX_SIZE_BERICHT", 200);
            $error = array();
            if($_SERVER['request_method'] == 'POST') {    

            if(isset($_SESSION['naam']) || isset($_SESSION['bericht'])) {
                unset($_SESSION['naam']);
                unset($_SESSION['bericht']);
            }

                                        
                $datum = date("c");

                $_SESSION['naam'] = $_POST['naam'];
                $_SESSION['bericht'] = $_POST['bericht'];
                
                if(strlen($_POST['naam']) < 3) {
                    $error[] = "Vul aub uw naam in!";  
                }

                elseif(strlen($_POST['naam']) > MAX_SIZE_NAAM) {
                    $error[] = "Uw naam mag niet langer zijn dan 40 karakters!";
                }

                elseif(empty($_POST['bericht'])) {
                    $error[] = "Typ aub eerst een bericht!";
                }

                elseif(strlen($_POST['bericht']) > MAX_SIZE_BERICHT) {
                    $error[] = "Uw bericht mag niet langer zijn dan 200 karakters!";  
                }

                elseif(preg_match('/[^0-9A-Za-z_\']/', $_POST['naam'])) {
                    $error[] = "U heeft 1 of meer karakters in uw naam die niet zijn toegestaan!<br>";
                    $error[] = "Gebruik alleen letters, cijfers en underscore!";
                }

                else {
                    $naam = mysql_real_escape_string(htmlentities($naam));
                    $bericht = mysql_real_escape_string(htmlentities($bericht));
                    $date = date("Y-m-d, H:i:s");
                    
                    $query = "INSERT INTO items(naam, bericht, datum)VALUES('$naam', '$bericht', '$date')";
                    $result = mysql_query($query);
                    
                    //sessie verwijderen
                    session_destroy();
                    
                }
            }



                $result = select_query("items", "datum", "5");
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <meta name="Gastenboek" content="Gastenboek">
        <link rel="stylesheet" type="text/css" href="style/style.css" />
        <title>Simpel gastenboek</title>
    </head>
    <body>
        
        <h1>Simpel gastenboek</h1>
        
        <table width = "400">
            <tr><td><h3>Berichten</h3></td></tr>
            <tr><td>------------------------------------------------------------------<tr><td>
            <?php

                
                if(mysql_num_rows($result) > 0) {
                    for($i = 0; $i < 20 && $array = mysql_fetch_array($result); $i++) {
                        echo "<tr><td><b>Gepost op ".convert_time($array[3])."";  
                        echo " door ".htmlspecialchars_decode($array[1])."</b></tr>";
                        echo "<tr><td> ".htmlspecialchars_decode($array[2])." </td></tr>";
                        echo "<tr><td>------------------------------------------------------------------<tr><td>";    
                    }
                }

                else {
                    echo "<tr><td>Er zijn nog geen berichten geplaatst!</td></tr>";
                    echo "<tr><td>-----------------------------------------------------------------</td></tr>";
                }

            ?>

        </table>
        <?php foreach($error as $melding) {echo $melding.'<br />'; } ?>
        
        <form method = "post" action ="">
            <table>
                <tr><td><h3>Plaats een nieuw bericht</h3></td></tr>
                <tr><td><b>Naam</b><br><input type = "text" name = "naam" value = "<?php if(isset($_SESSION['naam']))echo $_SESSION['naam']; ?>"></td></tr>
                <tr><td><b>Bericht</b><br><textarea name = "bericht" cols = "40" rows = "6"><?php if(isset($_SESSION['bericht']))echo $_SESSION['bericht']; ?></textarea>
                <br>* maximaal 200 karakters!</td></tr>
                <tr><td><input type = "submit" name = "verzenden" value = "Verzenden"></td></tr>  
            </table>
        </form>
    </body>
</html>


Hopelijk kun je zelf een nette foutafhandeling in de query's inbouwen. Graag verwijs ik je door naar deze tutorial.
 
Wouter J

Wouter J

14/07/2011 11:08:01
Quote Anchor link
- Gebruik niet die viese ob_start(). Programmeer gewoon goed, dat betekend afhandeling boven het doctype en na het doctype alleen wat echo's.
- Lees ook eens deze tutorial.
- Al die headers als je iets fout hebt gedaan moet je weghalen. Dit zorgt ervoor dat alle gegevens gewist worden.
- Regel 60-63 en regel 89,90 zijn onnodig variabelen kopiëren.
- Haal variabelen uit de quotes.
- Kijk of een query is gelukt en of er iets is verandert met mysql_affected_rows
- De uitroeptekens bij foutafhandeling komt heel opdringerig over.
- Gebruik niet elseif maar gewoon if. Het is voor de gebruiker beter om meteen alle fouten te zien.
- Maak je HTML op met divs en css, niet met tables.
- $_SERVER['PHP_SELF'] is XSS gevoelig. Vul bij action gewoon niks in.
- Kijk of een form verzonden is met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

// verzonden
}
?>

- Gebruik geen *, selecteer welke velden je wilt.
- Gebruik goede foutafhandeling en niet or die.
- Gebruik geen fetch_array maar mysql_fetch_assoc
 
Danny Dillema

Danny Dillema

14/07/2011 11:22:24
Quote Anchor link
@Bram en Wouter
Bedankt!
Zodra ik tijd heb zal ik er mee aan de slag gaan.


Toevoeging op 14/07/2011 19:49:51:


Ok, ik heb het één en ander veranderd aan het script.
De tables heb ik nu nog even gelaten voor wat het is.
Ik ben benieuwd naar jullie mening.

debug_mode.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
<?php
    define('DEBUG_MODE', true);
    
    if(DEBUG_MODE)
    {

        error_reporting(E_ALL | E_STRICT);
        ini_set('display_errors', 1);
    }

    elseif(!DEBUG_MODE)
    {

        error_reporting(0);
        ini_set('display_errors', 0);
    }

?>

connect.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
<?php    
    $db
= array (
        'host' => 'localhost',
        'user' => 'root',
        'pass' => '',
        'dbname' => 'gastenboek'
    );
        
    $mysql = mysql_connect($db['host'], $db['user'], $db['pass']);
    
    if(!$mysql){
        $error[] = "Er kan geen verbinding met de server worden gemaakt.";
        
        if(DEBUG_MODE) {
            $error[] = "<br>".mysql_error();
        }
    }

    else {
        $select_db = mysql_select_db($db['dbname']);
        
        if(!$select_db) {
            echo "Er kan geen geen verbinding met de database worden gemaakt.";
        
            if(DEBUG_MODE) {
                $error[] = "<br>".mysql_error();
            }
        }
    }
                          
?>

functies.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
<?php    
    //geeft de tijd terug in nederlandse notatie    
    function convert_time($time) {
        return $time = date("d-m-Y, H:i:s", strtotime($time));
    }
    
    function
select_query($tabel, $field, $limit) {
        if($limit > 0) {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC LIMIT $limit";    
        }

        else {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC";
        }

        return mysql_query($query);
    }

?>

gastenboek.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php
    session_start();

    $error = array();
    
    if(file_exists('include/debug_mode.php')) {        
        include("include/debug_mode.php");
    }

    else {
        $fatal_error = 1;
        $error[] = "Er is een fout opgetreden in het script.<br> Excuses voor het ongemak.";        
    }

    
    if(file_exists('include/connect.php')) {        
        include("include/connect.php");
    }

    else {
        $fatal_error = 1;
        $error[] =  "Er is een fout opgetreden in het script.<br> Excuses voor het ongemak.";
        
        if(DEDUG_MODE) {
            $error[] = "Het bestand \'include/connect.php\' is niet gevonden.";
        }        
    }

    
    if(file_exists('include/functies.php')) {        
        include('include/functies.php');
    }

    else {
        $fatal_error = 1;
        $error[] =  "Er is een fout opgetreden in het script.<br> Excuses voor het ongemak.";
        
        if(DEDUG_MODE) {
            $error[] = "Het bestand \'include/functies.php\' is niet gevonden.";
        }      
    }

    
    if(isset($fatal_error) == 1) {
        foreach($error as $melding) {
            echo $melding."<br>";
        }

        exit();    
    }

      
    define("MAX_SIZE_NAAM", 40);
    define("MAX_SIZE_BERICHT", 200);
    
    if($_SERVER['REQUEST_METHOD'] == 'POST') {                                            
        $_SESSION['naam'] = $_POST['naam'];
        $_SESSION['bericht'] = $_POST['bericht'];
        
        if(empty($_POST['naam'])) {
            $error[] = "Vul aub uw naam in.";
        }

        elseif(strlen($_POST['naam']) > MAX_SIZE_NAAM) {
            $error[] = "Uw naam mag niet langer zijn dan 40 karakters.";  
        }

        elseif(preg_match('/[^0-9A-Za-z_\']/', $_POST['naam'])) {
            $error[] = "U heeft 1 of meer karakters in uw naam die niet zijn toegestaan.<br>
                        Gebruik alleen letters, cijfers,underscore en single quotes."
;
        }

        else {
            $naam_ok = 1;
        }

        
        if(empty($_POST['bericht'])) {
            $error[] = "Typ aub eerst een bericht!";    
        }

        elseif(strlen($_POST['bericht']) > MAX_SIZE_BERICHT) {
            $error[] = "Uw bericht mag niet langer zijn dan 200 karakters.";    
        }

        else {
            $bericht_ok = 1;
        }

        
        if(isset($naam_ok) == 1 && isset($bericht_ok) == 1){
            $naam = mysql_real_escape_string(htmlentities($_POST['naam']));
            $bericht = mysql_real_escape_string(htmlentities($_POST['bericht']));
            $date = date("Y-m-d, H:i:s");
            
            $query = "INSERT INTO items(naam, bericht, datum)VALUES('$naam', '$bericht', '$date')";
            $result = mysql_query($query);
            
            if(mysql_affected_rows() < 1) {
                $error[] = "Er is een fout opgetreden tijdens het verwerken van uw bericht.<br>
                        Probeert u het later nog eens."
;
                
                if(DEBUG_MODE) {
                    $error[] = "<br>".mysql_error();
                }    
            }

            //sessie verwijderen
            session_destroy();
        }
    }

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <meta name="Gastenboek" content="Gastenboek">
        <link rel="stylesheet" type="text/css" href="style/style.css" />
        <title>Simpel gastenboek</title>
    </head>
    <body>
        <h1>Simpel gastenboek</h1>
        
        <table width = "400">
            <tr><td><h3>Berichten</h3></td></tr>
            <tr><td>------------------------------------------------------------------<tr><td>
            <?php
                $result
= select_query("items", "datum", "5");
                
                if(mysql_num_rows($result) > 0) {
                    for($i = 0; $i < 20 && $array = mysql_fetch_assoc($result); $i++) {
                        echo "<tr><td><b>Gepost op ".convert_time($array['datum'])."";  
                        echo " door ".htmlspecialchars_decode($array['naam'])."</b></tr>";
                        echo "<tr><td> ".htmlspecialchars_decode($array['bericht'])." </td></tr>";
                        echo "<tr><td>------------------------------------------------------------------<tr><td>";    
                    }
                }

                else {
                    echo "<tr><td>Er zijn nog geen berichten geplaatst!</td></tr>";
                    echo "<tr><td>-----------------------------------------------------------------</td></tr>";
                    //bij een lege db wordt er geen error weergegeven
                    if(DEBUG_MODE) {
                        $error[] = "<br>".mysql_error();
                    }
                }

            ?>

        </table>
        
        <form method = "post" action = "">
            <table>
                <?php
                    foreach($error as $melding) {
                        echo "<tr><td>".$melding."</td></tr>";
                        }
                  
                ?>

                <tr><td><h3>Plaats een nieuw bericht</h3></td></tr>
                <tr><td><b>Naam</b><br><input type = "text" name = "naam" value = "<?php if(isset($_SESSION['naam']))echo $_SESSION['naam']; ?>"></td></tr>
                <tr><td><b>Bericht</b><br><textarea name = "bericht" cols = "40" rows = "6"><?php if(isset($_SESSION['bericht']))echo $_SESSION['bericht']; ?></textarea>
                <br>* maximaal 200 karakters</td></tr>
                <tr><td><input type = "submit" name = "verzenden" value = "Verzenden"></td></tr>  
            </table>
        </form>
    </body>
</html>
Gewijzigd op 15/07/2011 02:51:38 door Danny Dillema
 
Danny Dillema

Danny Dillema

16/07/2011 08:11:21
Quote Anchor link
bump
 
Jelmer -

Jelmer -

16/07/2011 10:35:06
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
if(file_exists('include/functies.php')) {        
        include('include/functies.php');
    }
    else {
        $fatal_error = 1;
        $error[] =  "Er is een fout opgetreden in het script.<br> Excuses voor het ongemak.";
        
        if(DEDUG_MODE) {
            $error[] = "Het bestand \'include/functies.php\' is niet gevonden.";
        }      
    }

Goeie foutafhandeling is goed, maar dit is wel wat overdreven. Foutafhandeling goed hebben heeft twee doelen: je kan makkelijk zien wat er precies aan de hand is, en de bezoeker/gebruiker kan zien dat het niet zijn schuld is. De kans dat een include statement mislukt is nogal beperkt, en aangezien je die statements een heleboel gaat gebruiken lijkt het mij de moeite niet waard om per statement zo'n hele constructie eromheen te zetten.

Als je script zo afhankelijk is van dat externe bestand, gebruik dan require. Dan stopt PHP er vanzelf mee als het mislukt.
Als je dan ook in die uiterst zeldzame gevallen nog je gebruiker op de hoogte wilt stellen, kijk eens naar set_error_handler.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
isset($naam_ok) == 1

isset geeft al true of false terug, controleren of true true is, wat dan weer true oplevert, heeft geen zin. Gebruik geen isset() om te kijken of iets waar of niet waar is, alleen om te kijken of iets bestaat in een array zoals in $_POST. Sommige servers hebben nog een oude configuratie waarbij $naam_ok==1 ook waar is wanneer je je script aanroept als script.php?naam_ok=1. In jouw script zou je dan alsnog een berichtje kunnen plaatsen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$naam = mysql_real_escape_string(htmlentities($_POST['naam']));
$bericht = mysql_real_escape_string(htmlentities($_POST['bericht']));

htmlentities zou ik pas doen bij het weergeven. Sla je invoer zo rauw mogelijk op, dan kan je je data ook nog voor andere doeleinden gaan gebruiken waar html entities alleen maar in de weg zitten. (Zoals een RSS feed die je maakt met de XML functies. Die zetten zelf al entities om.)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$date = date("Y-m-d, H:i:s");

Kan ook gelijk in je query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO items(naam, bericht, datum)VALUES('$naam', '$bericht', NOW())


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
session_destroy();

Als je nog een ander script had draaien op die website die ook sessies gebruikte, zijn die ook weg. Gewoon unset($_SESSION['naam'], $_SESSION['bericht']) is beter in dit geval.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
for($i = 0; $i < 20 && $array = mysql_fetch_assoc($result); $i++)

Waarom een for-lus wanneer je maar 5 resultaten ophaalt doordat je al een LIMIT in je query specificeert? Gewoon simpel while($array = mysql_fetch_assoc($result)) is de normale manier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo " door ".htmlspecialchars_decode($array['naam'])."</b></tr>";

Wat? htmlspecialchars_decode?! Waarom! Juist liever de andere kant op: rauw uit de database halen (en dus rauw erin stoppen) en dan hier htmlspecialchars gebruiken om ervoor te zorgen dat mensen geen html in hun naam gaan gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(isset($_SESSION['naam']))echo $_SESSION['naam'];

Als ik een "quote" in m'n naam heb zitten gaat het hier mis omdat ik het value-attribuut afsluit.

Klein detail waar je vast niet tegenaan gaat lopen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if(file_exists('include/debug_mode.php')) {        
        include("include/debug_mode.php");

file_exists en include zoeken niet op dezelfde plek naar het bestand. file_exists kijkt alleen vanaf het pad waar je script draait (getcwd) terwijl include ook naar je include_path kijkt.
Gewijzigd op 16/07/2011 10:35:48 door Jelmer -
 
Danny Dillema

Danny Dillema

18/07/2011 12:41:38
Quote Anchor link
@Jelmer rrrr

Bedankt voor je input.

Toevoeging op 18/07/2011 18:01:08:

Zie hier het eindresultaat.
http://dannydillema.woelmuis.nl/index.php
En de nieuwe code:
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
<?php
    session_start();

    $error = array();
          
    include("include/debug_mode.php");        
    include("include/connect.php");
    include('include/functies.php');
      
    define("MAX_SIZE_NAAM", 40);
    define("MAX_SIZE_BERICHT", 200);
    
    if($_SERVER['REQUEST_METHOD'] == 'POST') {                                            
        $_SESSION['naam'] = $_POST['naam'];
        $_SESSION['bericht'] = $_POST['bericht'];
        
        if(empty($_POST['naam'])) {
            $error[] = "Vul aub uw naam in.";
        }

        elseif(strlen($_POST['naam']) > MAX_SIZE_NAAM) {
            $error[] = "Uw naam mag niet langer zijn dan 40 karakters.";  
        }

        elseif(preg_match('/[^0-9A-Za-z_\']/', $_POST['naam'])) {
            $error[] = "U heeft 1 of meer karakters in uw naam die niet zijn toegestaan.<br>
                        Gebruik alleen letters, cijfers,underscore en single quotes."
;
        }

        else {
            $naam_ok = 1;
        }

        
        if(empty($_POST['bericht'])) {
            $error[] = "Typ aub eerst een bericht!";    
        }

        elseif(strlen($_POST['bericht']) > MAX_SIZE_BERICHT) {
            $error[] = "Uw bericht mag niet langer zijn dan 200 karakters.";    
        }

        else {
            $bericht_ok = 1;
        }

        
        if($naam_ok == 1 && $bericht_ok == 1){
            $naam = mysql_real_escape_string($_POST['naam']);
            $bericht = mysql_real_escape_string($_POST['bericht']);
            
            $query = "INSERT INTO items(naam, bericht, datum)VALUES('$naam', '$bericht', NOW())";
            $result = mysql_query($query);
            
            if(mysql_affected_rows() < 1) {
                $error[] = "Er is een fout opgetreden tijdens het verwerken van uw bericht.<br>
                        Probeert u het later nog eens."
;
                
                if(DEBUG_MODE) {
                    $error[] = "<br>".mysql_error();
                }    
            }

            //sessie verwijderen
            unset($_SESSION['naam'], $_SESSION['bericht']);
        }
    }

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <meta name="Gastenboek" content="Gastenboek">
        <link rel="stylesheet" type="text/css" href="style/style.css">
        <title>Simpel gastenboek</title>
    </head>
    <body>
        <div id = "gastenboek_wrapper">
            <h1>Laat een berichtje achter</h1>
                <?php
                    $result
= select_query("items", "datum", "5");
                    
                    if(mysql_num_rows($result) > 0) {
                        while($array = mysql_fetch_assoc($result)) {
                            echo "
                                <div id = 'post'>
                                    <div id = 'post_info'>
                                        Gepost op "
.convert_time($array['datum'])."
                                        <br>door "
.htmlentities($array['naam'])."<br>
                                    </div>
                                    <div id = 'bericht'>"

                                        .htmlentities($array['bericht'])."<br><br>
                                    </div>
                                </div>
                            "
;        
                        }

                        echo "<div id = 'bericht_lijn_onder'></div>";
                    }
                
                    else {
                        echo "<br>Er zijn nog geen berichten geplaatst.";
                        //bij een lege db wordt er geen error weergegeven
                        if(DEBUG_MODE) {
                            $error[] = "<br>".mysql_error();
                        }
                    }

    
                    foreach($error as $melding) {
                        echo "<div id = 'error'><br>".$melding."</div>";
                    }
                  
                ?>

            <form method = "post" action = "">
                <h2>Plaats een nieuw bericht</h2>
                <b>Naam</b><br><input type = "text" name = "naam" value = "<?php if(isset($_SESSION['naam']))echo $_SESSION['naam']; ?>"><br>
                <b>Bericht</b><br><textarea name = "bericht" cols = "40" rows = "4"><?php if(isset($_SESSION['bericht']))echo $_SESSION['bericht']; ?></textarea><br>
                * maximaal 200 karakters<br>
                <input type = "submit" name = "verzenden" value = "Verzenden" class = "button">  
            </form>
        </div>
    </body>
</html>
Gewijzigd op 18/07/2011 18:14:02 door Danny Dillema
 



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.