Advies gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

IT Business Analist R&D

Dümmen Orange is ’s werelds grootste veredelaar en kweker van snijbloemen, bollen, tropische planten, potplanten, perkplanten en vaste planten. Voor onze locatie in De Lier zoeken wij een IT Business Analist R&D. Functie inhoud Ben jij de entrepreneur die dusdanig sterke IT-applicaties levert waardoor de R&D-divisie een maximaal rendement uit hún business kan halen? Jij bent hét aanspreekpunt voor onze R&D-activiteiten. R&D-ontwikkeling op productkenmerken, stock mother plant management, flower trials, cross predictions zijn essentieel voor het succes van ons bedrijf. IT ondersteunt R&D hierbij gebruikmakend van de meest moderne technieken zoals Big data BI databases, cloud computing. Als Business Analist

Bekijk vacature »

Application engineer

Do you have at least 3 years of experience in engineering or computer science? Then you may be interested in the position of: Application engineer located in our EMEA headquarters in ‘s-Hertogenbosch About the position: Includes the following essential duties and responsibilities (other duties may also be assigned): Responsible for technical services and work directly with customers resolving technical issues including server systems, PC systems and computer peripherals. Identifying technical issues and resolve computer hardware & software problems. Establish and maintain lines of communication with sales team to discuss services and technical issues. Travel with sales to customer sites to

Bekijk vacature »

Mobile App Developer

Ons Mobile ontwikkelteam zoekt een fanatieke Mobile App Developer. Ben jij creatief en heb je passie voor het ontwikkelen van apps? Dan zijn wij op zoek naar jou! Jouw baan ChipSoft heeft al diverse apps uitgebracht en het aantal gebruikers hiervan neemt snel toe. De apps doen het erg goed bij de zorginstellingen. Je kunt hierbij denken aan apps verpleegkundigen, thuiszorgmedewerkers, de logistieke dienst en - natuurlijk - de artsen zelf. Door jouw hands-on mentaliteit, eigenwijsheid en technisch inzicht kun je nauwkeurig herbruikbare software schrijven. Die software sluit naadloos aan op onze ‘back end’ (HiX, onze ICT-totaaloplossing voor de zorg).

Bekijk vacature »

Java Developer Nieuwbouw Internationaal

Functieomschrijving Ben jij een ervaren Java Developer, of ben jij sinds kortgeleden in de wereld van Java gestapt, en wil jij met jouw kennis van Java een bijdrage leveren aan de core systemen van deze internationale organisatie? Lees dan snel verder! Ontwikkelen van applicaties en nieuwe functionaliteiten in Java; Aanpassingen maken in bestaande code; Overleggen en samenwerken met architecten en Product Owners; Werken binnen een multidisciplinair Scrumteam met betrekking tot analyse, design en ontwikkeling; Samenwerken en ondersteunen van testers in het proces van automatische regressietesten. Functie-eisen Je bent in het bezit van een hbo-diploma; Minimaal twee jaar relevante werkervaring; Je

Bekijk vacature »

Senior fullstack C# ontwikkelaar gezocht, academis

Ben je als .NET ontwikkelaar op zoek naar een (nieuwe) analytische uitdagende baan? Een baan waar je te maken krijgt geavanceerde wiskundige modellen? Dan zou deze organisatie je dit kunnen bieden. Voor een organisatie in Delft zijn we momenteel op zoek naar .NET ontwikkelaar met een academisch niveau en kennis of affiniteit met het bouwen van modellen, dataprocessen en applicaties in .NET C#. De organisatie houdt zich bezig met het leveren van zeer specifieke diensten voor de financiële sector en doet veel zaken met grote financiële instellingen. Het gaat hier om een kleinere organisatie van circa 15 mensen waarvan 5

Bekijk vacature »

Senior Java Developer vacature

Jij volgt ontwikkelingen op de voet. Sterker nog: jij bent er onderdeel van. Jij loopt voorop. Jij denkt met klanten mee en helpt hen innoveren. Zo kun jij een bijdrage leveren aan de Rabobank-app, de beveiliging van treinen voor Pro-rail verbeteren of de website van ING een boost geven. Vergaderen? Liever gewoon zorgen dat het werkt! Hoe omschrijft men een Sogetist? Gedreven, resultaatgericht en niet snel tevreden. Wat niet wil zeggen dat je nooit met hem of haar kunt lachen. Integendeel. Plezier hoort wat ons betreft net zo goed bij werken. Maar we gaan op de eerste plaats voor de

Bekijk vacature »

Business Intelligence Developer vacature

Jij ben niet bang om hard te werken. Uitdagingen zijn welkom. En problemen? Die zijn er om opgelost te worden of, nog beter, om voorkomen te worden! Voor jij aan de slag gaat met het ontwerpen van BI- en DWH-oplossingen, leg je eerst je oor te luister bij de klant. Zo weet jij wat de klant wil, en hoe jouw ontwerp eruit moet komen te zien. Simpel! Althans… met jouw Developer-kwaliteiten wel! Over deze BI vacature Als Business Intelligence Developer ga je zowel op locatie bij de klant aan de slag, als op een van de Sogeti-locaties. Je analyseert de

Bekijk vacature »

Web Developer

Help jij graag mee met het optimaliseren van ons platform? Solliciteer dan naar de functie Web Developer. Op ons hoofdkantoor in Amsterdam krijg je alle ruimte om je kwaliteiten te tonen. Jouw baan ChipSoft maakt breed gebruik van webtechnologie voor de ondersteuning van administratieve processen. Als ontwikkelaar ben je verantwoordelijk voor het onderhouden en verbeteren van de applicaties op ons platform. Jij richt je met name op het ontwikkelen van nieuwe applicaties en het onderhouden van de gebruikte programmatuur op ons platform. Denk hierbij aan e-learning en projectplanning. Jouw team Je komt op de 25ste verdieping van ons hoofdkantoor in

Bekijk vacature »

Java Developer / Webservices / Overheid

Functieomschrijving Ben jij als Java Ontwikkelaar toe aan een stabiele organisatie zonder commercieel doeleinde? Ga jij voor kwaliteit, collegialiteit en stabiliteit? Dan is dit jouw baan! Ontwikkelen van nieuwe en bestaande webservices; Uitbreiden van functionaliteiten binnen de producten- en dienstenportefeuille; Als het in jouw interessegebied ligt kan je betrokken worden bij het vormgeven van verantwoordingsrapportages; Werken aan gegevensuitwisseling met SOAP, ervaring hierin met Apache Synapse/Axis2 is een pre; Werken aan Java web GUI ontwikkeling, ervaring hierin met GWT, Bootstrap, Javascript, HTML en CSS is een pre; Werken met testframeworks, ervaring hierin met JUnit en Selenium is een pre; Ervaring met

Bekijk vacature »

C# backend developer, Rotterdam

Voor een grote organisatie in Rotterdam zijn we op zoek naar iemand met ruime ervaring in het ontwikkelen van applicaties in .NET C#. Het gaat hier om een organisatie met een maatschappelijke impact. Hun systemen zijn gericht op een groot aantal klanten waarbij het belangrijk is dat de applicaties helder, toegankelijk en up-to-date zijn. Als .NET C# developer werk je aan uiteenlopende applicaties, APIs en het interne framework. Dit doe je binnen een SCRUM team en meedenkt binnen het hele proces. Het team bestaat uit meerdere C# developers variërend van medior tot senior. Er is dus veel kennis en ervaring

Bekijk vacature »

Apex Developer/Ontwikkelaar in Zuid-Holland

Functieomschrijving Als Apex enthousiast ben jij een welkome versterking voor dit team dat momenteel 4FTE groot is op de IT-afdeling. Je komt zodoende terecht in een hecht team ben met mensen die graag met Apex en ook met Oracle werken. Binnen deze functie ben je verantwoordelijk voor het achterhalen van de juiste behoeften bij de interne klanten. Daarnaast werk je aan het onderhouden, door ontwikkelen en nieuwbouw van maatwerk applicaties. Voor 80% bestaat het werk uit APEX en voor 20% uit PL/SQL. Daarbij kom je te werken binnen een gedreven team waarbij de communicatielijnen kort zijn en er zeker ook

Bekijk vacature »

Alfresco Developer

Hopelijk gaat alles goed? Ik ben op zoek naar een interim/freelance Developer die ervaring/exposure heeft gehad met het CMS Alfresco! Het is voor een zeer interessante klant in Rotterdam. Verder is kennis van Java en Angular gewenst. Ben je zelf geïnteresseerd en kom je begin januari beschikbaar of ken je wellicht iemand die dat zou kunnen zijn? Dan kom ik uiteraard graag in contact! Alvast bedankt voor je tijd en moeite!

Bekijk vacature »

Senior Front-end Developer

Senior Front-end Developer bij Capgemini Bij Capgemini bouwen we niet zomaar webapplicaties en mobiele apps waar onze opdrachtgevers en hun klanten mee overweg kunnen. Nee, we ontwikkelen applicaties voor miljoenen gebruikers en dan ook nog apps waar men écht gelukkig van wordt. Van de medewerkers in de organisatie zelf tot aan de eindgebruikers. En als Senior Front-end Developer ben jij hierbij onmisbaar! De rol Van het bouwen van nieuwe functionaliteiten, het behouden, bewaken en verbeteren van de huidige infrastructuur en applicaties tot aan het ontwikkelen van nieuwe innovaties. Als Front-end Developer ben je de lead developer binnen jouw scrumteam en

Bekijk vacature »

C# developer gezocht, hardware component, inhouse,

Ben je een C# developer en zoek je een baan in Rotterdam waar je systemen ontwikkeld die communiceren met hardware? Bij een klein bedrijf met korte lijnen, een open cultuur en veel vrijheid? Wellicht dat dit dan iets voor je is. Voor een klant in Rotterdam zijn we op zoek naar een ervaren C# developer. Het gaat hier om een bedrijf dat gericht is om voor overheden en ondernemingen informatie vanuit bepaalde meetsystemen te verwerken en te presenteren. Zo is bijvoorbeeld een van de projecten waar je als ontwikkelaar aan gaat werken; het bouwen van een website waar gebruikers informatie

Bekijk vacature »

Front-end Developer / Angular 5 / Azure

Functieomschrijving Wil jij graag als Front-end Developer werken in een ambitieus bedrijf dat moderne software ontwikkelt voor grote klanten? Ben jij goed thuis in Angular en het Azure platform en maak jij de mooiste programma's voor gebruikers? Lees dan snel verder! Ontwikkelen en testen van de software en het framework via Scrum principes; Het verzorgen van de front-end van de applicaties van het bedrijf; Werken met technieken als Angular 5, HTML5, Web API 2 en SOAP op een Azure platform; Helpen van collega's met jouw expertise; Meedraaien in projecten; Sparren met collega's over het functioneel / technisch ontwerp. Functie-eisen Enkele

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

29/01/2020 14:41:53
 
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.