mboost-dp1

PHP - Unknown error


Gå til bund
Gravatar #1 - kasperbjerby
2. okt. 2010 22:50
Gå her ind: http://skolen.daap.dk/?side=Butik
Tryk så "Tilføj til indkøbskurv" (Lige meget hvilken en af dem)
Tryk så "Fjern"

!!!Internal Server Error!!!

Eller det får jeg i hvert fald...

Jeg bruger denne kode:
				$i = 1;
$o = 0;
while($o == 0)
{
echo $i;
if(isset($_SESSION["indkøbskurv"][$i]))
{
if($i != $_GET["fjern"])
{
$p[$i]["navn"] = $_SESSION["indkøbskurv"][$i]["navn"];
$p[$i]["antal"] = $_SESSION["indkøbskurv"][$i]["antal"];
$p[$i]["pris"] = $_SESSION["indkøbskurv"][$i]["pris"];
}
}
else
{
$o = 1;
}
if($i != $_GET["fjern"])
{
$i = $i+1;
}
}
unset($_SESSION["indkøbskurv"]);
$i = 1;
$o = 0;
while($o == 0)
{
if(isset($p[$i]))
{
if($i != $_GET["fjern"])
{
$_SESSION["indkøbskurv"][$i]["navn"] = $p[$i]["navn"];
$_SESSION["indkøbskurv"][$i]["antal"] = $p[$i]["antal"];
$_SESSION["indkøbskurv"][$i]["pris"] = $p[$i]["pris"];
}
}
else
{
$o = 1;
}
if($i != $_GET["fjern"])
{
$i = $i+1;
}
}
unset($p);


Men når jeg bruger denne kode er der ingen error:
				$i = 1;
$o = 0;
while($o == 0)
{
echo $i;
if(isset($_SESSION["indkøbskurv"][$i]))
{
if($i != $_GET["fjern"])
{
$p[$i]["navn"] = $_SESSION["indkøbskurv"][$i]["navn"];
$p[$i]["antal"] = $_SESSION["indkøbskurv"][$i]["antal"];
$p[$i]["pris"] = $_SESSION["indkøbskurv"][$i]["pris"];
}
}
else
{
$o = 1;
}
$i = $i+1;
}
unset($_SESSION["indkøbskurv"]);
$i = 1;
$o = 0;
while($o == 0)
{
if(isset($p[$i]))
{
if($i != $_GET["fjern"])
{
$_SESSION["indkøbskurv"][$i]["navn"] = $p[$i]["navn"];
$_SESSION["indkøbskurv"][$i]["antal"] = $p[$i]["antal"];
$_SESSION["indkøbskurv"][$i]["pris"] = $p[$i]["pris"];
}
}
else
{
$o = 1;
}
if($i != $_GET["fjern"])
{
$i = $i+1;
}
}
unset($p);

Så det er det her der er noget galt med:
					if($i != $_GET["fjern"])
{
$i = $i+1;
}

Fra linje 19 til linje 22...

Nogle der kan se fejlen?
Gravatar #2 - milandt
2. okt. 2010 22:53
kan du ikke få en mere detaljeret fejlbesked hvis du prøver at køre det lokalt?
Gravatar #3 - kasperbjerby
2. okt. 2010 22:54
Error skrev:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Gravatar #4 - Windcape
3. okt. 2010 09:10
#3

Du kan jo passende starte med at læse en grundlæggende tutorial i PHP. Og så måske lære hvad booleans er.

Uden at kigge din kode igennem i detaljer, vil jeg gætte på at din løkke er uden ende. Og det er godt nok dårlig kvalitet kode.

Fordi hvis denne her if-clause ikke lykkes


if ($i != $_GET["fjern"])
{
$i = $i + 1;
}


Så bliver $i aldrig incrementeret, og derfor forbliver


$_SESSION["indkøbskurv"][$i]


det samme hele tiden. Hvilket vil sige, at hvis den er true første gang, så bliver $o aldrig sat til 0, og derfor ender din løkke aldrig.

Det resultere så i en omgang stack overflow.
Gravatar #5 - onetreehell
3. okt. 2010 09:59
#4
Hvorfor kommer der stack overflow, siger du?
Gravatar #6 - Cloud02
3. okt. 2010 10:32
DUDE
Lær at indente din kode.
edit: jeg kan se at det nok nærmere er newz formatteringen der har fucket det op. Sorry.
Gravatar #7 - kasperbjerby
3. okt. 2010 11:56
#3 Hvorfor viker den selv samme kode så længere nede?
Gravatar #8 - kasperbjerby
3. okt. 2010 12:21
Har fået det til og virke med denne kode:
				$i = 0;
while($i != count($_SESSION["indkøbskurv"]))
{
$i = $i+1;
echo $i;
if($i != $_GET["fjern"])
{
if(isset($l))
{
$p[$l]["navn"] = $_SESSION["indkøbskurv"][$i]["navn"];
$p[$l]["antal"] = $_SESSION["indkøbskurv"][$i]["antal"];
$p[$l]["pris"] = $_SESSION["indkøbskurv"][$i]["pris"];
unset($l);
}
else
{
$p[$i]["navn"] = $_SESSION["indkøbskurv"][$i]["navn"];
$p[$i]["antal"] = $_SESSION["indkøbskurv"][$i]["antal"];
$p[$i]["pris"] = $_SESSION["indkøbskurv"][$i]["pris"];
}
}
else
{
$l = $i;
}
}
unset($_SESSION["indkøbskurv"]);
$i = 0;
while($i != count($p)+1)
{
$i = $i+1;
if(isset($p[$i]))
{
$_SESSION["indkøbskurv"][$i]["navn"] = $p[$i]["navn"];
$_SESSION["indkøbskurv"][$i]["antal"] = $p[$i]["antal"];
$_SESSION["indkøbskurv"][$i]["pris"] = $p[$i]["pris"];
}
}
unset($p);
Gravatar #9 - Windcape
3. okt. 2010 17:13
onetreehell (5) skrev:
Hvorfor kommer der stack overflow, siger du?
Fordi hans løkke aldrig ender. Det er en af de mest typiske grunde til stack overflow.
Gravatar #10 - Windcape
3. okt. 2010 17:14
kasperbjerby (7) skrev:
#3 Hvorfor viker den selv samme kode så længere nede?
Fordi der incrementere du altid $i.

Læste du overhovedet hvad jeg skrev i #4 ?
Gravatar #11 - onetreehell
3. okt. 2010 18:32
#9
Måske hvis man implementerede løkker med rekursion uden tail call optimization.

Jeg vil påstå at while løkker nærmest aldrig er grunden til stack overflow.

EDIT:
hyppige årsager til stack overflow:
- For meget rekursion
- For mange tråde (som skal have hvert sit stak-afsnit som også skal kunne vokse)
Gravatar #12 - arne_v
4. okt. 2010 16:39
Windcape (9) skrev:
Fordi hans løkke aldrig ender. Det er en af de mest typiske grunde til stack overflow.


BS

onetreehell (11) skrev:

- For meget rekursion


Yes.

onetreehell (11) skrev:
- For mange tråde (som skal have hvert sit stak-afsnit som også skal kunne vokse)


Ikke så hyppig igen.

Der skal rigtigt mange tråde til. Med standard Windows størrelse en 1500-2000. Med SUN Java 32 bit Windows en 4500-6000. Selv uden stack problemer ville det køre ad h til.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login