[PHP+mySQL] Dynamische Links

name

Mitglied
Hi,
wenn man eine seite (z.B. index.php) hat, dann kann man ja darin verschiedene links definieren und dann sagen, wonach in einer mySQL Datenbank gesucht werden soll und was gezeigt werden soll, abhängig vom Link.

Ich benutzte dafür zur Zeit diesen Schnippsel:

# Anzeige Aerobic Montags
if ($sportsart!="aerobicmontag")

// der Link definiert sich als: index.php?SPORTART=AEROBICMONTAG...
das möchte ich gerne mit variablen ersetzen (z.B. index.php?SPORTART=$SPORTART&WOCHENTAG=&WOCHENTAG, oder irgendwie so, damit man nicht sämtlich mögliche Links auf meine jetztige Art definieren muss.


{echo""; } else {
$sqlab = "select * FROM sportarten where sportart='aerobic' and wochentag=montag";

//Hier könnte ich mir nämlich auch vorstellen dass es mit variablen möglich ist. Also aus 'aerobic' wird zum Beispiel: $sportart und aus 'montag' wird $wochentag.

echo"<center><br>
<TABLE id=\"tablea\" cellSpacing=\"0\" cellPadding=\"1\" width=\"95%\" border=\"0\">
<tr>
<td class=\"box\" align=\"center\" width=\"15%\">Sportsgren</td>
<td class=\"box\" align=\"center\" width=\"20%\">Titel</td>
<td class=\"box\" align=\"center\" width=\"5%\">Hold</td>
<td class=\"box\" align=\"center\" width=\"20%\">Ugedag</td>
<td class=\"box\" align=\"center\" width=\"15%\">Sted</td>
</tr>";

$res = mysql_query($sqlab, $db);
while($movie = mysql_fetch_object ($res)) { ?>
<tr <? if ($options->hover=="ja") { print "onmouseover=\"this.bgColor='$options->hovercolor1'"
."\"onMouseOut=\"this.bgColor='$options->hovercolor2'\""; } ?>>
<TD align="left"><? echo "<a href=javascript:detail('detail.php?id=$movie->id')> $movie->sportsgren</a>"; ?></TD>
<td align="center"><? echo "$movie->titel"; ?></td>
<td align="center"><? echo "$movie->hold"; ?></td>
<td align="center"><? echo "$movie->ugedag"; ?></td>
<TD align="center"><? echo "$movie->sted"; ?></TD></tr>
<? } echo "</TABLE></center>";
}

//das ist alles in Ordnung, denn das bestimmt wie die Seite aufgebaut und was angezeigt wird.

Ich weiss nur nicht wie ich diese Variablen (ich hoffe man nennt sie so) definieren soll, - oder was ich schreiben muss, damit dieser Schnippsel herausfindet dass das was nach SPORTART (bei z.B. index.php?sportart=aerobic) das ist, wonach er in der Tabelle Sportarten im Feld Sportart suchen soll. Man müsste das dann auch noch erweitern so dass der Link index.php?sportart=aerobic&wochentag=montag aussieht, und der Schnippsel herausfindet dass wenn wochentag kommt, er danach in der Tabelle Sportarten im Feld Wochentag suchen soll. Danach sollen alle Einträge die der Schnippsel gefunden hat gelistet werden...

Ich hoffe ihr habt verstanden wass ich meine und würde mich sehr über Antwort freuen
smile.gif
 
ok mein lieber, hier n kleiner einstieg.

CODE

$sportarten = array("aerobic","fussball","tennis");

foreach($sportarten as $currentSportart)
{
echo "<a href='index.php?sportarte=$currentSportart'>$currentSportart</a><br>";
}



das sollte weiterhelfen.
 
Hi, vielen Dank für deine schnelle und hilfreiche Antwort.
Das klappt auch eigentlich sehr gut, nur merkwürdiger weise definiert $currentSportart sich immer als den letzten wert vom array ($sportarten).
also ich erzähl mal kurz über meinen (beziehungsweise j0sh's
wink.gif
) code. Das ist so, dass man ja erst $sportarten als mehrere begriffe definiert, danach werden diese doch alle "einzeln" zu $currentSportart definiert (oder? So seh ich es zumindest)
und wenn man dann, wie ich es mache, mit einem Kommando (oder wie das heisst, ich zeige ihn gleich) bestimmt, dass wenn die URL der index.php-Seite z.b. "index.php?sportart=aerobic" lautet, dann muss in der Tabelle Sportarten im Feld Sportart nach aerobic gesucht werden und alle Einträge aufgelistet werden.

Eigentlich muss man sich ja nur das hier angucken (ausschnitt vom PHP-Script):

$sportarten = array("aerobic","ballet","walking");

foreach($sportarten as $currentSportart);


if ($sportart=$currentSportart) {echo"$currentSportart"; } else {
$sqlab = "select * FROM sportsgrene where sportsgren='$currentSportsgren'";
echo"<center><br>
<TABLE id=\"tablea\" cellSpacing=\"0\" cellPadding=\"1\" width=\"95%\" border=\"0\">
<tr>
<td class=\"box\" align=\"center\" width=\"15%\">Sportsgren</td>
<td class=\"box\" align=\"center\" width=\"20%\">Titel</td>
<td class=\"box\" align=\"center\" width=\"5%\">Hold</td>
<td class=\"box\" align=\"center\" width=\"20%\">Ugedag</td>
<td class=\"box\" align=\"center\" width=\"15%\">Sted</td>
</tr>";

$res = mysql_query($sqlab, $db);
while($movie = mysql_fetch_object ($res)) { ?>
<tr <? if ($options->hover=="ja") { print "onmouseover=\"this.bgColor='$options->hovercolor1'\""
."onMouseOut=\"this.bgColor='$options->hovercolor2'\""; } ?>>
<TD align="left"><? echo "<a href=javascript:detail('detail.php?id=$movie->id')> $movie->sportsgren</a>"; ?></TD>
<td align="center"><? echo "$movie->titel"; ?></td>
<td align="center"><? echo "$movie->hold"; ?></td>
<td align="center"><? echo "$movie->ugedag"; ?></td>
<TD align="center"><? echo "$movie->sted"; ?></TD></tr>
<? } echo "</TABLE></center>";
}

Ich hätte gedacht, dass jetzt in der Tabelle Sportarten im Feld sportart nach $currentSportart also der Sportart die man in der URL definiert hat gesucht wird... (oder nicht?)

Ich glaube ich hab irgendetwas falsch gemacht, weiss aber nicht was...
Ok, vielen Dank schonmal, cu Bjarne
 
CODE foreach($sportarten as $currentSportart);

erstmal hast du den foreach falsch verstanden. dies ist eine schleife, also musst du für jeden schleifendurchgang aktionen durchführen können. dies tust du in den dazugehörigen {}:

foreach($sportarten as $currentSportart)
{
// tue für jeden wert in $sportarten irgendetwas
}

so wie es in deinem code ist, wird einfach jeder wert aus $sportarten der variablen $currentSportart zugewiesen, ohne dass in einem {} body irgendwas geschehen würde. deshalb ist natürlich auch der schlussendliche wert von $currentSportart der letzte wert von $sportarten. kapiert?


CODE if ($sportart=$currentSportart) {echo"$currentSportart"; } else {...}

dies ist ein typischer anfängerfehler. der operator "=" weist nur werte zu, es ist KEIN vergleichsoperator! um werte zu vergleichen brauchst du "==" ! in deinem falle wird das resultat immer true sein, denn php versucht, der variable $sportart den inhalt von $currentSportart zuzuweisen, was ja natürlich immer funktioniert. und da in php (wie auch in c) alles true ist, was nicht 0 ist, ist die bedingung hier immer true. also, immer "==" verwenden!!!
smile.gif
 
Ok...
aber was muss ich jetzt machen, damit das so funktioniert wie ich meine?
Also: wenn man in den InternetExplorer die index.php?sportart=aerobic&wochentag=montag eintippt, möchte ich, dass automatisch in der mySQL Datenbank "DAN" in der Tabelle "Sportarten" im Feld "Sportart" nach aerobic gesucht wird und in der selben Datenbank und Tabelle aber dem Feld "Wochentag" nach montag gesucht wird und die Einträge inklusiver andere Felder dann in der index.php-Seite gelistet werden. Wie man das mit dem auflisten macht, habe ich bereits... nur muss ich das mit det URL irgendwie hinkriegen...

Oder geht das mit dem was du mir schon gegeben hast? Ich habe das auf jeden Fall leider noch nicht hingekriegt.

cu
Bjarne
 
Irgendwie mag ich deinen Code nicht lesen, sry, aber wie wärs so:

QUOTE lso: wenn man in den InternetExplorer die index.php?sportart=aerobic&wochentag=montag eintippt, möchte ich, dass automatisch in der mySQL Datenbank "DAN" in der Tabelle "Sportarten" im Feld "Sportart" nach aerobic gesucht wird und in der selben Datenbank und Tabelle aber dem Feld "Wochentag" nach montag gesucht
1. Superglobale Variablen, alles was über die Url kommt ist in $_GET bzw $_REQUEST

CODE
$r = $_REQUEST; //ich bin faul.
2. Querysting für sql Abfrage:

CODE $q = "select * from sportarten";
3. arbeite Variablen ein:

CODE
$where = " where ";
if (isset($r['sportart']) && $r['sportart'] != "" ) {
$where .= "sportart='{$r['sportart']}' ";
}
if (isset($r['wochentag']) && $r['wochentag'] != "" ) {
if (strlen($where)>7)
$where .= "and ";
$where .= "wochentag='{$r['wochentag']}' ";
}
if (strlen($where)>7)
$q .= $where;

// stanard sortiereung wird angehängt
$q .= "order by Date DESC";

$my = mysql_query($q) or die(mysql_error());

So hast du ohne Eingabe alle Daten und mit Eingabe jeweis die Gewünschten.
Kein Gewähr.

 
JIHA! Es klappt wunderbar!
biggrin.gif

Richtig genial! YES
smile.gif

Vielen, vielen Dank, das ist echt genial nett!
Hehe,
cu
Bjarne
 
Zurück
Oben