martin: Variable übergabe Fehler - Sortierfunktion

Hallo,

ich habe ein Problem ich möchte mein Navigations Menü sortieren aber meine Variable wird einfach nicht übergeben :-( ?

Also ich habe folgenden Code:

-------------

<?php include "inc/head.inc.php"; ?>

<?php

$dbh = getConn();
$rs = mysql_query("SELECT mid, menu, sort FROM menu
      ORDER BY sort ASC ", $dbh) or die('An error occured index: ' . mysql_error());
mysql_close($dbh);

if (!mysql_num_rows($rs))
 {
   echo $warning_no_site_found;
 }
 else
 {
 ?>
 <table width="100%" border="0" cellspacing="0" cellpadding="0"> <?php
   while ($row = mysql_fetch_assoc($rs))
  {?>
  <form method="post" action="./sort.php?op=sort_up&sort=<?php echo "$sort"; ?>&m=<?=$m = $row['mid']?>">
  <tr>
    <td><?php echo $row['menu']; ?></td>
    <td><?php echo $row['sort']; ?></td>
 <td>mid= <?php echo $row['mid']; ?></td>
 <td>
 <?php $sort = $row['sort'];
  ?>
  <input   name="submit_sortieren_up" type="image"  src="img/menu_up.gif" alt="up" align="top" width="20" height="20" border="0">
 </form>

<form method="post" action="./sort.php?op=sort_down&sort=<?=$sort?>">
 <input   name="submit_sortieren_down" type="image"  src="img/menu_down.gif" alt="down" align="top" width="20" height="20" border="0">
</form>
  </td>
  </tr>

<?php
     }
  ?> </table> <?php
}

function sort_up($sort,$m)
{
//$dbh = getConn();
//$rs_sort = mysql_query("SELECT sort FROM menu WHERE mid='$m'", $dbh) or die('An error occured index: ' . mysql_error());
//mysql_close($dbh);

echo "sort= ".$sort;
 echo $sortneu;
 echo $sorttausch;
 echo "<br>m= ".$m;

$dbh = getConn();  //get a connection

$rs = mysql_query("SELECT menu, sort FROM menu
      ORDER BY sort ASC ", $dbh) or die('An error occured index: ' . mysql_error());
   mysql_close($dbh);

if(isset($submit_sortieren_up_x))
 {

$sortneu = $sort + 1;
 $sorttausch = $sort - 1;
 //// Menue Update //////////////////////
 mysql_query("UPDATE sort SET sort='$sortneu'");
 mysql_query("UPDATE sort SET sort='$sorttausch'");
 }

}

function menu_sort_down($sort)
{
echo "menu_sort_down()";

}

function start()
{
 echo'start';
}
/* --------------------------------------------------------------------------  */
switch ($op){

case "sort_up":
sort_up($sort,$m);
break;

case "sort_down":
menu_sort_down($sort);
break;

default:
start();
break;
}
/* --------------------------------------------------------------------------  */
?>

-------------

Das Problem ist nun wenn ich nun zB. auf den Button (2 - Wir über uns) "up" klicke wird mir zwar im Browser die richtige URI angezeigt
(sort.php?op=sort_up&sort=1&m=46)

Aber in der Ausageb wo ich später im Code $sort und $m Aufrufe kommt:

sort= 5
m= 49

Also die Komplette Ausagabe sieht bei mir so aus:
-------------------------------------------------

Leistungen      1        mid= 46         [up button] [down button]

Wir über uns    2        mid= 45         [up button] [down button]

Referenzen      3        mid= 47         [up button] [down button]

Immobilien      4        mid= 48         [up button] [down button]

Kontakt         5        mid= 49         [up button] [down button]

sort= 5
m= 49

Ich verstehe nicht warum mir beim klick oder schon beim erst Aufruf immer der letzte Wert wiedergegeben wird? Wo liegt hier der Fehler?

  1. Hallo,

    <?php include "inc/head.inc.php"; ?>

    include("inc/head.inc.php"); wäre wohl besser

    Ich bin mir nicht sicher da ich nicht den ganzen Code durchgelesen habe - aber solltest du vielleicht auf übergebene Variablen mit $_GET und $_POST zugreifen?
    http://de2.php.net/manual/de/security.registerglobals.php

    cu Benedikt Loepp

    --
    visite http://www.webocton.de - Aufträge erwünscht :-)
    1. hi,

      <?php include "inc/head.inc.php"; ?>
      include("inc/head.inc.php"); wäre wohl besser

      nein - include/require sind keine funktionen, erfordern deshalb auch keine klammern um das "argument".

      gruss,
      wahsaga

      1. Hallo,

        schon klar - bei echo kanns mans ja auch mit oder ohne Klammern schreiben, obwohl ich persönlich include mit Klammern vorziehe :)

        cu Benedikt Loepp

        1. hi,

          schon klar - bei echo kanns mans ja auch mit oder ohne Klammern schreiben, obwohl ich persönlich include mit Klammern vorziehe :)

          aber warum schreibst du dann hin, das es mit klammern _besser_ wäre - wenn dies lediglich deine persönliche präferenz ist?

          gruss,
          wahsaga

  2. hi,

    Ich verstehe nicht warum mir beim klick oder schon beim erst Aufruf immer der letzte Wert wiedergegeben wird?

    so wie ich das sehe, überschreibst du hier

    <?php $sort = $row['sort'];

    $sort immer wieder mit dem wert, den du aus der DB ausliest. am ende der umschliessenden while-schleife steht $sort also auf dem letzten wert, der aus der DB kam.

    gruss,
    wahsaga

    1. hi,

      Ich verstehe nicht warum mir beim klick oder schon beim erst Aufruf immer der letzte Wert wiedergegeben wird?
      so wie ich das sehe, überschreibst du hier
      <?php $sort = $row['sort'];
      $sort immer wieder mit dem wert, den du aus der DB ausliest. am ende der umschliessenden while-schleife steht $sort also auf dem letzten wert, der aus der DB kam.

      gruss,
      wahsaga

      aber wenn ich den up button "Wir über uns" wird mir in der URI ja schon der richtige Wert übergeben.

      sort.php?op=sort_up&sort=1&m=45

      und sort und m wird doch in meiner funktion beim senden übergeben
      aber warum wird mir dann was ganz andres übergeben???

      ich kriege dann nur noch die letzten werte zurück.

      verstehe ich nun nicht wirklich?

      gruss martin

      1. hi,

        aber wenn ich den up button "Wir über uns" wird mir in der URI ja schon der richtige Wert übergeben.
        sort.php?op=sort_up&sort=1&m=45
        und sort und m wird doch in meiner funktion beim senden übergeben
        aber warum wird mir dann was ganz andres übergeben???
        ich kriege dann nur noch die letzten werte zurück.

        mag sein, dass dein script beim aufruf über sort.php?op=sort_up&sort=1&m=45 zunächst einmal die variable $sort mit dem wert 1 belegt hat.

        dann kommt jedoch deine datenbank-abfrage und deren auswertung in der while-schleife,
        while ($row = mysql_fetch_assoc($rs))
          {?>
          <form ...>
         <?php $sort = $row['sort'];
          ?>
          <input ...>
         </form>

        hier wird der inhalt von $sort bei jedem durchlauf überschrieben - das danach nicht mehr der anfangswert drin steht, ist doch wohl hoch wahrscheinlich (in anbhängigkeit von den daten aus der DB natürlich).

        gruss,
        wahsaga