Avatar billede tingholm Mester
22. september 2006 - 01:53 Der 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 ?
Avatar billede nielle Nybegynder
22. september 2006 - 06:52 #1
Må vi se noget kode? Og hvad er det for en "bestemt værdi" at det går galt?
Avatar billede tingholm Mester
22. september 2006 - 13:36 #2
<form name="addprod" method="post" action="addcat2.php">
<table cellspacing="0" cellpadding="2" class="normal">
  <tr><td><font>Navn:</font></td><td><input type="text" name="navn"></td></tr>
  <tr><td><font>Placeres som:</font></td><td><input type="radio" name="place" value="child"><font>Første underpunt til...</font><br /><input type="radio" name="place" value="under"><font>Som søskende, lige efter...</font></td></tr>
  <tr><td>&nbsp;</td><td><input type="submit" name="Send" value="Tilføj"></td></tr>
  </form>
Avatar billede tingholm Mester
22. september 2006 - 13:37 #3
når jeg sætter radio til "under" går det galt... men siden det ikke er php-parseren der giver en fejl undrer det mig meget...
Avatar billede nielle Nybegynder
22. september 2006 - 18:18 #4
Jeg kan nok ikke hjælpe ret meget uden også at se den PHP-kode hvor det fejler.
Avatar billede tingholm Mester
22. september 2006 - 22:11 #5
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;
}
Avatar billede tingholm Mester
22. september 2006 - 22:12 #6
//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();
  }
Avatar billede nielle Nybegynder
23. september 2006 - 07:21 #7
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:

$sidste = substr($_POST['cat'], -2) + 1;

(som du gør hvis man vælger "under").
Avatar billede nielle Nybegynder
03. oktober 2006 - 08:57 #8
Hvad med noget respons?
Avatar billede tingholm Mester
03. oktober 2006 - 21:19 #9
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 !
Avatar billede nielle Nybegynder
03. oktober 2006 - 21:24 #10
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.
Avatar billede tingholm Mester
03. oktober 2006 - 21:27 #11
her er hele form'en:
  <form name="addprod" method="post" action="addcat2.php">
  <table cellspacing="0" cellpadding="2" class="normal">
  <tr class="header"><td colspan="2"><center><h1>Tilføj ny varegruppe</h1></center></td></tr>
  <tr><td class="option"><font>Navn:</font></td><td><input type="text" name="navn" class="text"></td></tr>
  <tr><td class="option"><font>Placeres som:</font></td><td><input type="radio" name="place" value="child"><font>Første underpunt til...</font><br /><input type="radio" name="place" value="under"><font>Som søskende, lige efter...</font></td></tr>
  <tr><td class="option">Placeres i:</td><td><select name="cat" class="text"><option value="">Vælg herunder</option>
  <?php
    while ($row = mysql_fetch_array($result)) {
    $array = explode("-", $row['kategori']);
    $navn = $row['navn'];
    for($a = 1; $array[$a] != ""; $a = $a+1) { $navn = "&nbsp;&nbsp;".$navn; $b = $a; }

    echo "<option value=\"".$row['kategori']."\">".$navn."</option>";
    }
  ?></select></td></tr>
  <tr><td>&nbsp;</td><td><input type="submit" name="Send" value="Tilføj"></td></tr>
  </form>
Avatar billede nielle Nybegynder
03. oktober 2006 - 21:33 #12
Men det er vel ikke den kode som fejler?
Avatar billede tingholm Mester
03. oktober 2006 - 21:35 #13
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();
  }
?>
Avatar billede tingholm Mester
03. oktober 2006 - 21:37 #14
nej, det er dokumentet som indeholder min function ryk() og koden som jeg har skrevet lige efter, som bruger ryk() rekursivt !
Avatar billede nielle Nybegynder
03. oktober 2006 - 21:44 #15
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.
Avatar billede tingholm Mester
03. oktober 2006 - 21:50 #16
Sender: http://pastebin.dk/index.php?show=2191
behandler: http://pastebin.dk/index.php?show=2192

Det er "behandler" den er gal med... men KUN når jeg sætter radio "place" til værdien "under"
Avatar billede tingholm Mester
03. oktober 2006 - 21:53 #17
<?php echo substr($_POST['cat'], -2) + 1; ?>
indsat på en side som ikke modtager noget som helst i POST udskriver: "1"
Avatar billede nielle Nybegynder
03. oktober 2006 - 21:56 #18
Det er denne her blok kode det drejer sig om:

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

Når du vælger "under" og "cat" ikke er sat til noget, er det else-delen som udføres:

        $sidste = substr($_POST['cat'], -2)+1;
        $ny_plads = substr($_POST['cat'], 0, -2).$sidste;

Det er så her at regnestykket:

        $sidste = substr($_POST['cat'], -2)+1;

- kommer ind i sammenhængen. Hvis det giver en runtime-fejl, så får du netop en "siden kan ikke vises".

Derfor skal vi starte med at rydden denne mulige fejlkilde af vejen.
Avatar billede nielle Nybegynder
03. oktober 2006 - 21:58 #19
03/10-2006 21:53:32> Og hvad sker der hvis du prøver med:

        $sidste = substr($_POST['cat'], -2)+1;
        $ny_plads = substr($_POST['cat'], 0, -2).$sidste;
        echo $ny_plads;

- på samme måde?
Avatar billede tingholm Mester
05. oktober 2006 - 20:30 #20
jeg lavede lige:
if($_POST['navn'] == "" || $_POST['cat'] == "") die();
og satte ind før det kode du omtaler... det ændrer intet...

hvis jeg kommenterer det regnestykke du taler om væk ændrer det heller ikke noget...

Bliver jeg godt nok nød til at kommentere noget kode væk, og derved finde hvilken kode der skaber problemet??
Avatar billede tingholm Mester
12. januar 2007 - 07:19 #21
kan ikke huske hvad dette endte med... men det er sikkert dig nielle der skal have pointsene... smider du et svar?
Avatar billede nielle Nybegynder
14. januar 2007 - 09:06 #22
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester