Unknown column '' in 'where clause'

tayke

Mitglied
Ahoi

Ich bekomme leider folgendes Fehler: Unknown column '' in 'where clause'
bei folgender Abfrage:

PHP:
$sql = "SELECT * FROM tabelle WHERE `" . $_POST['x'] . "` LIKE '%" . $_POST['y'] . "%' ";

Ich hab jetzt mehrere Varianten durch, nur will der Fehler nicht verschwinden.
 
$_POST['x'] hat keinen Wert. Ist sozusagen leer.
Teste es mit
PHP:
var_dump ( $_POST );
 
Normal steht das immer so dran:
NULL Unknown column 'dieSpalteGibtEsNicht' in 'where clause'
Da bei dir keine Spalte angegeben ist, gehe ich davon aus das $_POST['x'] leer ist.
Probier mal folgendes:
PHP:
echo $_POST['x'] == "" ? "Kein Wert vorhanden" : "Wert vorhanden"
 
Du gibst aber viele Informationen von deinem Datenschema preis. Du solltest die übergebenen Werte unbedingt filtern und validieren, damit es nicht zu SQL-Injektionen kommen kann.
Im Falle der Tabellenspalte wäre eine Liste der erlaubten Werte möglich, beispielsweise:
PHP:
$allowedColumns = array(
	'Spalte-A',
	'Spalte-B',
	// …
);
if( !isset($_POST['x']) || !isset($allowedColumns[$_POST['x']]) ) {
	echo 'Ungültige Spalte.';
}
Als übergebener Wert wäre in diesem Fall der numerische Schlüssel des Arrayelements.
 
x kommt aus einem Dropdownmenü, da muss ich dann wohl trotzdem filtern, oder?
x ist leer, ja, solange bis halt was abgeschickt wurde. Wußte nicht, dass es daran liegt. Kann man die Ausgabe irgendwie unterbinden?

y soll der Suchbegriff sein.

Code:
<form method="post">
<select name="x">
<option value="name">Name</option>
<option value="jahrgang">Jahrgang</option>
</select>
<input type='text' name='y'>
<input type='submit'>
</form>
 
hmm? Was hat ein verstecktes Feld mit dem leeren x zu tun?
Kannst du mir bitte zeigen, wie das gehen soll?
 
PHP:
if ( $_POST['check'] == 1 )
{
$sql = "SELECT * FROM tabelle WHERE `" . $_POST['x'] . "` LIKE '%" . $_POST['y'] . "%' ";
.
.
.
}
HTML:
<form method="post">
<select name="x">
<option value="name">Name</option>
<option value="jahrgang">Jahrgang</option>
</select>
<input type='text' name='y'>
<input type='submit'>
<input type="hidden" name="check" value="1" />
</form>
Erst wenn das Formular abgeschickt wurde, macht er die SQL Abfrage.
 
Dankeschön, jetzt hab ichs kapiert. Das klappt auch! :)

Jetzt hänge ich an der Überprüfung der Werte:

PHP:
if ( $_POST['check'] == 1 ) {

$allowedColumns = array( 'name', 'jahrgang' );
if( !isset($_POST['x']) || !isset($allowedColumns[$_POST['x']]) ) { 
echo 'Ungültige Spalte.'; }

else {
$sql = "SELECT * FROM tabelle WHERE `" . $_POST['x'] . "` LIKE '%" . $_POST['y'] . "%' ";
...
Nun wird jedesmal "Ungültige Spalte" ausgegeben, wobei doch x einen Wert (name oder jahrgang) enthält und er richtig ist.
Oder hab ich das falsch eingebaut?
 
Zuletzt bearbeitet:
Zurück