PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vordefinierte Konstante mit $_GET übergeben


werftarbeiter
19.12.2007, 11:44:54
Hallo,
ich will per $_GET eine eine vordefinierte Konstante an ein mysql_select übergeben.

<?php
define('DATENBANK', 'personen');

echo "<p><a href=\"".$_SERVER['PHP_SELF']."?index&db=DATENBANK\">Startseite</a></p>\n";

if (isset($_GET['index'])) {
echo $sql = "SELECT * FROM ".$_GET['db']."";
}
?>


Als Ausgabe bekomme ich:

SELECT * FROM DATENBANK statt SELECT * FROM personen.

Hab schon diverse schlaue Bücher gewälzt und gegoogelt, aber keine brauchbare Lösung bekommen.

Für Eure Hilfe bin ich sehr dankbar, stehe nämlich voll auf dem Schlauch.
Der werftarbeiter

defabricator
19.12.2007, 11:53:50
Versuch es mal mitecho '<p><a href="?index=true&db=DATENBANK">Startseite</a></p>';
Du weißt aber hoffentlich, dass man das auch mit beliebigen anderen Parameter aufrufen kann und so unter Umständen komplett andere Abfragen ausführen lassen kann?

werftarbeiter
19.12.2007, 12:41:29
Hallo defabricator,
Danke für deine prompte Antwort, aber die Ausgabe bleibt leider die Gleiche.

Du weißt aber hoffentlich, dass man das auch mit beliebigen anderen Parameter aufrufen kann und so unter Umständen komplett andere Abfragen ausführen lassen kann?

Das weiß ich wohl, aber die Seite liegt in einem sicheren Bereich. Wie wäre das Problem denn eleganter zu lösen?
Mast und Schotbruch
der Werftarbeiter

meikel (†)
19.12.2007, 13:19:32
Als Ausgabe bekomme ich:

SELECT * FROM DATENBANK statt SELECT * FROM personen.

Hab schon diverse schlaue Bücher gewälzt und gegoogelt, aber keine brauchbare Lösung bekommen.
Du sollst die Bücher nicht wälzen sondern lesen. PHP ersetzt Variable in "Gänsefußzeichenketten". Variable != Konstante

werftarbeiter
19.12.2007, 13:51:08
Hallo meikel

Du sollst die Bücher nicht wälzen sondern lesen. PHP ersetzt Variable in "Gänsefußzeichenketten". Variable != Konstante

War mir schon klar, dass variablen und konstanten nicht das gleiche sind. Ich arbeite nicht regelmäßig mit PHP und wollte eigentlich nur einen kleinen Lösungsvorschlag oder Ansatz.
Gruß vom werftarbeiter.

meikel (†)
19.12.2007, 14:08:06
echo $variable . "Zeichenkette" . KONSTANTE . "noch ne Zeichenkette";

defabricator
19.12.2007, 14:08:25
Mischt Du eventuelle verschiedene Beispiele aus dewm Buch?
echo $sql = "SELECT * FROM ".$_GET['db']."";an der Stelle wird keinesfalls die Datenbank gewechselt sondern allenfals die Tabelle. Was genau möchtest Du erreichen?

werftarbeiter
19.12.2007, 14:45:42
Hallo,
ich möchte verschiedene tabellen aufrufen können, die dann mit einer function ausgewertet werden. Die Tabellennamen sind per define() voregeben.
Da ich zwei Homepages verwalte, die auf ein gleiches Datenbanksystem aufbauen, möchte ich nur die Konstanten für die jeweilige Seite anpassen.

Blade1965
19.12.2007, 16:00:27
Hallo,
ich will per $_GET eine eine vordefinierte Konstante an ein mysql_select übergeben.

<?php
define('DATENBANK', 'personen');

echo "<p><a href=\"".$_SERVER['PHP_SELF']."?index&db=DATENBANK\">Startseite</a></p>\n";

if (isset($_GET['index'])) {
echo $sql = "SELECT * FROM ".$_GET['db']."";
}
?>


Als Ausgabe bekomme ich:

SELECT * FROM DATENBANK statt SELECT * FROM personen.

Hab schon diverse schlaue Bücher gewälzt und gegoogelt, aber keine brauchbare Lösung bekommen.

Für Eure Hilfe bin ich sehr dankbar, stehe nämlich voll auf dem Schlauch.
Der werftarbeiter

Da macht dein Script auch das Richtige.
Du übergibst im String ja auch db=DATENBANK und nicht den String der Tabelle!

defabricator
19.12.2007, 16:24:10
Oh, ich glaube jetzt hat es klick gemacht ...vielleicht.
Du willst, dass der Benutzer zwischen zwei oder mehr Konstanten wählen kann? Im Link steht dann immer table=alpha oder table=beta und Du tauschst dann in den Skripten nur die define('alpha', .... Zeilen aus.
<?php
echo '<p><a href="?index=xyz&table=alpha">Startseite alpha</a></p>';
echo '<p><a href="?index=xyz&table=beta">Startseite beta</a></p>';
echo '<p><a href="?index=xyz&table=gamma">Startseite gamma</a></p>';

define('alpha', 'personen');
define('beta', 'rauchwaren');
define('gamma', 'restaurants');

if ( isset($_GET['table']) ) {
if ( defined($_GET['table']) ) {
$sql = 'SELECT * FROM '.constant($_GET['table']);
}
else {
echo 'unbekannte Tabelle';
exit();
}
}
else {
echo 'keine Tabelle gewählt';
exit();
}


echo $sql;
?>

werftarbeiter
19.12.2007, 18:25:40
Hallo defabricator,
ich sehe du verstehst mich.habs ausprobiert und es ist genau das, wass ich meinte. Es könnte alles so einfach sein.
Ich danke Dir und wünsche dir ein gesegnetes Weihnachtsfest und dicke Geschenke. Du hast mir auf jeden Fall schon eins gemacht.
Der Werftarbeiter

Opendix
19.12.2007, 23:51:22
ja.. auch wenns funktioniert.. ich würde dennoch eine Überprüfung der übergebenen Variabel einbauen...

werftarbeiter
20.12.2007, 08:39:41
Hallo Opendix,
ja.. auch wenns funktioniert.. ich würde dennoch eine Überprüfung der übergebenen Variabel einbauen...
Wie kann ich die Variabel überprüfen?
Muss ich feststellen, ob sie wirklich von meiner Site angefordert wurde, oder gibt es da noch andere möglichkeiten?
der werftarbeiter

defabricator
20.12.2007, 08:50:10
Der Parameter wird doch überprüft. Sogar per Whitelist, sicherer geht's kaum noch.

Opendix
20.12.2007, 13:55:19
ach ja.. wird überprüft.. bisschen eine komische Lösung aber wird wohl gehen :P