Hoe zet ik hier een goede foutafhandeling onder?

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 »

Koen Hollander

Koen Hollander

02/11/2012 19:47:02
Quote Anchor link
Hallo,

Ik heb dit scriptje getypt wat natuurlijk nog niet werkt. Het is een script die nieuws naar de database stuurt. Ik wil graag weten hoe ik hier een goede foutafhandeling aan moet toevoegen.

Script:
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
<?php
error_reporting(0);
session_start();
include 'config.php';
$adminchecksql         =     mysql_query('SELECT admin FROM users');
$admincheckfetch     =     mysql_fetch_assoc($adminchecksql);
$admin                =    $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}

?>

<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
$name
    =    mysql_real_escape_string($_POST['naam']);
$short    =    mysql_real_escape_string($_POST['kort']);
$long    =    mysql_real_escape_string($_POST['lang']);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1') or die('ERROR!');
echo $submit_sql;

}


?>


Koen Hollander
 
PHP hulp

PHP hulp

25/04/2024 18:16:20
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/11/2012 20:00:03
Quote Anchor link
Koen, mysql_query geeft bij een INSERT, UPDATE, DELETE en DROP altijd een true terug als de query geslaagd is of false terug als de query niet geslaagd is.

dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$submitsql
= mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if(!$submit_sql)
// handel de fout af
?>
 
Koen Hollander

Koen Hollander

02/11/2012 20:05:05
Quote Anchor link
Dit deel van de code controleert toch of de request method post is EN hij controleert of de query fout is uitgevoerd?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND !$submit_sql) {
echo 'Er is een fout opgetreden! Probeer het later nog eens!';
}

?>

Of heb ik het nu mis? Want ik zie dit: Er is een fout opgetreden! Probeer het later nog eens!
terwijl er niks is verzonden.
 
Eddy E

Eddy E

02/11/2012 20:13:24
Quote Anchor link
Heb je al wel de $submit_sql gevuld met een false of true? Is hij überhaupt geset?
't Lijkt mij dat je EERST je input wilt controleren voordat je wat submit/insert?
 
Koen Hollander

Koen Hollander

02/11/2012 20:19:35
Quote Anchor link
Dat weet ik. Ik wil eerst weten of dit werkt en dan doe ik dat pas.
 
Bo Ter Ham

Bo Ter Ham

02/11/2012 20:21:02
Quote Anchor link
vervang error_reporting(0); is door:
ini_set('display_errors', 1);
error_reporting(E_ALL);

dan zie je al dat je iets fout doet namelijk POST waarden in variablen zetten die nog niet verstuurd zijn.
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
<?php
ini_set('display_errors', 1); //het script is nog niet af, we willen weten of er fouten zijn.
error_reporting(E_ALL);
session_start();
include 'config.php';
$adminchecksql         =     mysql_query('SELECT admin FROM users');
$admincheckfetch     =     mysql_fetch_assoc($adminchecksql);
$admin                =    $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}

?>

<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //het formulier is verzonden
    $name    =    mysql_real_escape_string($_POST['naam']);
    $short    =    mysql_real_escape_string($_POST['kort']);
    $long    =    mysql_real_escape_string($_POST['lang']);
    $submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
    if($submitsql) { //kijken of het is gelukt.
        echo 'Nieuws toegevoegt!';
    }

    else {
        echo 'Er is een fout opgetreden! Probeer het later nog eens!';
    }
}

?>
Gewijzigd op 02/11/2012 20:23:18 door Bo Ter Ham
 
Eddy E

Eddy E

02/11/2012 20:21:40
Quote Anchor link
Dus je wilt eerst gaan fietsen, en dan pas de wielen monteren?
Dat werkt dus niet.

Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.

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
<?php
    // error reporting aan. Anders commentaar je deze weg?
    error_reporting(E_ALL);
    //error_reporting(0);

    // start sessie

    session_start();

    // include de configuratie
    include 'config.php';

    // controleer een admin... niets van de gebruiker nodig?
    // wat wil je hier nou? De enige admin selecteren? En dan?

    $sql = "SELECT admin FROM users";
    $res = mysql_query($sql);
    $geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
    
    // formulier maken, met soort van __VARS__ in het formulier.
    $formulier = '
    <form method="post" action="">
        <em>Titel</em>
        <input type="text" name="naam" value="__NAAM__">
        <em>Inleiding</em>
        <textarea name="kort"rows="15" cols="50">__KORT__</textarea>
        <em>Bericht</em>
        <textarea name="lang" rows="25" cols="50">__LANG__</textarea>
        <input type="submit" value="Publiceer">
    </form>'
;
        
    // controle van formulier
    // kijk of er NOG NIET gepost is

    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {

        // standaard-waarden dan maar...    
        $_POST['naam'] = 'Titel van het stuk';
        $_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
        $_POST['lang'] = 'Het lange bericht';
                
        // gaat formulier tonen
        $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
    }

    else
    {
        // kijk of de benodigde gegevens er zijn
        if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
        {

            // schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
            $sql = "INSERT INTO news
                            (
                                naam,
                                kort,
                                lang,
                                visible
                            )
                        VALUES
                            (
                                '"
. mysql_real_escape_string($_POST['naam']) . "',
                                '"
. mysql_real_escape_string($_POST['kort']) . "',
                                '"
. mysql_real_escape_string($_POST['lang']) . "',
                                1
                            );
                            "
;
            // echo $sql;

            // voer de query uit, sla resultaat (true/false) op in $res

            $res = mysql_query($sql);

            // kijk of de query gelukt is
            if($res === true)
            {

                // geef melding dat het opslaan gelukt is
                $melding[] = '<p class="alert_ok">Opgeslagen</p>';
            }

            // query is niet gelukt
            else
            {
                // geef melding van failure
                $melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
                
                // geef formulier weer
                $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
            }
        }

        // niet alle waarden zijn binnen gekomen
        else
        {
            // melding geven dat we wat missen
            $melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
            
            // geef formulier weer
            $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
        }
    }


?>

<!DOCTYPE html>
<head>
    <title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
    <?php
        echo implode(PHP_EOL, $melding);
    ?>

</body>
</html>
Gewijzigd op 02/11/2012 20:55:13 door Eddy E
 
Jasper DS

Jasper DS

02/11/2012 21:36:27
 
Koen Hollander

Koen Hollander

03/11/2012 09:58:30
Quote Anchor link
Eddy Erkelens op 02/11/2012 20:21:40:
Dus je wilt eerst gaan fietsen, en dan pas de wielen monteren?
Dat werkt dus niet.

Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.

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
<?php
    // error reporting aan. Anders commentaar je deze weg?
    error_reporting(E_ALL);
    //error_reporting(0);

    // start sessie

    session_start();

    // include de configuratie
    include 'config.php';

    // controleer een admin... niets van de gebruiker nodig?
    // wat wil je hier nou? De enige admin selecteren? En dan?

    $sql = "SELECT admin FROM users";
    $res = mysql_query($sql);
    $geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
    
    // formulier maken, met soort van __VARS__ in het formulier.
    $formulier = '
    <form method="post" action="">
        <em>Titel</em>
        <input type="text" name="naam" value="__NAAM__">
        <em>Inleiding</em>
        <textarea name="kort"rows="15" cols="50">__KORT__</textarea>
        <em>Bericht</em>
        <textarea name="lang" rows="25" cols="50">__LANG__</textarea>
        <input type="submit" value="Publiceer">
    </form>'
;
        
    // controle van formulier
    // kijk of er NOG NIET gepost is

    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {

        // standaard-waarden dan maar...    
        $_POST['naam'] = 'Titel van het stuk';
        $_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
        $_POST['lang'] = 'Het lange bericht';
                
        // gaat formulier tonen
        $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
    }

    else
    {
        // kijk of de benodigde gegevens er zijn
        if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
        {

            // schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
            $sql = "INSERT INTO news
                            (
                                naam,
                                kort,
                                lang,
                                visible
                            )
                        VALUES
                            (
                                '"
. mysql_real_escape_string($_POST['naam']) . "',
                                '"
. mysql_real_escape_string($_POST['kort']) . "',
                                '"
. mysql_real_escape_string($_POST['lang']) . "',
                                1
                            );
                            "
;
            // echo $sql;

            // voer de query uit, sla resultaat (true/false) op in $res

            $res = mysql_query($sql);

            // kijk of de query gelukt is
            if($res === true)
            {

                // geef melding dat het opslaan gelukt is
                $melding[] = '<p class="alert_ok">Opgeslagen</p>';
            }

            // query is niet gelukt
            else
            {
                // geef melding van failure
                $melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
                
                // geef formulier weer
                $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
            }
        }

        // niet alle waarden zijn binnen gekomen
        else
        {
            // melding geven dat we wat missen
            $melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
            
            // geef formulier weer
            $melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
        }
    }


?>

<!DOCTYPE html>
<head>
    <title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
    <?php
        echo implode(PHP_EOL, $melding);
    ?>

</body>
</html>


Heel erg bedankt! Nu werkt de code wel. Ik ben je vreselijk dankbaar, dankzij die commentaar regels snap ik alles! Dus: Dankjewel!

EN

PHP Jasper op 02/11/2012 21:36:27:


Die ga ik eens uitgebreid doorlezen.
Gewijzigd op 03/11/2012 09:59:08 door Koen Hollander
 



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.