22. september 2006 - 01:53Der er
21 kommentarer og 1 løsning
Siden kan ikke vises
en side der skal håndtere noget input fra en <form>... når jeg sætter min <input type="radio"> til en bestemt værdi kommer "Siden kan ikke vises..." den kommer lyn-hurtigt, så det er ikke min rekursion der ryger i en uendelig løkke... Nogen idéer ?
function ryk($kat_rykkes, $niv) { //finder ny plads til kat_rykkes $kat_array = explode("-", $kat_rykkes); $kat_array[$niv] = $kat_array[$niv]+1; if (substr($kat_array[$niv], -2, -1) == "0") { $sidste = substr($kat_array[$niv], -1)+1; $kat_array[$niv] = substr($kat_array[$niv], 0, -1).$sidste; } else { $sidste = substr($kat_array[$niv], -2)+1; $kat_array[$niv] = substr($kat_array[$niv], 0, -2).$sidste; } $ny_plads = implode("-", $kat_array);
//kontrollerer at alle klynger er 2 cifre $kat_array = explode("-", $kat_rykkes); foreach ($kat_array as $value) { if (strlen($value) == 1) $value = "0".$value; } $ny_plads = implode("-", $kat_array);
//ser om ny plads er taget $sql = "SELECT * FROM `kategori` WHERE `kategori` = '".$ny_plads."'"; $result = mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); } if (mysql_num_rows($result) > 0) $taget= true;
//Hvis den er taget kald rekursion if ($taget) ryk($ny_plads, $niv);
//Ryk op på den nye plads $sql = "UPDATE `kategori` SET `kategori` = '".$ny_plads."' WHERE `kategori` = '".$kat_rykkes."' LIMIT 1"; mysql_query($sql);
//Ryk underkategorier $nystart = $ny_plads; $len = strlen($nystart)+1; $sql = "UPDATE `kategori` SET `kategori` = CONCAT('".$nystart."',SUBSTRING(`kategori`,".$len.")) WHERE `kategori` LIKE '".$nystart."%' OR `kategori` = '".$nystart."'"; mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); }
//Ryk produkter $len = strlen($nystart)+1; $sql = "UPDATE `produkter` SET `kategori` = CONCAT('".$nystart."',SUBSTRING(`kategori`,".$len.")) WHERE `kategori` LIKE '".$nystart."%' OR `kategori` = '".$nystart."'"; mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); } return true; }
//hvis nye kategori er child sættes blot '-01' efter for at finde ny kat-kode if ($_POST['place'] == "child") $ny_plads = $_POST['cat']."-01";
//hvis nye kategori skal på som søskende, tages den sidste gruppe og tælles op med én if ($_POST['place'] == "under") { if (substr($_POST['cat'], -2, -1) == "0") { $sidste = substr($_POST['cat'], -1)+1; $ny_plads = substr($_POST['cat'], 0, -1).$sidste; } else { $sidste = substr($_POST['cat'], -2)+1; $ny_plads = substr($_POST['cat'], 0, -2).$sidste; } }
//Ser efter om ønskede plads er optaget $sql = "SELECT * FROM `kategori` WHERE `kategori` = '".$ny_plads."'"; $result = mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); }
//hvis pladsen er optaget rykkes der rekursivt $array = explode("-", $ny_plads); if (mysql_num_rows($result) > 0) ryk($ny_plads, count($array)-1);
//den nye kategori sættes ind $sql = "INSERT INTO `kategori` (`kategori`, `navn`) VALUES ('".$ny_plads."', '".$_POST['navn']."')"; mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); }
Er HTML-koden i din formular fra 22/09-2006 13:36:25 komplet? For der er ikke noget input-felt for "cat" og derfor giver det ikke mening at lave sådan nogle regnestykkker som:
hov... undskyld, havde kommet til at slette mailen om at du havde kommenteret...
Den er ikke komplet... der er også en der hedder 'cat'... men om der så ikke var ville man jo sagtens kunne: $sidste = substr($_POST['cat'], -2) + 1; det ville jo være det samme som: $sidste = substr("", -2) + 1; (og give: "") Det der undrer mig er at det IKKE er php der kommer med en fejl... så havde der jo været et hint om hvor jeg skulle lede efter fejl !
Det behøver altså ikke at være parseren som giver en fejl ... fejlen kan godt være i PHP alligevel. Men det er så bare en runtime fejl i stedet for en compile-time fejl. Sådan noget som regnestykker som ikke er lovlige vil f.eks. give runtime fejl.
Selv om du ikke mener at det er den manglende cat som er skurken, så skal den under alle omstændigheder rettes, og vi kan lige så goidt starte der.
og den forudgående php til at hente fra db: <?php $sql = 'SELECT `kategori`, `navn` FROM `kategori` ORDER BY `kategori`'; $result = mysql_query($sql); if (mysql_error() != "") { echo "<b>MySql error: </b>".mysql_error(); echo "<br /><b>SQL: </b>".$sql."</td></tr></table>"; include("footer.php"); die(); } ?>
Jeg synes at vi skal starte med at kigge på regnestykket for 23/09-2006 07:21:02 so sikre at det giver noget fornuftigt selv om der ikke er noget cat-felt i formularen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.