Veiligheids vragen

Overzicht Reageren

PHP Scripter

PHP Scripter

31/07/2010 02:26:09
Quote
Ik ben de laatste tijd meer tijd en energie aan het steken in het overzichtelijke en veilige stripten. Ook ben ik bezig met fouten afhandelingen.

Zou iemand eens naar deze stuk code willen kijken?
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
<?php
include "includes/mysql.inc.php";

$ErrorMessage = 'Er is een fout opgetreden, neem a.u.b. contact op met de <a href="mailto:">webmaster</a>';

$objResult = mysql_query("SELECT * FROM ConfigValues", $connection);

if ( !empty ( $objResult ) )
{

    while ( $objRow = mysql_fetch_object ( $objResult ) )
    {

        $SiteName          = $objRow->SiteName;
        $SiteSlogan        = $objRow->SiteSlogan;
        $SiteClosed        = $objRow->SiteClosed;
        $SiteClosedMessage = $objRow->SiteClosedMessage;
        
        if ( $SiteClosed == 1 )
        {

            echo $SiteClosedMessage;
            exit;
        }
    }
}

else
{
    echo $ErrorMessage;
    exit;    
}

function
ShowAllCategories()
{

    $objResult = mysql_query("SELECT * FROM AllCategories", $connection);
    
    if ( !empty ( $objResult ) )
    {

        while ( $objRow = mysql_fetch_object ( $objResult ) )
        {

            $CategorieID     = $objRow->CategorieID;
            $CategorieName   = $objRow->CategorieName;
            $CategorieLink   = $objRow->CategorieLink;
            $CategorieActive = $objRow->CategorieActive;
        }
    }

    else
    {
        echo $ErrorMessage;
        exit;    
    }
}

function
ShowCategorieProducts()
{

    $objResult = mysql_query("SELECT * FROM AllProducts", $connection);
    
    if ( !empty ( $objResult ) )
    {

        while ( $objRow = mysql_fetch_object ( $objResult ) )
        {

            $ProductID        = $objRow->ProductID;
            $ProductName      = $objRow->ProductName;
            $ProductCategorie = $objRow->ProductCategorie;
            $ProductContent   = $objRow->ProductContent;
            $ProductPrice     = $objRow->ProductPrice;
            $ProductActive    = $objRow->ProductActive;
        }
    }

    else
    {
        echo $ErrorMessage;
        exit;    
    }
}

?>


Ben benieuwd wat jullie aan- of opmerkingen zijn ;)
Gewijzigd op 31/07/2010 12:45:11 door PHP Scripter
 
PHP hulp

PHP hulp

09/02/2012 06:03:37
Gesponsorde koppelingen:
 
- Aar -

- Aar -

31/07/2010 08:17:43
Quote
Wel tof dat je uit de database het gegeven haalt dat je site gesloten is. Maar waarom haal je dat uit MySQL.
Stel, je database is onbereikbaar, ligt plat, en je wilt je site uit schakelen. Dan is het toch handiger om een als 'pref' in te stellen in de config :P?

Verder is mysql_fetch_objecterg traag. Gebruik liever mysql_fetch_assoc.
 
PHP Scripter

PHP Scripter

31/07/2010 12:20:34
Quote
Aar anoniem op 31/07/2010 08:17:43:
Wel tof dat je uit de database het gegeven haalt dat je site gesloten is. Maar waarom haal je dat uit MySQL.
Stel, je database is onbereikbaar, ligt plat, en je wilt je site uit schakelen. Dan is het toch handiger om een als 'pref' in te stellen in de config :P?

Verder is mysql_fetch_objecterg traag. Gebruik liever mysql_fetch_assoc.


Bedankt voor jouw reactie Aar. Waarom ik dat uit de database haal? Dat is meer voor onderhoud en/of grote aanpassingen, maar we gaan er vanuit dat dat niet gebruikt zal worden.
 
- SanThe -

- SanThe -

31/07/2010 12:32:17
Quote
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ( !empty ( $objResult ) )
?>

Normaal check je hier op true/false


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    while ( $objRow = mysql_fetch_object ( $objResult ) )
    {

        $SiteName          = $objRow->SiteName;
        ......
    }

?>

Wat is het nut om de $vars ongewijzigd te kopïeren?
En dat net zo vaak als de while() loopt.
Je vangt uiteraard alleen de laatste.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
exit;
?>

Kan dat niet netter?


$connection en $ErrorMessage zijn onbekend in de function.


Verder moet ik zeggen dat het zeer overzichtelijk is gescript.
Gewijzigd op 31/07/2010 12:33:41 door - SanThe -
 
PHP Scripter

PHP Scripter

31/07/2010 12:39:45
Quote
SanThe bedankt,

- De functie !empty kan toch prima werken? Of moet ik dat oplossen met mysql_num_rows?

- Het is toch veel makkelijker om overal even een variabel $ te kunnen droppen dan de gehele objRow erbij?

- exit() kan ik toch zo vervangen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    global $ErrorMessage;
    die($ErrorMessage);
?>
Gewijzigd op 31/07/2010 12:40:12 door PHP Scripter
 
Afra ca

Afra ca

31/07/2010 13:41:59
Quote
Uiteraard altijd mooi te zien dat mensen bewust bezig gaan met nette foutafhandeling (en dus net coden), goed bezig :)

PHP Scripter op 31/07/2010 12:39:45:
SanThe bedankt,

- De functie !empty kan toch prima werken? Of moet ik dat oplossen met mysql_num_rows?


Hier een voorbeeld dat ik kant en klaar heb staan om wat standaard php dingetjes uit te leggen:

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
<?php

if($_SERVER['REQUEST_METHOD'] == "POST"){
    //geweldig, formuliertje verzonden, daar kunnen we wat mee
    $query = "SELECT nickname, woonplaats FROM gebruikers";
    if(isset($_GET['woonplaats'])){
        //Er is een woonplaats gespecificeerd
        //We willen alleen mensen die uit de ingevuld woonplaats komen

        $query .= "WHERE woonplaats = '".mysql_real_escape_string($_GET['woonplaats'])."'";
    }

    if(!$result = mysql_query($query)){
        trigger_error('Error in query. Tadaa: <br />'.mysql_error());
    }

    else{
        //query gelukt
        while($rows = mysql_fetch_assoc($result)){
            echo 'Nickname: '.$rows['nickname'].', woonplaats: '.$rows['woonplaats'].'<br />';
        }
    }
}

else {
    //Formulier laten zien
    echo 'Ik ben een formulier!';
}

?>


Zeker geen perfect voorbeeld, maar het voldoet en is voor hobby-php'ers prima te begrijpen. Kijk goed naar het gedeelte waar de query wordt uitgevoerd. Ik heb het wat verkort, je kan het namelijk ook splitsen in 2 delen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$result
= mysql_query($sql);
if(!$result){
    //query mislukt
}
//rest
?>


Maar het komt op hetzelfde neer. Wat je doet is query uitvoeren. Als die mislukt zal je $result variabele niet een mysql resource bevatten (niet echt uit te leggen (door mij) wat dat is), en dus evalueren als false in je if-gedeelte :)

Zoals je ziet gebruik ik daarna mysql_fetch_assoc($result) , waarna je gegevens kan aanspreken door $rows['kolomnaam'] .

Quote:
- Het is toch veel makkelijker om overal even een variabel $ te kunnen droppen dan de gehele objRow erbij?


Ik snap even niet helemaal wat je probeert te bereiken. Waarom wil je variabelen dropppen, nergens voor nodig. Daar zal je geheugengebruik heus niet van uit de spuigaten lopen.

Quote:
- exit() kan ik toch zo vervangen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    global $ErrorMessage;
    die($ErrorMessage);
?>




Kijk, nu word het interessant! Je wilt nooit je script zomaar helemaal afkappen (in ieder geval sowieso niet op een normale website, spreek hier niet over een API o.i.d. ) . Een bijzonder mooie tutorial over foutafhandeling staat hier:

Foutafhandeling in PHP (Error Handling)

Daar word langzaam naar de ideale foutafhandeling toegewerkt: exceptions. Lees dat eens goed door, dan zul je zien dat exceptions awesome zijn :) Je hoeft zeker je hele site niet OOP (object geörienteerd) te programmeren om goed gebruik te maken van exceptions, máár de exceptions zelf zijn wel objecten. Dát is waar je naartoe wilt werken. Je zult echter in de tutorial zien dat er tussen het barbaarse die/exit en exceptions nog een stap zit, trigger_error, wat ik in mijn voorbeeld hierboven ook gebruikt heb.

Succes ermee.
 
PHP Scripter

PHP Scripter

31/07/2010 22:48:15
Quote
Dank!
 



Overzicht Reageren