Springen naar inhoud

[sitebuilding] foutmelding in cutenews


  • Log in om te kunnen reageren

#1

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 08 juli 2007 - 20:03

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:
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:

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:

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?
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2


  • Gast

Geplaatst op 08 juli 2007 - 22:51

[quote name='PdeJongh' post='327714']Nu vermoed ik dat de fout in deze regel zit:

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.

#3


  • Gast

Geplaatst op 08 juli 2007 - 23:19

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

#4

Ger

    Ger


  • >5k berichten
  • 16444 berichten
  • Technicus

Geplaatst op 09 juli 2007 - 09:58

Ik snap niet waarom dit gecomment staat:
//					   $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.
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -

#5

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 09 juli 2007 - 13:32

Ik snap niet waarom dit gecomment staat:

//					   $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
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...

#6

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 09 juli 2007 - 14:04

Ik snap niet waarom dit gecomment staat:

//					   $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.
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...

#7

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 09 juli 2007 - 14:22

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
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 }
}

#8

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 09 juli 2007 - 15:23

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?
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...

#9

Ger

    Ger


  • >5k berichten
  • 16444 berichten
  • Technicus

Geplaatst op 09 juli 2007 - 15:37

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
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -

#10


  • Gast

Geplaatst op 09 juli 2007 - 17:30

Heb je ook al geprobeerd om $break_location = FALSE te veranderen in $break_location = TRUE?

#11

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 09 juli 2007 - 18:17

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
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...

#12

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 juli 2007 - 12:53

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:

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


		$output .= "<br />";


}else{ $output .= " "; }

Vervangen door:

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

Veranderd door Cycloon, 10 juli 2007 - 13:05


#13


  • Gast

Geplaatst op 11 juli 2007 - 12:51

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.

#14

PdeJongh

    PdeJongh


  • >1k berichten
  • 2005 berichten
  • VIP

Geplaatst op 11 juli 2007 - 18:51

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:

if($i%$break_location == 0 and $break_location)
	{
		$output .= "<br />";
}else{ $output .= " "; }

Vervangen door:

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
...verhit de dichloormono-oxide tot 277 graden Celcius en geniet van het effect...





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures