saschard
Goto Top

Suchfeld mit Abfrage auf eine MySQL-Datenbank

Hallo zusammen,

ich steh mal wieder auf dem Schlauch.
Bin dabei ein Suchfeld auf die Webseite zu bringen. Jedoch gibt es irgendwo ein Problem.

Was möchte ich eigentlich? Das Suchfeld soll dazu dienen, Werte aus der MySQL Datenbank herauszulesen und die Suchtergebnisse darzustellen.
<form action="" method="post" target="_self">				  
	<div style="float:left;margin-left:35px">  
		<input type="text" name="searchfield" style="border: 1px solid #c8c8c8;width:185px">  
		<input type="image" src="img/search.gif" name="enter_search" alt="Suche" >  
	<!-- <input type="submit" name="enter_search" value="Suche"> --> 
	</div>
</form>
Hiermit definiere ich das Suchfeld und den Suchbutton (dargestellt als Bildchen).

Dann habe ich folgendes um die Daten aus der Datenbank zu lesen:
<?php
	// Post-Variable bei der Suche im Feld
	if(isset($_POST['enter_search']))  
	{
		$DBHOST = "localhost";  
		$DBUSER = "root";  
		$DBPW = "";  
		$con = mysql_connect($DBHOST,$DBUSER,$DBPW) or die("Verbindungsversuch fehlgeschlagen" . mysql_error());  
		mysql_select_db("alchemie",$con) or die("Konnte die Datenbank nicht waehlen" . mysql_error());  
	
		$searchresult = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['searchfield']))));  
			$wsearch = "SELECT WName   
							FROM wirkungen
								WHERE WName LIKE '%searchresult%'";  
				
		$post = mysql_query($wsearch);
		while($lpost = mysql_fetch_array($post))
		{
		echo "<td align='center' valign='middle' style='width:16%'><h2>".$lpost['WName']."</h2></td>";  
		}
	}  
?>
Erhalte keine Ausgabe, Webconsole gibt keine Meldung zurück. Das SQL-Statement funkioniert auch einwandfrei. Wird im Statement '%searchresult%' mit einem Suchbegriff ersätzt, erhalte ich Resultate aus der DB.

Vielleicht muss eine onclick-Funktion in den Button eingebaut werden, fällt mir grade ein beim Post schreiben =)

Über Hilfe wäre ich sehr dankbar.

Gruß, Sascha

Content-Key: 226121

Url: https://administrator.de/contentid/226121

Printed on: April 25, 2024 at 17:04 o'clock

Member: Jochem
Jochem Jan 08, 2014 at 14:22:46 (UTC)
Goto Top
Moin,

fällt mir so beim Lesen auf: Wie heißt Dein Suchfeld und wie ist es in der WHERE-Klausel definiert?
Bau doch nach dem Aufbereiten von $wsearch mal ein Echo $wsearch ein, dann siehst Du, was tatsächlich im SELECT-Statement steht.

Gruß J face-smile chem
Member: colinardo
Solution colinardo Jan 08, 2014, updated at Jan 10, 2014 at 07:43:16 (UTC)
Goto Top
Hallo Sascha,
dein SQL-String sollte so aussehen:
$wsearch = "SELECT WName FROM wirkungen WHERE WName LIKE '%" . $searchresult . "%'";
Grüße Uwe
Member: SlainteMhath
Solution SlainteMhath Jan 08, 2014, updated at Jan 10, 2014 at 07:43:35 (UTC)
Goto Top
Moin.

$searchresult = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['searchfield']))));   

Find ich gut, das du versuchst die Usereingabe sauber zu bekommen, aber das äussere TRIM kannst du dir sparen und das HTMLENTITIES ist nur sinnvoll, wenn der gesuchte Text auch mit HTMLENTITIES in die DB geschrieben wurde.

/EDIT: und mit stripslashes() machst du dir die ganze escaperei wieder kaputt.

Es genügt also:
$searchresult = mysql_real_escape_string(  trim($_POST['searchfield'] ) );  

Zusätzlich sollte noch in zeile 18 ein HTMLENTITIES um den $lpost[...]

Fehleranzeige usw in PHP ist eingeschalten, oder?

lg,
Slainte
Member: SaschaRD
SaschaRD Jan 10, 2014 updated at 07:47:25 (UTC)
Goto Top
Morgen zusammen,

erst einmal Danke für Eure Antworten.
Das Problem wie Uwe es bereits geschrieben hat lag daran, dass ich
$searchresult = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['searchfield']))));  
zwar deklariert habe, jedoch dann die Variable nicht ordnungsgemäß aufgerufen habe in dem SQL-Statement. Es fehlte das "$"-Zeichen.

@slainte,
danke für deine Anmerkungen sie wurden umgesetzt. Habe mich nochmal dadurch detaillierter mit htmlentities, trim, stripslashes befasst und dazu ein paar Übung auf w3schools durchgeführt.

Eine weitere Frage habe ich noch;
das Statement wird von Zeit zu Zeit erweitert. Muss mal sehen wie ich das Ganze am Ende hinbekomme.
Erhalte derzeit bei einer Suche z.B. "blind" (suche also nach einer Wirkung)

folgenden Output:
Es wurde nach folgender Wirkung "blind" gesucht.  
Alraunenwurzel Blindheit Henkerskappe Blindheit Lehm Blindheit
Hierbei möchte ich die zusammengehörigen Suchergebnisse in einer Zeile haben, die nächsten dann wieder in der nächsten u.s.w.
Es wurde nach folgender Wirkung "blind" gesucht.  
Alraunenwurzel Blindheit 
Henkerskappe Blindheit 
Lehm Blindheit
So sollte es letztendlich aussehen. Habe es mit "<br>" in der Ausgabe versucht.

Ausgabe sieht wie folgt aus:
echo "<td align='center' valign='middle' style='width:20%'><h2>".$lpost['Name']."</h2></td>";   
echo "<td align='center' valign='middle' style='width:20%'><h3>".$lpost['Wirkung4']."</h3></td>";  
Jemand eine Lösung? Mit <br> ist es wohl nicht realisierbar.

Danke und Gruß, Sascha
Member: colinardo
Solution colinardo Jan 10, 2014 updated at 08:49:19 (UTC)
Goto Top
echo "<tr><td align='center' valign='middle' style='width:20%'><h2>".$lpost['Name']."</h2></td><td align='center' valign='middle' style='width:20%'><h3>".$lpost['Wirkung4']."</h3></td></tr>";  
und vor der Schleife nicht das echo "<table>"; und hinter der Schleife nicht das das echo "</table>"; vergessen!

also im ganzen so:
echo "<table>";  
while ($lpost = mysql_fetch_array($post)) { 
 echo "<tr><td align='center' valign='middle' style='width:20%'><h2>".htmlentities($lpost['Name'])."</h2></td><td align='center' valign='middle' style='width:20%'><h3>".htmlentities($lpost['Wirkung4'])."</h3></td></tr>";  
}
echo "</table>";  
Grüße Uwe
Member: SaschaRD
SaschaRD Jan 10, 2014 updated at 16:06:29 (UTC)
Goto Top
Hallo Uwe,

*Kopf auf die Tischplatte haut*
Sicher. Bei einer Tabelle muss ich natürlich <tr> "table row" einfügen, damit dies in einer neuen Tabellenzeile ausgegeben wird.

Danke Dir.

Noch eine Frage:
Habe jetzt eine Reset/Refresh Funktion in die Seite eingebaut.

Diese funktioniert leider nicht für das Suchfeld, die dort gefunden einträge werden weiterhin angezeigt.
Wird etwas über das Dropdown-Menu ausgewählt und dann der Refresh-Button betätigt, wird die Seite zurückgesetzt.

Verwende dafür folgenden Zeilen
<input type="image" src="img/refresh.png" name="refresh" alt="Refresh" onclick="history.go(0)">  
Habe bereits mehrere Varianten versucht z.B.
<script>
function reloadpage()
{
location.reload();
}
</script>

onclick="reloadpage()"  

Gruß, Sascha