Overzichtelijk programmeren en debuggen

Door , 23 jaar geleden, 5.241x bekeken

Je eigen gebruiksaanwijzing over hoe en waarom

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. De rest
  3. Commentaar
  4. Eén bestand
  5. Functies

 

Er zijn 37 reacties op 'Overzichtelijk programmeren en debuggen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Christophe
Christophe
23 jaar geleden
 
0 +1 -0 -1
Mooie tutorial, goed gestructureerd door je indeling in deelaspecten!


23 jaar geleden
 
0 +1 -0 -1
mooi! erg handig!
Han eev
Han eev
23 jaar geleden
 
0 +1 -0 -1
Goeie tut, Als je dit doet word gebuggen en makelijker
(ik dee het al :P)
Mitch X
Mitch X
23 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$result
= mysql_query($sql) or die("Error on line ".__LINE__.": ".mysql_error());
?>


Dat kun je dus beter niet doen ;)
Het gaat je bezoekers niet aan wat er precies misging, je kunt beter zoiets voor jezelf houden ( evt. loggen/mailen ) en zoiets neerzetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if( ! $result = @mysql_query( $sql ) )
   die('Helaas, er was \'n database probleempje, probeer later nog eens..' );
?>


Wanneer je het aan het testen bent is het eerste natuurlijk wel een goed idee! Zo zie je op welke regel de query mis ging en is handig met debuggen..
B a s
B a s
23 jaar geleden
 
0 +1 -0 -1
goede tutorial sebastiaan :)


23 jaar geleden
 
0 +1 -0 -1
@Bas: Thnx
@mitch: Ja, maar je zou ook zoiets kunnen doen als een functie maken dat ie een formpje weergeeft dat je fout naar de webmaster opstuurt. Het is gewoon wat jij het beste vind, hoe ver je fantasie gaat.
PHP erik
PHP erik
23 jaar geleden
 
0 +1 -0 -1
Quote:
Zeg zelf. Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if ($var = 7) {
          if($i = 8) {
                   doe_dit();
            }
}
else {  
         doe_dat();
}
?>

ziet er toch een stuk beter uit als dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if ($var = 7) {
if($i = 8) {
doe_dit();
}
}
else {  
doe_dat();
}
?>


Nou... nee.
Tabs zijn goed, maar hoe jij ze hier gebruikt maakt het het script niet overzichtelijker.
Probeer de haken op dezelfde hoogtes te krijgen, dus zo:

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

if ($var == 7)
{

    if($i == 8)
    {

        doe_dit();
    }
}


else
{  
    doe_dat();
}


?>


En gebruik a.u.b. == in plaats van = in if-statements ;)


23 jaar geleden
 
0 +1 -0 -1
Het gaat om het principe. En trouwens, in zo`n tekstvak kon ik niet zo makkelijk tabs maken!


23 jaar geleden
 
0 +1 -0 -1
PHPErik, je manier van de accolades maakt het er niet leesbaarder op, maakt er dan dit van:

if ($var == 7) {

if($i == 8) {
doe_dit();
}
} else {
doe_dat();
}

Beter leesbaarder, en mooier :)
Mitch X
Mitch X
23 jaar geleden
 
0 +1 -0 -1
Nee Thomas, juist niet.
Die accolades op dezelfde hoogte/tabafstand maken het juist duidelijker.
PHP erik
PHP erik
23 jaar geleden
 
0 +1 -0 -1
Quote:
PHPErik, je manier van de accolades maakt het er niet leesbaarder op, maakt er dan dit van:

if ($var == 7) {

if($i == 8) {
doe_dit();
}
} else {
doe_dat();
}

Beter leesbaarder, en mooier :)


Dus als jij een script hebt van 1000 regels, dan zie jij welke accolade onderin het script bij welke IF hoort? Dat vind ik heel knap van je met zo'n stijl...
Ik blijf erbij dat "mijn manier" het best is. Overigens staat dit ook mooi beschreven in een artikel van Bas.
Lissy Pixel
Lissy Pixel
23 jaar geleden
 
0 +1 -0 -1
ik kom de waarde kreten als:

dit is: ==> mooi(er) ... ==> beter ... ==> het beste ... ==> etc.

nog al is tegen en zijn mijnsinziens allemaal persoonlijke belevingen en kunnen derhalve niet gesteld worden of geprojecteerd worden op of voor een ander.

of zoals ik ook ergens las: beauty is in the behave of the holder (owner) :-)
groetjes, lissy
Elwin - Fratsloos
Elwin - Fratsloos
23 jaar geleden
 
0 +1 -0 -1
Hee Erik, dus jij wilt zeggen dat als jij een paar duizend regels code hebt, jij wel ineens ziet welke accolade waar hoort? Dat lijkt me sterk.

Volgens mij gaat het er niet om of je de accolade achter de if of while zet, of er onder. Ik denk dat de editor meer verschil gaat uitmaken.

Bijvoorbeeld, accoladeblokken 'minimaliseren', accolades kleuren die bij elkaar horen, een toetscombinatie om van begin naar het einde van het blok te springen, etc.

Die dingen hebben meerwaarde voor overzichtelijkheid.

En verder ga ik in deze mee met Lissy.

Elwin
B a s
B a s
23 jaar geleden
 
0 +1 -0 -1
Wel een feit is dat wanneer accolades onder elkaar staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if ($var == $var)
{

    // ...
}
?>

Dat je dan alleen omhoog moet scrollen en de begin accolade hebt.. Zelf heb ik ook een editor die de accolades kleurt die bij elkaar horen, is inderdaad ook erg makkelijk.. Tis maar net wat iemands voorkeur is :)
Steff   an
Steff an
23 jaar geleden
 
0 +1 -0 -1
Quote:
Bijvoorbeeld, accoladeblokken 'minimaliseren', accolades kleuren die bij elkaar horen, een toetscombinatie om van begin naar het einde van het blok te springen, etc.

Quote:
Dat je dan alleen omhoog moet scrollen en de begin accolade hebt.. Zelf heb ik ook een editor die de accolades kleurt die bij elkaar horen, is inderdaad ook erg makkelijk.. Tis maar net wat iemands voorkeur is :)


Met welke editors kan dat?
Piles
Piles
23 jaar geleden
 
0 +1 -0 -1
Nog een tip voor het accolade 'probleem':
Nummer je accolades, en geef ze namen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if (1==1)
   {
// 1
   while (...)
           {
// begin while
           echo '';
           }
// einde while
   } // 1
else { // 1
       } // 1
?>


23 jaar geleden
 
0 +1 -0 -1
@Bas: Welke editor????
Steff   an
Steff an
23 jaar geleden
 
0 +1 -0 -1
Deze heeft dat in iedergeval wel "Maguma Open Studio"


23 jaar geleden
 
0 +1 -0 -1
Gratis, maar niet erg goed.
Jelmer -
Jelmer -
23 jaar geleden
 
0 +1 -0 -1
Notepad2 doet het ook, gratis, en erg hanig, als notepad vervanger :P
Derk nvt
Derk nvt
23 jaar geleden
 
0 +1 -0 -1
Er stond ergens dat als je } vergeet dat het dan moeilijk zoeken is zonder tabs
Notepad2 geeft aan bij een } waar hij begint en eindigt
erg handig als je te lui bent tabs te gebruiken
PHP erik
PHP erik
23 jaar geleden
 
0 +1 -0 -1
dat klopt. maar de tabs zijn ook wel handig voor nog heel veel dingen. als je je script na een jaar nog eens bekijkt bijvoorbeeld.
Joris van Rooij
Joris van Rooij
23 jaar geleden
 
0 +1 -0 -1
Quanta doet het ook, evenals gphpedit volgens mij, met die codering. Zend studio doet het ook al een tijd op een nette manier. Quanta kan ook je code tussen bepaalde brackets als een ducument tree inklappen en uitklappen, waardoor je geen lel van een bestand krijgt.
Omdat ik in een non-ms omgeving werk kom ik nog wel eens ms-gefabriceerde php bestanden tegen met harde tabs. Dat wil zeggen <tab-knop>. Het wordt er in verschillende editors niet duidelijker op. Wanneer je wilt dat je scripts door iedereen leesbaar zijn hebben de meeste editors een optie om tabs te vervangen door spaties, waardoor ze ook werken in ontwikkelomgevingen die niet goed met die tabs om kunnen gaan. Wanneer je editor dat niet kan heb je a) een betere editor nodig en b) kun je toch maar beter spaties gebruiken.
Een tab is geen vaste eenheid, een spatie wel.
Steff   an
Steff an
23 jaar geleden
 
0 +1 -0 -1
Is er geen windows versie van quanta of gphpedit, want ik kan geen windows versie vinden met die opties.


23 jaar geleden
 
0 +1 -0 -1
Geen slechte editor, nee. Misschien een idee om op de links van phphulp te zetten???
B a s
B a s
23 jaar geleden
 
0 +1 -0 -1
@ Sebastiaan en steffan
Die editor waarmee je accolades kunt minimalizeren en die de eind accolade kleurt wanneer je bij de begin accolade bent en andersom, is de nieuwste versie van UltraEdit.. Die kun je vinden op www.ultraedit.com..
Gerrit JAn
Gerrit JAn
23 jaar geleden
 
0 +1 -0 -1
Wat ook een fijne php editor is zend client daar geeft hij aan de einde van de accolade boven in vaar hij van is is misschien ook wel makkelijk
Lissy Pixel
Lissy Pixel
23 jaar geleden
 
0 +1 -0 -1
@ GerritJan : Heb je een link voor deze editor?

Groet, lissy
Jelmer -
Jelmer -
23 jaar geleden
 
0 +1 -0 -1
@Lissy: zend.com

Goeje editors btw, die van Zend. Alleen niet echt gratis en persoonlijk vind ik ze wat te hongerig kijken naar mijn resources (werkgeheugen e.d.)
Lissy Pixel
Lissy Pixel
23 jaar geleden
 
0 +1 -0 -1
@ Jelmer : Dank je wel en ben er geweest en zag idd een en ander.

Zelf werk ik nu met Crimson Editor en moet je zeggen dat ik hier best over te spreken ben.
Sta altijd open voor verbetering dat is zeker een feit!

Groetjes, lissy


23 jaar geleden
 
0 +1 -0 -1
Ben ik nu de enige die het gebruik van html in phpscripts erg onoverzichtelijk vindt? ik zweer bij templates... gewoon alle html en php gescheiden houden, dat scheelt lappen tekst in je php bestanden waardoor debuggen een eitje wordt.. (voor zover het een eitje kan zijn (A)
Steff   an
Steff an
23 jaar geleden
 
0 +1 -0 -1
Ik vind mijn eigen code debuggen zowieso niet zo moeilijk, van anderen is wat lastiger.
Mijn favoriete php editor is weaverslave, omdat die de php-functies highlight op een andere manier(Bij worden die blauw), de andere (eigen) fucnties worden zwart. Wat ik wel mis bij die editor is een autoaanvulling en de ()'s, []'s en {}'s bij elkaar zoeken.


23 jaar geleden
 
0 +1 -0 -1
@mitch
mailen?? dat zou ik juist niet doen ;) stel dat je een erg goed lopende site hebt met paar 1000 bezoekers per dag. dan betekend dit dus dat je 1000 mailtjes krijgt. daar word je volgens mij ook niet vrolijk van :P


23 jaar geleden
 
0 +1 -0 -1
ik zweer bij notepad :)
ik gebruik tabs op deze manier:

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
if($i<1)
{

   echo 'Yes';
}

else
{
   if($i>22)
   {

      echo 'No';
   }

   else
   {
      echo 'Almost';
   }
}

?>


ik maak zelde een fout, en als ik er een maak, dan is hij zo gevonden , (ctrl - g nummertje klaar
Pim Vernooij
Pim Vernooij
23 jaar geleden
 
0 +1 -0 -1
Zend Studio Client is een erg goede editor vind ik, houdt zelfs zelgemaakte klassen en functies bij!
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Martijn
martijn
23 jaar geleden
 
0 +1 -0 -1
Ik programmeer nog niet zo lang in PHP, dus de tips zijn zeer welkom!
Het 'gedoe' met accolades viel me ook wat tegen. Daarom heb ik een nogal rigoureuze oplossing bedacht, die ontzettend handig is bij testen en en onderhoud(!!) van programma's.

Ik schreef een programma in VB (sorry hoor...) dat source-code omzet in een Nassi Schneidermann diagram. Ook PHP code wordt keurig geslikt.

Hieronder zie je een voorbeeld.

Om het effect goed te kunnen zien: knip de tekst uit, stop hem in een tekstverwerker en kies een niet-proportioneel lettertype zoals de courier.

Met vriendelijke groet, Martijn Claassen
[email protected]



if ($aantal_klussers > 0) {
// Wis dubbele uit tmp_kk
$sql5 = "create temporary table tmp_disemail select distinct(email) from tmp_kk"; mysql_query($sql5);
$sql6 = "select email from tmp_disemail"; $res6 = mysql_query($sql6);
while ($row6 = mysql_fetch_array($res6,MYSQL_ASSOC)) {
$to = $row6;
// In principe is de kandidaat geschikt. Het kan echter zijn dat hij niet actief is
// Of de postcode is buiten bereik.
//
$sql7 = "select *, left(postcode,2) as pc_plaats from vrager where email = '" . $m_ident . "' limit 1"; $res7 = mysql_query($sql7);
$row7 = mysql_fetch_array($res7,MYSQL_ASSOC);
//
// Kijk of klusser afwijkende en/of meer postcodegebieden heeft.
//
$m_match = 0; $i = 0; $m_extra_pc = 0;
$sql9 = "select * from klusser_postcodes where email = '" . $to . "'"; $res9 = mysql_query($sql9);
if (mysql_num_rows($res9) > 0) {
while (($row9 = mysql_fetch_array($res9,MYSQL_ASSOC)) && ($m_match == 0)) {
$m_extra_pc = 1;
$m_digit_ok = 1;
$i = -1;
while (($i<3) && ($m_digit_ok == 1)) {
$i++;
if (substr($row9[postcode],$i,1) == "*") {
// wordt altijd geaccepteerd

}
else {
if (substr($row9[postcode],$i,1) != substr($row7[postcode],$i,1)) { $m_digit_ok = 0; }
}
}
if ($m_digit_ok == 1) {
// record voldoet. Meenemen in mail
$m_match = 1;
}
}
}
if ($m_extra_pc == 1) {
// klusser wijkt af van default
// controleer of klusser actief is.
$sql8 = "select actief from klusser where email = '" . $to . "' and actief='T'" . " limit 1";
$res8 = mysql_query($sql8);
$nr_rows = mysql_num_rows($res8);
if ($nr_rows == 1) { $m_mailen = $m_match; } else { $m_mailen = 0; }
}
else {
$sql8 = "select actief from klusser where email = '" . $to . "' and left(postcode,2)= '" . $row7[pc_plaats] . "' and actief='T'" . " limit 1";
$res8 = mysql_query($sql8);
$nr_rows = mysql_num_rows($res8);
if ($nr_rows == 1) { $m_mailen = 1; } else { $m_mailen = 0; }
}

if ($m_mailen == 1) {
$subject = "Geschikte klus in KlusKontakt";
$message = "Beste klusser, \n\n";
$message .= "Zojuist is er in KlusKontakt een nieuwe klus ingevoerd. \nHet profiel van de klus past bij jouw profiel en de opdrachtgever woont waarschijnlijk vlak bij jou in de buurt, vandaar deze email.\n\n";
$message .= "De opdrachtgever voerde de volgende korte omschrijving in:\n\n";
$message .= $m_kort . "\n\n";
$message .= "en gaf de volgende uitvoerige omschrijving:\n\n";
$message .= $m_lang . "\n\n";
$message .= "De opdrachtgever heeft de volgende gegevens over zichzelf ingevoerd:\n\n";
$message .= "Postcode: " . $row7[postcode] . "\n";
$message .= "Woonplaats: " . $row7[woonplaats] . "\n";
$message .= "Telefoon: " . $row7[telefoon] . "\n";
$message .= "Email: " . $row7[email] . "\n\n";

$message .= "De volgende link geeft je geschikte klussen op volgorde van postcode:\n\n";
$message .= "http://www.kluskontakt.nl/koppelen.php?inlognaam=" . $to;

if (1==1) {
// echo $to . '<br>';
$headers = "From: [email protected]\r\n";
mail($to,$subject,$message,$headers);
mail("[email protected]",$subject,$message,$headers);
}
}

}

}

mysql_close();
$m_url = 'index_vrager.php?' . 'inlognaam='. $m_ident;
echo '<meta http-equiv="refresh" content=' . '"' . '0; URL=' . $m_url . '"';
?>
</body>
</html>

----------------

hier het PSD (Nassi Schneidermann)


I---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I
I T ($aantal_klussers > 0) F I
I---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I
I // Wis dubbele uit tmp_kk I - I
I $sql5 = "create temporary table tmp_disemail select distinct(email) from tmp_kk"; mysql_query($sql5); I I
I $sql6 = "select email from tmp_disemail"; $res6 = mysql_query($sql6); I I
I WHILE ($row6 = mysql_fetch_array($res6,MYSQL_ASSOC)) I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I $to = $row6[email]; I I
I I // In principe is de kandidaat geschikt. Het kan echter zijn dat hij niet actief is I I
I I // Of de postcode is buiten bereik. I I
I I // I I
I I $sql7 = "select *, left(postcode,2) as pc_plaats from vrager where email = '" . $m_ident . "' limit 1"; $res7 = mysql_query($sql7); I I
I I $row7 = mysql_fetch_array($res7,MYSQL_ASSOC); I I
I I // I I
I I // Kijk of klusser afwijkende en/of meer postcodegebieden heeft. I I
I I // I I
I I $m_match = 0; $i = 0; $m_extra_pc = 0; I I
I I $sql9 = "select * from klusser_postcodes where email = '" . $to . "'"; $res9 = mysql_query($sql9); I I
I I T (mysql_num_rows($res9) > 0) F I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I WHILE (($row9 = mysql_fetch_array($res9,MYSQL_ASSOC)) && ($m_match == 0)) I - I I
I I I-----------------------------------------------------------------------------------------------------------------------------------I I I
I I I $m_extra_pc = 1; I I I
I I I $m_digit_ok = 1; I I I
I I I $i = -1; I I I
I I I WHILE (($i<3) && ($m_digit_ok == 1)) I I I
I I I I-----------------------------------------------------------------------------------------------------------------------------I I I
I I I I $i++; I I I
I I I I T (substr($row9[postcode],$i,1) == "*") F I I I
I I I I-----------------------------------------------------------------------------------------------------------------------------I I I
I I I I // wordt altijd geaccepteerd I T (substr($row9[postcode],$i,1) != substr($row7[postcode],$i,1)) F I I I
I I I I I-----------------------------------------------------------------------------------I I I
I I I I I $m_digit_ok = 0; I - I I I
I I I-----------------------------------------------------------------------------------------------------------------------------------I I I
I I I T ($m_digit_ok == 1) F I I I
I I I-----------------------------------------------------------------------------------------------------------------------------------I I I
I I I // record voldoet. Meenemen in mail I - I I I
I I I $m_match = 1; I I I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I T ($m_extra_pc == 1) F I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I // klusser wijkt af van default I $sql8 = "select actief from klusser where email = '" . $to . "' and left(pos I I
I I // controleer of klusser actief is. I $res8 = mysql_query($sql8); I I
I I $sql8 = "select actief from klusser where email = '" . $to . "' and actief= I $nr_rows = mysql_num_rows($res8); I I
I I $res8 = mysql_query($sql8); I T ($nr_rows == 1) F I I
I I $nr_rows = mysql_num_rows($res8); I--------------------------------------------------------------------------------I I
I I T ($nr_rows == 1) F I $m_mailen = 1; I I I
I I-------------------------------------------------------------------------------I I $m_mailen = 0; I I
I I $m_mailen = $m_match; I $m_mailen = 0; I--------------------------------------------------------------------------------I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I T ($m_mailen == 1) F I I
I I----------------------------------------------------------------------------------------------------------------------------------------------------------------I I
I I $subject = "Geschikte klus in KlusKontakt"; I - I I
I I $message = "Beste klusser, \n\n"; I I I
I I $message .= "Zojuist is er in KlusKontakt een nieuwe klus ingevoerd. \nHet profiel van de klus past bij I I I
I I $message .= "De opdrachtgever voerde de volgende korte omschrijving in:\n\n"; I I I
I I $message .= $m_kort . "\n\n"; I I I
I I $message .= "en gaf de volgende uitvoerige omschrijving:\n\n"; I I I
I I $message .= $m_lang . "\n\n"; I I I
I I $message .= "De opdrachtgever heeft de volgende gegevens over zichzelf ingevoerd:\n\n"; I I I
I I $message .= "Postcode: " . $row7[postcode] . "\n"; I I I
I I $message .= "Woonplaats: " . $row7[woonplaats] . "\n"; I I I
I I $message .= "Telefoon: " . $row7[telefoon] . "\n"; I I I
I I $message .= "Email: " . $row7[email] . "\n\n"; I I I
I I $message .= "De volgende link geeft je geschikte klussen op volgorde van postcode:\n\n"; I I I
I I $message .= "http://www.kluskontakt.nl/koppelen.php?inlognaam=" . $to; I I I
I I T (1==1) F I I I
I I-----------------------------------------------------------------------------------------------------------I I I
I I // echo $to . '<br>'; I - I I I
I I $headers = "From: [email protected]\r\n"; I I I I
I I mail($to,$subject,$message,$headers); I I I I
I I mail("[email protected]",$subject,$message, I I I I
I---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I
I mysql_close(); I
I $m_url = 'index_vrager.php?' . 'inlognaam='. $m_ident; I
I echo '<meta http-equiv="refresh" content=' . '"' . '0; URL=' . $m_url . '"'; I
I ?> I
I </body> I
I </html> I
I---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. De rest
  3. Commentaar
  4. Eén bestand
  5. Functies

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

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.