Variable übergabe Fehler - Sortierfunktion
martin
- php
0 Benedikt Loepp0 wahsaga
0 wahsaga
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?
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
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
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
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
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
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
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