Mysql -> Abfrage mit Feldname als Variable

Moin Moin,

ich hab wieder einmal eine kurze frage. Ich möchte eine Abfrage erstellen in der der Feldname über eine Variable definiert werden soll.

Leider funktioniert das ganze überhaupt nicht.

Hier einmal der Quelltext:

PHP:
    <?php $T_Kurs = $_POST['Kurs']; ?>
    <?php $T_tag = $_POST['tag']; ?>

$kind_kurs = mysql_query('SELECT * FROM kind where '$T_tag' = 'T_Kurs');
if (!$kind_kurs) {
    die('Ungültige Abfrage: ' . mysql_error());
}

Das ergebniss: Ungültige Abfrage: Unknown column '$T_tag' in 'where clause'

Alex
 
Probier es mal so:
PHP:
<?php
$T_Kurs = $_POST['Kurs'];
$T_tag = $_POST['tag'];

$kind_kurs = mysql_query('SELECT * FROM kind where `'.$T_tag.'` = "T_Kurs"'); 
if (!$kind_kurs) { 
    die('Ungültige Abfrage: ' . mysql_error()); 
}
?>
 
Nabend Crack!

So weit funktioniert das schon einmal !

Wie kann ich denn jetzt die Ergenbisse der Abfrage ausgeben. Ich habe er folgender maßen versucht !

PHP:
<?php echo $row_kind_kurs['Name']; ?></p>

Danke für den Tip !

Alex
 
Das müsstest du so lösen:
PHP:
<?php
$T_Kurs = $_POST['Kurs'];
$T_tag = $_POST['tag'];
 
$kind_kurs = mysql_query('SELECT * FROM kind where `'.$T_tag.'` = "T_Kurs"');

if (!$kind_kurs) { 
    die('Ungültige Abfrage: ' . mysql_error()); 
}

while($row = mysql_fetch_assoc($kind_kurs)) {
    // ... in $row befinden sich jetzt die Werte der Spalten eines Datensatzes
}
?>
 
Hallo!

Ich denke mal dass "T_Kurs" kein Wert ist der in der Datenbank vorkommt.

PHP:
$kind_kurs = mysql_query("SELECT * FROM kind where `".$T_tag."` = '".$T_Kurs."'");
Mir scheint dass Du noch ganz am Anfang stehst, darum mein Tipp: "PHP für dich".

Gruss Dr Dau
 
Das müsstest du so lösen:
PHP:
<?php
$T_Kurs = $_POST['Kurs'];
$T_tag = $_POST['tag'];
 
$kind_kurs = mysql_query('SELECT * FROM kind where `'.$T_tag.'` = "T_Kurs"');

if (!$kind_kurs) { 
    die('Ungültige Abfrage: ' . mysql_error()); 
}

while($row = mysql_fetch_assoc($kind_kurs)) {
    // ... in $row befinden sich jetzt die Werte der Spalten eines Datensatzes
}
?>

So wohl auf keinen Fall!
Wenn schon, dann wohl so:
PHP:
<?php
$T_Kurs = ((isset($_POST['Kurs']) ? htmlentities($_POST['Kurs']) : '');
$T_tag = ((isset($_POST['tag']) ? htmlentities($_POST['tag']) : '');
 
$kind_kurs = mysql_query("SELECT * FROM kind where '" . $T_tag . "' = '" . $T_Kurs . "'");
if ($kind_kurs == false)
{ 
    die('Ungültige Abfrage: ' . mysql_error()); 
}
$row = mysql_fetch_array($kind_kurs);
while ($row)
{
    // ... in $row befinden sich jetzt die Werte der Spalten eines Datensatzes
    $row = mysql_fetch_array($kind_kurs);
}
?>

Damit wären gleich 5 Fehler weg:
- Zuweisung einer Variable innerhalb einer Bedingung
- 2 nicht deklarierte Vars
- false String-Übergabe innerhalb der Query
- Potenzielle Sicherheitslöcher wegen nicht escapten Vars
 
Zuletzt bearbeitet:
@bofh1337
Warum nicht? (also die while-Schleife)

Die Version von Crack ist die ganz normale. Deine ist unnütz kompliziert.
Damit wären gleich 5 Fehler weg:
- Zuweisung einer Variable innerhalb einer Bedingung
- ...
Zuweisung einer Variabke innerhalb einer Bedinung ist kein Fehler
Selbst php.net hat in seiner Doku den Lösungsansatz von Crack.
http://ch2.php.net/manual/en/function.mysql-fetch-array.php

Zudem sind ' bei dem Feldnamen im SELECT einfach falsch. Wenn, dann `. Aber auch diese sind nur nötig, wenn jemand so blöd war leerzeichen in den Tabellennamen zu verwenden. Ansonsten kann man sich auch diese schenken

PHP:
$kind_kurs = mysql_query("SELECT * FROM kind where `{$T_tag}` = '{$T_Kurs}'");
Dies bedingt jedoch, dass das Feld ein String ist....
 
Hallo Alexander,

Ich bekomme irgendwie keine Daten aus der Datenbank heraus !

sorry, wenn ich so blöd frage, aber da du nicht die riesen Ahnung zu haben scheinst: Machst du denn auch einen echo in der while-Schleife?

Code:
<?php
...
while($row = mysql_fetch_assoc($kind_kurs)) {
   echo $row['FELDNAME'];
}
?>

FELDNAME durch den Namen der Spalte ersetzen, die du beispielhaft ausgeben willst.

Was ansonsten hilft:

a) In PHPMyAdmin, falls du das hast, beispielhaft den gewünschten Query zusammenbauen (also T_KURS und T_tag mit Werten füllen) und schauen, ob es ein Ergebnis gibt

b) Wenn für den wirklichen Ablauf eines Programmes nicht gerade schön hilft print_r($kind_kurs); zumindest mal anzuzeigen, ob überhaupt irgendwas gefunden wurde. Dann weißt du, wo du ansetzen musst: Bei der Ausgabe (dass da was falsch ist, wenn print_r etwas ausgibt) oder bei der Abfrage der DB (wenn print_r nichts ausgibt).

Viele Grüße,

Dirk
 
Zurück