Advies gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Low Code Developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Voor een leuke opdrachtgever in omgeving Rotterdam zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten in heel het land! Wat ga je hier zoal doen? Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan

Bekijk vacature »

Software Programmeur PHP

Functie Ben jij op zoek naar een nieuwe uitdaging als PHP developer en zoek je een leuke platte organisatie? Lees dan snel verder! Voor een opdrachtgever in omgeving Capelle aan den IJssel dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

Medior/senior front end developer React Sportsoftw

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van onze stack; Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor

Bekijk vacature »

Senior developer (PHP en VB.NET)

Functie De development afdeling bestaat uit 2 teams. Het productteam (10 developers) is verantwoordelijk voor verschillende applicaties met als doel om zoveel mogelijk te automatiseren en uit te werken tot standaard software. Met diverse Solutions Architecten en ervaren developers denken ze voortdurend mee met hun klanten en bouwen ze de basis van het uiteindelijke maatwerk dat wordt geleverd. Hiernaast hebben ze een maatwerk/projectteam. Dit team bestaat momenteel uit 8 developers (junior tot senior) en is verantwoordelijk voor het maatwerk in hun klantprojecten. Momenteel zijn ze op zoek naar een senior developer die aan de slag gaat in het productteam. Hierin

Bekijk vacature »

Outsystems Developer Medior

Dit ga je doen Bouwen aan nieuwe en innovatieve applicaties; Maken van koppelingen tussen Outsystems en het bestaande applicatielandschap; Troubleshooting op bestaande software. Hier ga je werken De organisatie is internationale speler binnen de bouwbranche en richt zich op de infrastructuur, zowel boven als onder de grond. Ze zijn ruim 1100 man groot en maken op IT vlak een mooie groei door. Als ervaren Developer kom je te werken op een IT-afdeling van zo'n 25 man groot. Een aantal jaar geleden hebben ze de keuze gemaakt om zich meer te gaan richten op ontwikkeling en door de groei van de

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Ervaren PHP Software Developer

Functieomschrijving Voor een toffe opdrachtgever in regio Breda zijn wij op zoek naar een medior PHP Developer met affiniteit met Laravel. Je komt te werken bij een uitdagende opdrachtgever met supergave klanten in een specifieke branche. Als PHP ontwikkelaar ben je samen met een vooruitstrevende team van 6 collega’s verantwoordelijk voor de ontwikkeling, beheer en het vernieuwen van informatiesystemen voor een specifieke branche. Je ondersteunt complexe uitdagingen van klanten. Vervolgens breng je hun wensen in kaart en vertaalt deze door naar maatwerk software. Affiniteit met Laravel is een pré. Om de klanten zo goed mogelijk te ondersteunen en snel in

Bekijk vacature »

.NET developer

Functie Heb jij veel kennis van ASP.NET Webforms en wil jij juist de overstap maken naar ASP.NET Core? Wij zijn per direct op zoek naar een ervaren .NET Webdeveloper die met ons samen ons platform wilt herschrijven van ASP.NET Webforms naar ASP.NET Core. Voor jou de unieke kans om met ons samen te innoveren en kennis op te doen van de nieuwste technieken binnen de Microsoft Stack. Wij hebben een development team met 10 IT specialisten bestaande uit onder andere 4 backend .NET developers en twee front-end developers. Wij zijn continu bezig om ons als team en bedrijf te blijven

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Oracle Apex developer

Bedrijfsomschrijving My client is a technology company based in Den Bosch, the Netherlands. They specialize in providing innovative software solutions to clients, and they are currently looking for an experienced Oracle Apex developer to join the IT team. Functieomschrijving As an Oracle Apex developer, you will be responsible for designing, developing, and maintaining web-based applications using Oracle Apex. You will work closely with project managers, business analysts, and other developers to ensure that clients' needs are met and that the software solutions are of the highest quality. Responsibilities: Design, develop, and maintain Oracle Apex applications. Work with project managers and

Bekijk vacature »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

Embedded Developer C++

Functie omschrijving Ben jij op zoek naar een leuke uitdaging als Embedded Developer, zoek dan niet verder! Voor een leuke opdrachtgever in omgeving Rotterdam zijn wij op zoek naar een Embedded Developer die graag met Embedded Devices werkt. Je zult verantwoordelijk worden voor het ontwikkelen en onderhouden van diverse producten. Jouw specialisatie ligt op het vlak van software, hardware en back-end. Dit bedrijf is gespecialiseerd in het ontwerpen van software voor een unieke industrie. Wil jij betrokken worden bij een proces dat loopt van ontwikkeling tot installatie? Waarbij je bezig zult zijn met perfecte systemen die geleverd worden aan binnen

Bekijk vacature »

Applicatie Ontwikkelaar

Bedrijfsomschrijving DUO verzorgt als uitvoeringsorganisatie, zijnde onderdeel van het Ministerie van Onderwijs, Cultuur en Wetenschap de uitvoering van complexe wet- en regelgeving en heeft een uitgebreid dienstenpakket. DUO financiert en informeert onderwijsdeelnemers en onderwijsinstellingen. Voor verdere informatie zie www.duo.nl Functieomschrijving Wie zoeken we? Jij bent een enthousiaste, flexibele OPS’er die het leuk vindt om het bestaande examenlandschap te vernieuwen. Je bent leergierig en hebt interesse in cloud- en containertechnieken zoals OpenShift, Docker en Helm. Je gaat een uitdaging niet uit de weg en wil je nieuw opgedane kennis graag delen met de collega’s binnen en buiten het team. Doordat de

Bekijk vacature »

Medior PHP Developer

Functie omschrijving We are looking for a dutch native speaker Wil jij als developer werken bij een interne organisatie en de eigen software verder helpen ontwikkelen? Lees dan snel verder! In deze functie ga je werken als PHP Developer en de interne software en applicaties verder ontwikkelen. In het kort houdt dit in: Je gaat de interne applicaties en software verder optimaliseren. Verder bouw je verschillende API's en koppelingen tussen systemen. Je gaat het CRM-systeem door middel van PHP verder ontwikkelen. Ook ga je collega's ondersteunen bij vragen over de software en applicaties. Bedrijfsprofiel Dit bedrijf is actief in het

Bekijk vacature »

Cloud Engineer

Ben jij een ervaren Cloud Engineer die complexe omgevingen kan overzien en wil je graag in vaste dienst werken bij een professioneel en kleinschalig bedrijf waar je een belangrijke rol kan spelen? Wij, IntelliMagic in Leiden, ontwikkelen specialistische IT monitoring software die we als SaaS oplossing verkopen aan grote bedrijven in Europa en de VS. We zijn een Nederlands bedrijf met een goede sfeer en met grote waardering voor de persoonlijke inbreng en kwaliteiten van onze medewerkers. Wij zoeken een ervaren Cloud Engineer met academisch denkniveau die verantwoordelijk wordt voor het beheer van de cloud infrastructuur voor onze Europese klanten.

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

18/05/2024 17:47:07
 
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.