Advies gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

React developer Inhouse cloudplatform

Functie De functie: Als front-end developer kom je te werken naast 2 andere front-end/React developers, waaronder één senior. Een hele mooie kans dus om in korte tijd veel nieuwe kennis en ervaring op te doen. Ze hebben momenteel veel werk hierin en daarom willen ze het team graag uitbreiden. Het is van belang dat je, zeker gezien het vele thuiswerken, in ieder geval al een aantal projecten hebt gedaan in React. Taken waar je aan kunt denken zijn het ontwikkelen van client-applicaties o.b.v. HTML5, React en andere open standaarden. Ook ben je nauw betrokken bij het implementeren van designs o.b.v.

Bekijk vacature »

Fullstack Developer

Functieomschrijving Voor een erkende werkgever in regio Etten-Leur zijn wij op zoek naar een Fullstack Developer met PHP/Laravel ervaring. Je gaat aan de slag met het bouwen van maatwerk software voor klanten die actief zijn in een specifieke markt. Als fullstack developer ben je samen met een enthousiast team van 7 collega’s verantwoordelijk voor de ontwikkeling, beheer en innovatie van informatiesystemen voor klanten in een specifieke branche. Verder ondersteun je complexe uitdagingen van klanten. Je brengt hun wensen in kaart en vertaalt deze door naar maatwerk software. Ervaring met Laravel is een must. Om de klant zo goed mogelijk te

Bekijk vacature »

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Junior PHP (Laravel) Developer

Functie omschrijving Wij zijn op zoek naar een PHP Laravel Developer! Sta je aan het begin van je carrière en ben je op zoek naar een leuke baan? Lees dan verder! Voor een softwarebedrijf in omgeving van Schiphol zijn wij op zoek naar een ervaren PHP (Laravel) Developer. Je gaat je bezighouden met het ontwikkelen van innovatieve bedrijfsapplicaties. Samen met het team, bestaande uit designers en developers, maak je mooie oplossingen voor bedrijven in diverse branches. Je zorgt dat de opgeleverde websites perfect werken en de klant meer dan tevreden is. Je kunt rekenen op een afwisselende baan met leuke

Bekijk vacature »

SQL beheerder / ontwikkelaar

Functie omschrijving Voor een klant in omgeving Tiel zijn wij op zoek naar een SQL beheerder met affiniteit met technisch applicatiebeheer. Je krijgt een fijne in-house werkplek waar je gaat werken aan diverse projecten. Dit bedrijf doet het beheer van databases voor een aantal bancaire klanten. Op dit momenten hebben zij ruim 1500 databases in beheer. Jouw werkzaamheden gaan er als volgt uit zien: Je gaat de development afdeling ondersteunen bij het ontwikkelen van MS SQL Scripts. Je zal zowel zelfstandig als in teamverband MS SQL databases installeren & beheren. Je monitort en onderzoekt incidenten en de achterliggende oorzaken. Je

Bekijk vacature »

Full stack 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 »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

Freelance JAVA / C# Developer

Functieomschrijving Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Voor een opdrachtgever in omgeving Delft zijn wij op zoek naar ervaren JAVA of C# Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid

Bekijk vacature »

Full Stack .NET Developer C# ASP.NET

Samengevat: Deze werkgever is gespecialiseerd in het op afstand bewaken en besturen van machines en processen. Ben jij een ervaren Full Stack .NET Developer? Heb je ervaring met C# en ASP.NET? Vaste baan: .Net Developer C# ASP.NET HBO €3.300 - €4.500 Deze werkgever is een snel groeiende onderneming gespecialiseerd in het op afstand bewaken en besturen van machines en processen, IoT (Internet of Things). Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Wil jij bij de top specialisten horen? Ben jij op zoek naar een

Bekijk vacature »

Software Ontwikkelaar C# .NET

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Amersfoort gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Front end developer

Functie Qua type opdrachten is er echt een verscheidenheid aan afnemers, zo werken ze met grote multinationals, maar ook met startups. Zo kom je te werken in een gevarieerde omgeving en kan je ook schakelen tussen verschillende culturen. De projecten variëren van greenfield projecten tot langdurige ontwikkeltrajecten. Hier wordt alleen maar gewerkt met aan front end projecten. Daarom maakt het onze partner niet uit waar jij kennis van hebt, als je maar gedegen kennis hebt van Javascript frameworks, Unit testing en ook bekend bent met de scrum methodiek. Eisen Minimaal 4 jaar relevante werkervaring Kennen en ervaring van Javascript frameworks

Bekijk vacature »

.NET Developer C# VB

Samengevat: Deze werkgever is actief in software voor het matchen van vraag en aanbod van gebruikte auto-onderdelen. Ben jij een .NET Developer? Heb je ervaring met het ontwikkelen (REST) en integreren van webservices? Vaste baan: C# .NET Developer C# VB HBO €2.600 - €6.200 Wij ontwikkelen software om vraag en aanbod van onderdelen van personenauto's bij elkaar te brengen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. De branche van dit bedrijf is Automotive. Functie: Voor de vacature als .NET Developer Dordrecht HBO ga je

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

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