ander code ipv exit welk de volgende div's nog wel laad?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis

Dennis

01/07/2008 10:22:00
Quote Anchor link
Goedendag,

Ik ben vandaag een beetje de foutafhandeling van mij site aan het verbeteren, dus ik wilde exit gaan gebruiken ipv weet ik niet hoeveel else'jes dus toen kwam ik erineens achter dat mijn footer die onder de content staat niet meer werd geladen. Dit komt natuurlijk door exit, omdat er na deze code geen code meer wordt uitgevoerd, maar is er misschien een andere code welk dan wel volgende div's gaat uitvoeren, of is er echter maar 1 manier om mijn footer te laten zien en dat is door allemaal if else'jes te gebruiken in de code in mijn content?

groetjes,
Dennis
 
PHP hulp

PHP hulp

24/04/2024 16:12:13
 
Jacco Engel

Jacco Engel

01/07/2008 10:25:00
Quote Anchor link
Alleen maar if/else jes
 
Dennis

Dennis

01/07/2008 10:27:00
Quote Anchor link
Ok jammer. Toch bedankt :)
 
Jan Koehoorn

Jan Koehoorn

01/07/2008 10:30:00
Quote Anchor link
Dennis schreef op 01.07.2008 10:22:
Goedendag,

Ik ben vandaag een beetje de foutafhandeling van mij site aan het verbeteren, dus ik wilde exit gaan gebruiken

Je hebt nu ontdekt dat die exit helemaal geen goede manier is. De beste manier is om eerst alle business logica af te handelen. Maak bijvoorbeeld twee arrays aan in het begin van je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $errs
= array ();
    $msgs = array ();
?>

Als er iets fout gaat stop je een melding in je $errs array. Als je een andere melding wilt weergeven, gebruik je $msgs. Op een handige plek in je content doe je dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    if (!empty ($errs)) {
        foreach ($errs as $err) {
            echo '<p class="err">' . $err . '</p>';
        }
    }

?>

Met de messages array doe je het net zo. Op deze manier kun je ook heel handig actie ondernemen wanneer er iets fout is gegaan. Bijvoorbeeld bij een upload kan van alles fout gaan. Je checkt dan eenvoudig met empty of de array $errs leeg is. Zo ja, dan is alles goed gegaan.

Edit: check mijn upload voorbeeldscript. Daar gaat de foutafhandeling op die manier.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Robert Deiman

Robert Deiman

01/07/2008 10:33:00
Quote Anchor link
Wat voor foutafhandeling ben je aan het maken, voor SQL kan je trigger_error(); gebruiken, en verder kan je ook proberen met het try/catch principe :)

Wat Jan zegt kan in principe ook prima, dat is een mooie oplossing. Ik zou alleen die array wat anders maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$aMsgs
= array('type','bericht');
?>


Door een paar bepaalde types te gebruiken kan je zien of het een error of warning is en dergelijke. (die hebben een bepaalde error_code die je goed kan gebruiken)

Je kan dan controleren of een bepaalde error_code voorkomt in die array, zo ja dan is er echt wat fout gegaan, zo nee dan kunnen er wel waarschuwingen zijn. -> Deze zet ik altijd in 1 array, en daarmee ga ik verder.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Dennis

Dennis

01/07/2008 11:11:00
Quote Anchor link
Als er bepaalde data niet in de database staat en als mensen geen geldige waardes hebben ingevoerde.

Maar mij leek exit handig omdat je dan niet in de war raakt met de accolades die nog moeten worden geplaatst. en ander krijg je aan het eind van de php pagina zoveel accolade sluiten --> }

Ik probeer mijn code zo simpel mogelijk te houden ben net begonnen, en anders snap ik mijn eigen code later niet meer...
Gewijzigd op 01/01/1970 01:00:00 door Dennis
 
Jelmer -

Jelmer -

01/07/2008 11:24:00
Quote Anchor link
Je kan ook controleren op de uitzondering in plaats van op de regel, maar dan is een soort jump-to constructie wel handig. Helaas (gelukkig) heb je die (nog) niet in PHP. Maar als je includes gebruikt voor bijvoorbeeld de inhoud in een algemene index te plaatsen, kan je net als bij functies 'return' gebruiken. Voorbeeldje:

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
<?php
function show_topic($topic) {
    $sql_response = mysql_query("SELECT * FROM Posts WHERE topic_id = " . intval($topic));
    
    ...

    
    if(mysql_num_rows($sql_response) == 0) {
        echo 'Geen topics gevonden';
        return;
    }

    
    while($post = mysql_fetch_assoc($sql_response)) {
        echo '<div id="post-' . $post->id . '">';
        echo '<p>' . htmlentities($post->content) . '</p>';
        echo '</div>';
    }
}

?>

<html>
    <body>
        <h2>Mijn Forum</h2>
        <?php echo show_topic(50621); ?>
    </body>
</html>


Op die manier kan je die eindeloos geneste if-lussen vermeiden. Want als er iets vervelend is om te lezen... Dit werkt ook met 'include'. Voorbeeldje:

show_topic.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
$sql_response
= mysql_query("SELECT * FROM Posts WHERE topic_id = " . intval($topic));
    
...

    
if(mysql_num_rows($sql_response) == 0) {
    echo 'Geen topics gevonden';
    return;
}


while($post = mysql_fetch_assoc($sql_response)) {
    echo '<div id="post-' . $post->id . '">';
    echo '<p>' . htmlentities($post->content) . '</p>';
    echo '</div>';
}

?>


en je andere bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<html>
    <body>
        <h2>Mijn Forum</h2>
        <?php include 'show_topic.php'; ?>
    </body>
</html>


De include stopt met uitvoeren wanneer hij een 'return' tegenkomt. Het werkt hier als een soort van exit, maar dan alleen voor dat ene bestand.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Jelmer -

Jelmer -

01/07/2008 11:24:00
Quote Anchor link
en 2
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Jelmer -

Jelmer -

01/07/2008 11:24:00
Quote Anchor link
en drie
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Dennis

Dennis

01/07/2008 11:41:00
Quote Anchor link
Ok dan dat is misschien ook wel handig.
 



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.