mboost-dp1
PHP - Unknown error
- Forside
- ⟨
- Forum
- ⟨
- Programmering
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:
Men når jeg bruger denne kode er der ingen error:
Så det er det her der er noget galt med:
Fra linje 19 til linje 22...
Nogle der kan se fejlen?
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?
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.
#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
Så bliver $i aldrig incrementeret, og derfor forbliver
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.
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.
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);
#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)
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)
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.