1 van 1

[sitebuilding] foutmelding in cutenews

Geplaatst: zo 08 jul 2007, 21:03
door PdeJongh
Voor de mensen die niet weten wat CuteNews is: het is een script om online nieuws toe te voegen aan je site. Je moet het wel eerst op je site installeren.

Goed, nu de foutmelding. Ik heb wat test nieuwsberichtjes gemaakt, en als ik dan op Full Story klik voor het volledige verhaal, krijg ik onder het nieuwsbericht de volgende melding:

Code: Selecteer alles

Warning: Division by zero in /usr/export/www/hosting/pdejongh/cutenews/inc/functions.inc.php on line 469
Na een beetje moeilijk doen, heb ik regel 469 gevonden. Nu denk ik te weten wat de fout is, maar omdat ik hier niet in wil rotzooien terwijl ik niet weet wat ik precies doe, leg ik het eerst hier even voor. Dit is het stukje broncode wat eromheen zit:

Code: Selecteer alles

function insertSmilies($insert_location, $break_location = FALSE, $admincp = FALSE, $wysiwyg = FALSE)

{

global $config_http_script_dir, $config_smilies;

$smilies = explode(",", $config_smilies);

foreach($smilies as $smile)

{

$i++; $smile = trim($smile);

  if($admincp){

if($wysiwyg){

//

   $advanced_smile = "<img alt=\':$smile:\' src=\'data/emoticons/$smile.gif\' />";

  //

 $output .= "<a href=# onclick=\"java script:InsertIntoArea('$insert_location','$advanced_smile'); return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";

   $output .= "<a href=# onclick=\"document.getElementById('$insert_location').contentWindow.document.execCommand('InsertImage', false, '$config_http_script_dir/data/emoticons/$smile.gif'); return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";

}

else{ $output .= "<a href=# onclick=\"java script:document.getElementById('$insert_location').value += ' :$smile:'; return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>"; }

  }else{

$output .= "<a href=\"java script:insertext(':$smile:','$insert_location')\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";

  }

if($i%$break_location == 0 and $break_location)

{

$output .= "<br />";

}else{ $output .= " "; }

}

return $output;

}
Nu vermoed ik dat de fout in deze regel zit:

Code: Selecteer alles

if($i%$break_location == 0 and $break_location)
Er staat namelijk geen ; achter.

Maar omdat ik dus niet wil gaan rotzooien in iets wat ik toch al maar half tot niet snap, leg ik het eerst even hier voor. Is mijn gedachte goed, of weet iemand wat de fout wél is?

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: zo 08 jul 2007, 23:51
door Nvt
PdeJongh schreef:Nu vermoed ik dat de fout in deze regel zit:

<!--c1-->

Code: Selecteer alles


if ( logische uitlating)

{

    opdracht ;

}

Dus dan hoeft daar ook geen ; te staan.

Nogmaals ik heb geen verstand van dat taaltje, maar als het een deling door nul is en de plaats welke je aangegeven

hebt is goed, dan gok ik dat: $i%$break_location == 0 betekend: i modulo break_location.

Tevens gok ik dat break_location dan op een bepaald moment 0 is waardoor je die deling door 0 krijgt.

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 00:19
door Nvt
Nog een gissing :D

Boven in de code staat dit:

function insertSmilies($insert_location, $break_location = FALSE, $admincp = FALSE, $wysiwyg = FALSE)

$break_location = false.

false in een waarde uitgedrukt is normaal 0. Dus het zou goed kunnen dat daar staat: i modulo 0.

Ik zal het je nog sterker vertellen, volgens mij is dat stukje code onnodig interessant doen.

$break_location = FALSE (staat boven in).

if($i%$break_location == 0 and $break_location) // dit is logisch And waardoor de evaluatie altijd op FALSE uitkomt.

Ben benieuwd of iem. weet wat er aan de hand is

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 10:58
door Ger
Ik snap niet waarom dit gecomment staat:

Code: Selecteer alles

//

   $advanced_smile = "<img alt=\':$smile:\' src=\'data/emoticons/$smile.gif\' />";

  //

 $output .= "<a href=# onclick=\"java script:InsertIntoArea
Heb je dat zelf gedaan of niet?

Je kan eens proberen om die comments (twee slashes aan het begin van de regel) weg te halen. Als iets gecomment staat dan doet de browser er niets mee.

Verder altijd handig om te weten: Had je dit probleem direct na de schone installatie of nadat je zelf eea hebt gewijzigd? En in dat geval: wat heb je gedaan vlak voordat het probleem optrad?

Heb je trouwens een scripteditor of bekijk je het in kladblok? Een scripteditor (zoals bijvoorbeeld de open source Crimson Editor) is handig bij dit soort problemen omdat die automatisch aangeeft of een stukje code goed is of niet. Indien het goed is krijgt het een bepaalde kleur (zoals bijvoorbeeld comments die groen worden). Geeft je meteen een overzicht.

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 14:32
door PdeJongh
Ger schreef:Ik snap niet waarom dit gecomment staat:

Code: Selecteer alles

//

   $advanced_smile = "<img alt=\':$smile:\' src=\'data/emoticons/$smile.gif\' />";

  //

 $output .= "<a href=# onclick=\"java script:InsertIntoArea
Heb je dat zelf gedaan of niet?
Ik het zelf niets in het bestand zitten doen, omdat ik het dan alleen maar erger maak.
Je kan eens proberen om die comments (twee slashes aan het begin van de regel) weg te halen. Als iets gecomment staat dan doet de browser er niets mee.
Zal het zometeen eens proberen :D
Verder altijd handig om te weten: Had je dit probleem direct na de schone installatie of nadat je zelf eea hebt gewijzigd? En in dat geval: wat heb je gedaan vlak voordat het probleem optrad?
Ik heb na de installatie niets veranderd.
Heb je trouwens een scripteditor of bekijk je het in kladblok? Een scripteditor (zoals bijvoorbeeld de open source Crimson Editor) is handig bij dit soort problemen omdat die automatisch aangeeft of een stukje code goed is of niet. Indien het goed is krijgt het een bepaalde kleur (zoals bijvoorbeeld comments die groen worden). Geeft je meteen een overzicht.
Ik gebruik gewoon kladblok, maar zal wel eens zoeken naar dat programma :D

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 15:04
door PdeJongh
Ger schreef:Ik snap niet waarom dit gecomment staat:

Code: Selecteer alles

//					   $advanced_smile = "<img alt=\':$smile:\' src=\'data/emoticons/$smile.gif\' />";

  //					 $output .= "<a href=# onclick=\"java script:InsertIntoArea
Heb je dat zelf gedaan of niet?

Je kan eens proberen om die comments (twee slashes aan het begin van de regel) weg te halen. Als iets gecomment staat dan doet de browser er niets mee.
Het het getest, maar haalt niks uit. Resultaat blijft hetzelfde, namelijk die foutmelding. Ik ga even op zoek naar dat programma en hopelijk kan ik daar dan de precieze fout uithalen.

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 15:22
door DePurpereWolf
Ik gebruik al sinds jaar en dag ConTEXT editor, ook erg goed, en je kan er alles in editten. Load maar eens heel snel down.

Ik heb inderdaad ook moeite met

Code: Selecteer alles

if($i%$break_location == 0 and $break_location)
Als immers break_location false is, dan lijkt mij dat de modulo operatie niet kan werken.

Ik had liever iets gezien als

if ($break_location == true and $i%$break_location == 0)

Volgens mij word het namelijk van links naar rechts bekeken.

Je kan er ook twee if's van maken, helemaal veilig.

if ($break_location == true)

{ if ($i%$break_location == 0)

{ expression }

}

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 16:23
door PdeJongh
Het openen in Crimson Editor levert de volgende kleurencontrole op (zelfde stuk als hierboven):
function insertSmilies($insert_location, $break_location = FALSE, $admincp = FALSE, $wysiwyg = FALSE)

{
global $config_http_script_dir, $config_smilies;
$smilies = explode(",", $config_smilies);
foreach($smilies as $smile)

{

$i++; $smile = trim($smile);
if($admincp){
if($wysiwyg{
//
$advanced_smile = "<img alt=\':$smile:\' src=\'data/emoticons/$smile.gif\' />";

// $output .= "<a href=# onclick=\"java script:InsertIntoArea('$insert_location','$advanced_smile'); return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";
$output .= "<a href=# onclick=\"document.getElementById('$insert_location').contentWindow.document.execCommand('InsertImage', false, '$config_http_script_dir/data/emoticons/$smile.gif'); return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";
}

else{ $output .= "<a href=# onclick=\"java script:document.getElementById('$insert_location').value += ' :$smile:'; return false;\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>"; }
}else{
$output .= "<a href=\"java script:insertext(':$smile:','$insert_location')\"><img style=\"border: none;\" alt=\"$smile\" src=\"$config_http_script_dir/data/emoticons/$smile.gif\" /></a>";
}
if($i%$break_location == 0 and $break_location)

{
$output .= "<br />";
}else{ $output .= " "; }
}
return $output;
}
Pff, wat een werk. Heb het zoveel mogelijk geprobeerd goed te zetten zoals het stuk hierboven, dus hoop dat er een beetje doorheen te lezen valt.

Ziet iemand de fout?

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 16:37
door Ger
Haha, dát had nou ook weer gehoeven. :D

Ik ga er vanuit dat iedereen die kennis heeft van PHP ook wel een scripteditor zal hebben en dan is het een kwestie van copy-paste. De tip van Crimson Editor was puur voor jou in de toekomst. :D

Maar goed, het is weer bezigheidstherapie voor je, en je hebt nu een leuke scripteditor op je computer staan. :D

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 18:30
door Nvt
Heb je ook al geprobeerd om $break_location = FALSE te veranderen in $break_location = TRUE?

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: ma 09 jul 2007, 19:17
door PdeJongh
Haha, dát had nou ook weer gehoeven. :D
Een mens moet wat doen :D
Heb je ook al geprobeerd om $break_location = FALSE te veranderen in $break_location = TRUE?
Helaas, helpt ook niet :D

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: di 10 jul 2007, 13:53
door Cycloon
DePurpereWolf schreef:Als immers break_location false is, dan lijkt mij dat de modulo operatie niet kan werken.

Ik had liever iets gezien als

if ($break_location == true and $i%$break_location == 0)

Volgens mij word het namelijk van links naar rechts bekeken.
Eigelijk maakt het geen zak uit voor de uitkomst, alleen maar om een beetje CPU kracht te besparen, en je zal normaal nog steeds dezelfde foutmelding krijgen. Maar ik weet niet of PHP lazy evaluation toepast. C++ e.d. doen dat zeker wel.

Nuja de fout:

$i%$break_location kan natuurlijk nooit iets degelijks opleveren. $break_location is een bool die namelijk de waarde heeft TRUE (1) of FALSE (0). Bij TRUE zou je eigelijk achter elke letter een <br> plaatsen, en bij FALSE krijg je natuurlijk een deling door 0.

Dus de code die daar gebruikt wordt is gewoon heel raar.

Wat zeker geen problemen zal opleveren is iets in dit genre:

Code: Selecteer alles

	if($i%$break_location == 0 and $break_location)

{

$output .= "<br />";

}else{ $output .= " "; }
Vervangen door:

Code: Selecteer alles

if($break_location) {

 if($break_location>1 && $i%$break_location == 0) $output .= "<br />";

 else $output .= " ";

}

else{ $output .= " "; }

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: wo 11 jul 2007, 13:51
door Nvt
Misschien kan je proberen om alles tussen die functie, commentaar te maken.

Tussen de begin accolade en eind accolade alles voorzien van twee slashen: //

Met uizondering van het return statemanent:

return $output;

daar maak je van

return null; of return " ";

Dan wordt er niets uitgevoerd in die functie en er wordt iets zinnigs terug gegeven

aan de aanroep van die functie.

Want: else{ $output .= " "; }, staat onder in de code.

Re: [sitebuilding] foutmelding in cutenews

Geplaatst: wo 11 jul 2007, 19:51
door PdeJongh
Cycloon schreef:Nuja de fout:

$i%$break_location kan natuurlijk nooit iets degelijks opleveren. $break_location is een bool die namelijk de waarde heeft TRUE (1) of FALSE (0). Bij TRUE zou je eigelijk achter elke letter een <br> plaatsen, en bij FALSE krijg je natuurlijk een deling door 0.

Dus de code die daar gebruikt wordt is gewoon heel raar.

Wat zeker geen problemen zal opleveren is iets in dit genre:

Code: Selecteer alles

	if($i%$break_location == 0 and $break_location)

{

$output .= "<br />";

}else{ $output .= " "; }
Vervangen door:

Code: Selecteer alles

if($break_location) {

 if($break_location>1 && $i%$break_location == 0) $output .= "<br />";

 else $output .= " ";

}

else{ $output .= " "; }
Je bent geweldig!!! Nu is het probleem opgelost pi.gif