Hallo!
Ich habe folgendes SQL-Problem:
Wenn ich einen Formular-Wert als POST-Variable übergebe, wird nur ein Wert ausgelesen, der andere ignoriert, obwohl eine Prüfabfrage eigentlich sagt, dass die Abfrage logisch formuliert sein müsste.
Ich stehe also auf dem Schlauch, warum die Abfrage nicht umgesetzt wird.
Zum besseren Verständnis hier der Codeauszug:
<td>
<form action="http://localhost/db.php" class="tfsearch" method="post">
<B><Font Color=white>Country:</font></b>
<select name="country">
<option value="%%%"></option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
</select>
<input type="hidden" name="action" value="book" />Exact Value
<input type="text" name="exact" />
<input type="hidden" name="action" value="book" />Partial Value
<input type="text" name="partial" />
<input type="hidden" name="action" value="book" />Other
<input type="text" name="other" />
<input type="submit" value="Suchen" />
</form>
</td>
Der Wert wird per POST-Variablen übergeben und lasse dann die SQL-Query machen:
case 'book':
$result = $mysqli->query("SELECT * FROM model, company, number, type WHERE number.number = '{$_POST['exact']}' AND number.number LIKE '%{$_POST['partial']}%' AND number.numberid = model.numberid AND model.typeid = type.typeid AND number.companynumber = company.companynumber LIMIT 10");
So SOLLTE die Abfrage aussehen.
Entweder wird der Wert des Formularfeldes "exact" übergeben oder von "partial" - was auch so sein soll.
Das Problem ist: Bei exact wird es ausgegeben, bei partial nicht.
Gebe ich einen Wert ein, der 100%ig zu einem Treffer führt, also number.number = '{$_POST['exact']}' dann wird diese Abfrage korrekt ausgeführt.
Eine Prüfung, was überhaupt an Werten übergeben wird, mit
if ($_POST) {
echo'<pre>', print_r($_POST),'<pre>'
}
ergibt:
Array
(
[country] => %%%
[action] => book
[exact] => A12345
[partial] =>
[other] =>
)
1
Das ist auch so ganz in meinem Sinne.
Sprich: Wenn nach dem Begriff 'A12345' gesucht wird, soll nur dieser Treffer aufgeführt werden; partial und other bleiben frei.
Wenn ich aber jetzt im Formular-Feld partial 'A123' eingebe, dann müsste mindestens ebenfalls der Wert 'A12345' ausgegeben werden bzw. noch eine ganze Menge andere, die mit 'A123' anfangen.
Das passiert aber nicht.
Eine Prüfung hier ergibt:
Array
(
[country] => %%%
[action] => book
[exact] =>
[partial] => A123
[other] =>
)
1
Es ist doch eigentlich dasselbe in grün wie die Abfrage unter exact?!?
Statt partial und other bleiben hier eben die Felder exact und other frei.
Und es ist ja auch in der SQL-Abfrage als number.number LIKE '%{$_POST['partial']}%' formuliert, so dass es kein Problem hier geben dürfte, einen Wert, der mit 'A123' beginnt aufzufinden.
Wie gesagt, ich steh auf dem Schlauch.
Es muss irgendwie am SQL-Query liegen.
Findet wer den Fehler oder - falls hier irgendwas komplett falsch formuliert sein soll - könnte mir jemand den korrekten SQL-Query für eine = und eine LIKE-Abfrage bei Übergabe zweier Formularfeld-Variablen posten, bei der ein Feld freibleibt?
Für jede Hilfe schon mal allerbesten Dank im voraus!