# Einfach PHP Suchfunktion mit MYSQL Datenbankzugriff



## dendoes (13. Februar 2013)

Hallo liebe Forengemeinde, 
ich bin ziemlich neu hier in dem Gebiet PHP habe mal eine Frage bezüglich der Suchfunktion.
Ich hab mit XAMPP "myphpadmin" gestartet und dort eine Datenbank mit 1 Tabelle und 6 Spalten (+Inhalt) erstellt 

Nun möchte ich innerhalb meiner Webseite eine Suchfunktion einbauen, in der man nach verschiedenen Inhalten suchen kann.
Meine Datenbank bezieht sich auf "Konsolen-Spiele" und man sollte bei der Suche nach "Genres" oder nach der "Plattform" suchen können.
Also das auf der Seite dann nur Spiele dargestellt werden, die entweder vom "Genre"="Action" sind oder oder oder.

Leider kann ich gerad keinen Code mit einbetten, da ich gerad am rumprobieren bin und selbst nicht durchsteige. 
Gibt es eine einfach Möglichkeit eine Suchfunktion mit anschließender Ausgabe in Tabellenform zu erstellen?

Beste Grüße

dendoes


----------



## Yaslaw (13. Februar 2013)

Um ein SQL so zusammenzustellen dass du nach mehreren Feldern Suchen kannst, aber nicht musst:
http://wiki.yaslaw.info/wikka/PhpVariableWhereSimple


----------



## dendoes (13. Februar 2013)

So habe jetzt das Script angewandt und es kommt aber folgende Fehlermeldung, bzw es wird nur folgendes ausgegeben:

*"SELECT * FROM spiele WHERE arg1 = 123 AND arg3 = 'ab\"c'"*

Hier mein Code:


```
<?php
    //Testdaten erstellen. $numArg3 darf nicht im Where-Teil des SQLs erscheinen
    $numArg1 = 123;
    $numArg3 = NULL;
    $stringArg3 = 'ab"c';
   
    //Die Connection baue ich hier nur auf, um den mysql_real_escape_string() zu
    //ermöglichen. Diese sollte gerade bei WHERE-Feldern unbedingt genutzt werden
    $conn = mysql_connect('localhost', 'dende', '****') or die(mysql_error);
    
    //Ein Array initialisieren. Dies ist notwendig da später mit einem implode() auf diese Variable getestet wird
    $args = array();
    
    //Die einzelnen Variablen prüfen und dem Argumententopf $args mit der genauen 
    //SQL-Syntax hinzufügen
    if(isset($numArg1)) $args[] = 'arg1 = '.mysql_real_escape_string($numArg1);
    if(isset($numArg2)) $args[] = 'arg2 = '.mysql_real_escape_string($numArg2);
    if(isset($stringArg3)) $args[] = "arg3 = '".mysql_real_escape_string($stringArg3)."'";
    
    //Den Where-String aus dem Argumententopf erstellen
    $where = implode(' AND ', $args);
   
    //Das Sql ohne Where erstellen
    $sql = "SELECT * FROM spiele";
   
    //Falls wir einen Where-String haben, diesen mit dem Schlüsselwort 'WHERE? an den 
    //Sql-String anhängen
    if(isset($where)) $sql = $sql." WHERE ".$where;

    //TODO Auswertend des SQLs
    //Für deises Testscript reicht jedoch die Ausgabe unseres Sqls
    echo $sql;
   
    //Datenbankconnection wieder schliessen
    mysql_close($conn);
?>
```


----------



## Yaslaw (13. Februar 2013)

Dann lies mal den Code (mindestens die Kommentare innerhalb desselben)und du weisst warum.

Das Script ist a) eine Idee, aber kein fertig zu implementierendes Projekt und b) macht es genau das was das Script machen sollte.

Du musst das ganez natürlich noch für dich anpassen!


----------



## dendoes (13. Februar 2013)

Danke, aber verstehe das Script leider gar nicht.
Ich habe es soweit hinbekommen, dass meine Daten aus der Datenbank in einer Tabelle auf der site vorhanden sind und ein Suchfenster mit "Suchen"-Button.

Ich muss auf die Daten in der mysql Tabelle mit dem Suchfenster+Button zugreifen können um ein Suchergebnis zu erhalten.

Ich habe nun 2 php Dokumente angelegt (abschicken/ausgeben)

EINGABE:


```
<h2>Spiele</h2>
	<p>
	
		<?php
		
			// Verbindung zur Datenbank
			
			$connection = mysql_connect ("localhost","stp","****");
		
			
			
			// Datenbank auswählen
			$db = mysql_select_db("gaming") or die ("Datenbank existiert nicht");
			
			// SQL-Anweisung 
			$suche = 'NULL';
			$suche = $_GET[$suche];
			$sql = "SELECT * FROM releases WHERE genre LIKE '%$suche%'";
			$result = mysql_query($sql);
	
		//$Q = mysql_query("SELECT * FROM releases") or die("import abgebrochen");
		//$run = 0;
		//while($row = mysql_fetch_array($Q)) {
			//
			//
			//$run++;
		//}
		//print_r($offeringDB);
		//$offeringDB_count = $run;
	
	
		
		
		
		
		//$suche = $_POST['suche'];
		//$daten = mysql_query('SELECT * FROM `releases` WHERE `genre` LIKE \'%'.$suche.'%\'');  
		//	while($row=mysql_fetch_array($daten));
		
		//	echo $row['genre] , '<br>
				
		
		?>



		
		<form action="ausgabe.php" method="GET">
			
			<input type="hidden" name="content" value="Spiele" />
			<input type="text" name="suche" value="" />
			<input type="submit" />
			
		</form>
			
			

		
		
		<table class="releases" border="1">
		
		
			<tr>
				<th>ID</th><th>Spiel</th><th>Publisher</th><th>Genre</th><th>Plattform</th><th>Termin</th>
			</tr>
			

		
		<?php
			$count = 1;
					// Ausgabe der Spiele

		while ($row = mysql_fetch_array ($result)) {			
				
				if ( is_int ($count /2) )
			$trclass="even";
		
		else
			$trclass="odd";
				
				echo"<tr class='$trclass'>";
				echo "<td>".$count."</td>";
				echo"<td>".$row['Spiel']."</td>";
				echo"<td>".$row['Publisher']."</td>";
				echo"<td>".$row['Genre']."</td>";
				echo"<td>".$row['Plattform']."</td>";
				echo"<td>".$row['Termin']."</td>";
				echo"</tr>";
				
				$count++;
			}	
		?>
		</table>
			
	
	</p>
```

und AUSGABE:


```
<h2>Ihr Suchergebnis</h2>

<?php
// Verbindung zur Datenbank
			
			$connection = mysql_connect ("localhost","stp","***");
		
			
			
			// Datenbank auswählen
			$db = mysql_select_db("gaming") or die ("Datenbank existiert nicht");
			
		 
        
		$suche= $_POST['suche'];
		$erg = mysql_query("SELECT spiel,publisher,plattform,genre,termin from 'releases' where genre='$suche'"); 
   while (list($spiel,$publisher,$plattform,$genre,$termin) = mysql_fetch_row($erg)) { 
                echo "$spiel,$publisher,$plattform,$genre,$termin <BR>\n"; 
        } 
?>
```

Die Kommentare einfach nicht beachten ( es sei denn, sie sind relevant) 

Danke schon einmal für die Hilfe.

Grüße

d.


----------

