Advies gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Developer (Junior functie)

Functieomschrijving Wij zijn op zoek naar een Software Developer! Sta jij in de startblokken om je carrière te beginnen en kan je niet wachten om toffe software te gaan ontwikkelen? Kortom, ben je onlangs afgestudeerd of sta je op het punt om je papiertje te behalen? Voor een IT dienstverlener dat gespecialiseerd is in Microsoft technologie zijn wij op zoek naar C#.NET Developers. Het bedrijf heeft meerdere klanten in regio Utrecht waar je permanent kan komen te werken. Kom je liever te werken bij een klein softwarebedrijf of bij een groot consultancy bureau? Dat is helemaal aan jou de keuze!

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

Senior Software Developer C++

Vacature details Vakgebied: Software/IT Opleiding: Senior Vacature ID: 13342 Introductie Do you want to work for one of the most innovative companies located in the region of Eindhoven. Currently Due to growth we are looking for a Senior Software Developer. Our client is a high-tech company with international roots and can provide you with a challenging opportunity. Functieomschrijving Responsibilities: Design, develop, and maintain high-quality software applications in C++ Collaborate with other engineers, product managers, and stakeholders to understand requirements and develop solutions Write clean, maintainable, and efficient code Conduct thorough testing and debugging to ensure high-quality software Optimize applications for

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

.NET Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

.NET Developer Senior

Dit ga je doen Het ontwikkelen van backend applicaties in C#; Het maken van vele koppelingen met andere ERP-applicaties zoals JD Edwards en SAP; Je bent (mede) verantwoordelijk voor het opstellen van technisch ontwerpen voor de te ontwikkelen software oplossingen; Je bent gemiddeld 90% van je tijd inhouse oplossingen aan het ontwikkelen en testen. De overige 10% van je tijd ben je bij klanten op locatie om oplossingen te implementeren, klanten te begeleiden en de software verder te innoveren; Naast het zelfstandig ontwikkelen van software oplossingen ben je ook bezig met het waarborgen van je contacten bij de klant, het

Bekijk vacature »

Software Developer Java

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

C# .NET Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf. Lees dan snel verder! Voor deze functie zoeken wij een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Daarnaast begeleid je complexe projecten, wij zoeken iemand die altijd kansen ziet en waarbij het glas altijd half vol is. Voor deze functie zoeken wij een Developer met ervaring op het gebied van .NET die deze organisatie gaat versterken. Binnen de organisatie ga jij je vooral bezighouden met het verbeteren van

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Front-end Developer vue.js node.js SaaS

Dit ga je doen Het ontwikkelen van nieuwe features die bijdragen aan de groei van de klanten van de organisatie; Je denkt mee over nieuwe innovaties, features en verbeteringen in de applicatiearchitectuur; Je draagt bij aan de continue ontwikkeling van jouw team doordat je elke dag streeft naar het verbeteren van jouw eigen prestaties; Je neemt actief deel aan Scrum meetings en de Frontend Guild. Hier ga je werken Voor een snel groeiend bedrijf de regio Nieuw Vennep zijn wij opzoek naar een ervaren Front-end Developer. De organisatie is actief in de e-commercebranche en ontzorgt haar klanten middels een SaaS-platform.

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Developer Angular & Kotlin

Dit ga je doen Het (door)ontwikkelen van mobiele apps en webapplicaties; Het opstellen van technisch ontwerp en het bespreken van ontwerpen met de software architect; Het uitvoeren van werkzaamheden op het gebied van technisch testen; Het in de gaten houden van nieuwe ontwikkelingen op jouw vakgebied en het adviseren van de organisatie hierover. Hier ga je werken Het gaat om een bekend internationaal handelsbedrijf met ruim 800 medewerkers, verdeeld over verschillende deelbedrijven. Deze organisatie is van oorsprong een familiebedrijf, er wordt hard gewerkt, er heerst een no nonsense en doeners mentaliteit, een informele sfeer en er is een mix van

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun

Bekijk vacature »

Ontwikkelaar MS Dynamics 365 Projecten

Samengevat: Deze werkgever is de kwaliteitsdienst in de tuinbouwsector. Ben jij een ervaren ontwikkelaar? Heb jij ervaring met Ms Dynamics 365 BC? Vaste baan: Ontwikkelaar Ms Dynamics 365 BC ICT MBO 3.500 - 5.000 Ontwikkelaar Ms Dynamics 365 BC Ons bedrijf bewaakt en bevordert de kwaliteit van producten, processen en ketens in de tuinbouw. Wij kenmerken zich door openheid, ruimte voor initiatief, collegialiteit en zelfontplooiing. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Functie: Voor de vacature als Ontwikkelaar Ms Dynamics 365 BC Roelofarendsveen MBO

Bekijk vacature »
Danny Dillema

Danny Dillema

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

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

connect.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    $host
= "localhost";
    $user = "root";
    $pass = "";
    $db = "gastenboek";
    
    $connError = "Er kan op dit moment geen verbinding met de database worden gemaakt!<br />
                Probeert u het later nog eens.<br />"
;
    $dbError = "De database is op dit moment niet beschikbaar!<br />
                Probeert u het later nog eens."
;
                            
    mysql_connect($host, $user, $pass) or die($connError);
    
    if(!mysql_select_db($db)) {
        echo $dbError;
    }

?>


functies.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php    
    //geeft de tijd terug in nederlandse notatie    
    function convert_time($time) {
        return $time = date("d-m-Y, H:i:s", strtotime($time));
    }
    
    function
select_query($tabel, $field, $limit) {
        if($limit > 0) {
            $query = "SELECT * FROM $tabel ORDER BY $field DESC LIMIT $limit";    
        }

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

        return mysql_query($query);
    }

?>


gastenboek.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php ob_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <meta name="Gastenboek" content="Gastenboek">
        <link rel="stylesheet" type="text/css" href="style/style.css" />
        <title>Simpel gastenboek</title>
    </head>
    <body>
        <?php
            session_start();
            
            include("include/connect.php");
            include("include/functies.php");
        ?>

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

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

            ?>

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

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

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

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

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

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

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

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

        ?>

    </body>
</html>
 
PHP hulp

PHP hulp

21/12/2024 19:12:29
 
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.