[PHP/mySQL] Werte aus $_Post als SQL-Abfrage-Variablen nutzen?

absurd

Herzlich willkommen!
Werte aus $_Post als SQL-Abfrage-Variablen nutzen?

Hallo, bin ein php u. mysql Newbie (aber mit Grundkenntnissen) und habe ein Problem mit einem PHP-Skript zur Abfrage meiner MySQL-DB. Ich sitz jetzt schon Tage davor und weiss nicht wo's hakt. :cry:
Es geht um folgendes:
Ich habe eine Tabelle in der DB, aus der ich Informationen auf in HTML ausgeben möchte.
Das ganze soll über folgendes Abfrage-Formular ablaufen:
Code:
<form enctype="multipart/form-data" action="result.php" method="post">
<ul id="query">
<li><strong>Place *</strong>
	<select name="Place">
		<option value="Labial" />labial
		<option value="Coronal" />coronal
		<option value="Dorsal" />dorsal
		<option value="Radical" />radical
	</select>
</li>
<li><strong>Manner *</strong>
<select name="Manner">
		<option value="plosive" />plosive
		<option value="nasal" />nasal
		<option value="trill" />trill
		<option value="tap/flap" />tap/flap
		<option value="fricative" />fricative
		<option value="approximant" />approximant
		...
	</select>
</li>
</ul>
<ul id="query">
<li><input type="submit" value="Submit Form" /></li>
<li><input type=reset value="Clear Form" /></li>
</ul>
</form>

Soweit so gut. Das ganze wird dann auf der result.php-Seite weiterverarbeitet:
PHP:
<?php
$Place = $_POST["Place"];
$Manner = $_POST["Manner"];
?>

Und jetzt das Problem: Ich möchte mit $Place und $Manner, also den Werten aus dem Formular, eine SQL-Abfrage gestalten. Das habe ich so versucht:
PHP:
<?php
$query = 'SELECT * '
	. ' FROM `all_consonants` '
	. ' WHERE `$Place` '
	. ' LIKE "+" AND `$Manner` '
	. ' LIKE "+" ';
$result = mysql_db_query('phonbase', $query);
?>

<!-- Datenausgabe in Tabelle -->
<p>
<table>
<tr><th>ID</th><th><?php echo $Place ?></th><th><?php echo $Manner ?></th></tr>

<?php
while($zeile = mysql_fetch_array($result))
{
echo "<tr><td>" . $zeile["ID"] . "</td>";
echo "<td>" . $zeile[$Place] . "</td>";
echo "<td>" . $zeile[$Manner] . "</td></tr>";
}

Alles, was ich bekomme ist: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ../dbtest/includes/queryscript.inc on line 16. Das ist: while($zeile = mysql_fetch_array($result))
Habe ich hier Fehler in der Syntax gemacht? Oder geht das, was ich hier vorhabe gar nicht? Die option-values aus dem Abfrage-Formular entsprechen den Spalten in der Tabelle aus der DB. Wie mach ich es richtig?

Danke im voraus.
 
Hallo

was genau willst du fuer daten abfragen? sowas(?)

Code:
<?php
$query = "SELECT *  FROM all_consonants  WHERE feldname1=`$Place`  AND feldname2=`$Manner`";
$result = mysql_db_query('phonbase', $query);
?>


btw, wieso machst du bei so sachen nicht einfach ne zeile "echo $query;" und pastet den query z.b. in phpmyadmin? solange er dort nicht funktioniert wird er auch via PHP nicht funktionieren ;)

bye
merror
 
Um ehrlich zu sein verstehe ich auch nicht ganz was du abfragen willst. Momentan sieht deine SQL-Abfrage so aus:

Code:
SELECT *  FROM `all_consonants`  WHERE `$Place`  LIKE "+" AND `$Manner`  LIKE "+"

Dir wird auffallen, dass die globelen Variablen nicht ersetzt werden. Das liegt daran, dass du einfache Anführungsstriche verwendet hast. In diesen werden Variablen nicht durch deren Inhalt ersetzt.
Daher solltest du entweder doppelte verwenden oder die Variablen seperat hinzufügen.

Also z.B.: 'SELECT '.$feldname.' FROM '.$tabellenname;

Wie merror schon richtig schrieb ist es von Vorteil den SQL-Befehl mal per echo auszugeben um Fehler einfacher zu erkennen.

Wenn du uns noch ein paar Informationen zur MySQL-Tabelle liefern könntest, können wir dir sicherlich weiterhelfen.
 
Danke. Ich hab's mit Eurer Hilfe hinbekommen. Es lag doch an der Syntax. Ich poste mal den Code, so wie er jetzt macht, was ich will, vielleicht hilft es ja noch anderen:
PHP:
<?php
$query = 'SELECT * '
. 'FROM `all_consonants` '
. 'WHERE `' .$Place. '`'
. 'LIKE "+" AND `' .$Manner. '`'
. 'LIKE "+" ';

while($zeile = mysql_fetch_array($result))
{
echo "<tr><td>" . $zeile["ID"] . "</td>";
echo "<td>" . $zeile[$Manner] . "</td>";
echo "<td>" . $zeile[$Place] . "</td></tr>";
}

Zu Euren Fragen bezgl., was ich überhaupt abfragen will: In den Zellen der all_consonants-Tabelle steht entweder + oder gar nichts (NULL). Ich möchte nun ausgeben, in welcher Zeile (= bei welcher ID-Nr.) in bestimmten Tabellenspalten /-feldern ein + steht. Das Formular soll also die Auswahl der Tabellenspalten erledigen.
Ich hoffe, mich verständlich auszudrücken. :funny

Also nochmals, vielen Dank.
Aber eine Frage habe ich noch, da ja im Prinzip da genau mein Fehler lag: Ich habe jetzt in einigen Büchern nachgeschlagen, aber nie ne direkte Antwort bekommen:
Worin liegt der Unterschied, bzw. was bewirken die Zeichen: ' ` und " im php-code und wie bette ich damit Variablen ein?
 
Wie schon erwähnt haben " und ' eigentlich den gleichen Sinn. Beide umschließen Zeichenketten (Strings) oder einzelne Zeichen (Chars).
Der wichtigste Unterschied liegt darin, dass bei den doppelten Anführungszeichen der String nach darin liegenden Variablen durchsucht, und diese dann durch den Wert ver Variable ersetzt wird.
Bei einfachen Anführungsstrichen geschieht dies nicht, was natürlich Vorteile in der Laufzeit bietet.

Im Allgemeinen sollte man doppelte Anführungsstriche nur dort verwenden, wo man das Ersetzen wünscht.

Zur Verdeutlichung:
PHP:
<?PHP
$nick = "Pennywise";
echo "Hallo $nick!<br>";
echo 'Hallo $nick!<br>';
echo 'Hallo '.$nick.'!';
?>
Dieses Programm erzeugt folgende Ausgabe:
Code:
Hallo Pennywise!
Hallo $nick!
Hallo Pennywise!
Dieses Zeichen ` wird in MySQL-Anfragen dazu verwendet Tabellen-, bzw. Feldnamen hervorzuheben.
Man kann sie aber ebensogut weg lassen. :)

SELECT * FROM `user`

ist das Gleiche wie

SELECT * FROM user
 
Oben