explode - mysql durchsuchen

icolumbo

Grünschnabel
Hallo,

ich habe nicht wirklich viel plan von PHP - mit hilfe der Suchfunktion des Forums hier bin ich aber schon recht weit gekommen. - Finde ich ;)

doch mit einem Problem komme ich jetzt nicht weiter:
hier erstmal mein Code
PHP:
$auswahl = $_POST['radiobutton'];

if ($auswahl == "titel"){
$nachtitel = $_POST['suche'];
} else{
$nachtitel = "XXXXXXXXXX";
}

if ($auswahl == "länge"){
$nachlänge = $_POST['suche'];
}else{
$nachlänge = "XXXXXXXXXX";
}
if ($auswahl == "dt_stimme"){
$nachstimme = $_POST['suche'];
}else{
$nachstimme = "XXXXXXXXXX";
}
if ($auswahl == "beschreibung"){
$nachbeschreibung = $_POST['suche'];
}else{
$nachbeschreibung = "XXXXXXXXXX";
}
if ($auswahl == "cast"){
$nachcast = $_POST['suche'];
}else{
$nachcast = "XXXXXXXXXX";
}
mysql_select_db($database_episodenguide, $episodenguide);
$query_episoden = "SELECT * FROM episoden WHERE titel LIKE '%$nachtitel%' OR orig_titel LIKE '%$nachtitel%' OR länge LIKE '%$nachlänge%' OR dt_stimme LIKE '%$nachstimme%' OR beschreibung LIKE '%$nachbeschreibung%' OR cast LIKE '%$nachcast%' ORDER BY id ASC";
$episoden = mysql_query($query_episoden, $episodenguide) or die(mysql_error());
$row_episoden = mysql_fetch_assoc($episoden);
$totalRows_episoden = mysql_num_rows($episoden);

also wenn man nach einem Wort sucht klappt alles wunderbar, such man aber jetzt nach "Mord Rezept" zeigt er den datensatz "Mord nach Rezept" nicht an. Ich weiß, dass ich $_POST['suche'] mit explode aufteilen müsste - allerdings weiß ich nicht wie ich das dann in $query_episoden = eingeben muß, habe schon viel rumversucht es klappt nix :mad:

hier was ich bisher geschafft habe -> http://icolumbo.de/guide/liste.php

wäre schön, wenn mir einer helfen könnte

Danke Christian
 
Hallo!

Erst mal ein Tipp:

die If-Anweisungen

PHP:
if ($auswahl == "titel"){ 
$nachtitel = $_POST['suche']; 
} else{ 
$nachtitel = "XXXXXXXXXX"; 
}

solltest du besser so formulieren:

PHP:
$nachtitel = ($auswahl == "titel" ? $_POST['suche'] : "XXXXXXXXXX");

Oder, noch besser, mach es so:

PHP:
if ($_POST['suche'] == "") die('Bitte geben Sie einen Suchbegriff ein!');

$nach = explode(" ", $_POST['suche']);
$i = 0;
$where = "";
foreach ($nach AS $k)
{
if ($i == 1) $where .= ' AND ';
$where .= "$_POST['radiobutton'] LIKE '$k'";
if ($i == 0) $i = 1;
}

mysql_select_db($database_episodenguide, $episodenguide); 
$query_episoden = "SELECT * FROM episoden WHERE $where"; 
$episoden = mysql_query($query_episoden, $episodenguide) or die(mysql_error()); 
$row_episoden = mysql_fetch_assoc($episoden);
$totalRows_episoden = mysql_num_rows($episoden);

Das wäre dann das KOMPLETTE Script (ohne deine if-Abfragen).
Denn die Spalten haben ja die gleichen Namen, wie die Werte der Radiobuttons.

Man könnte das Ganze auch noch anders lösen (z. B. mit Regulären Ausdrücken - z. B. auch direkt in der Query), aber dazu sag' ich nur folgendes:

...

So, das musste mal raus!
Damit sollten alle Einwände ausgeräumt sein! ;)
 
Hallo,

vielen dank für die schnelle Antwort, ich hab Tagelang gebastelt bis endlich überhaupt was funktioniert hat. Und jetzt seh ich es wäre wohl auch viel "einfacher" gegangen :rolleyes:

Das mit meiner if Anweisung habe ich nach deinem Vorschlag geändert - klappt super! :) nur das mit dem explode sollte ja noch gehen.

habe dann alles durch deinen Script ersetzt, leider klappt da aber was nicht bei mir :(
gebe ich es genauso ein wie du es geschrieben hast kommt:
You have an error in your SQL syntax near 'LIKE 'mord'' at line 1

Habe dann geändert:
PHP:
if ($i == 1) $where .= ' AND '; 
$where .= "$_POST['radiobutton'] LIKE '$k'"; 
if ($i == 0) $i = 1; 
}
zu:
PHP:
$auswahl = $_POST['radiobutton'] ;

if ($i == 1) $where .= ' AND '; 
$where .= "$auswahl LIKE '$k'"; 
if ($i == 0) $i = 1; 
}

Dann sucht er... findet/sucht aber nur zahlen :eek: wenn ich ein Wort in die Suche eingebe findet er nichts :(

achja hier mal der link dazu:
habe mit echo mal ausgeben, was die Variable $where ist - sieht eigentlich gut aus :rolleyes:
http://icolumbo.de/guide/liste2.php

Gruß Christian
 
Zuletzt bearbeitet:
VIELEN DANK nochmal "rootssw" :)

habe noch etwas rumgebastelt und das problem losen können:

PHP:
$auswahl = $_POST['radiobutton'];

if ($_POST['suche'] == "") die('Bitte geben Sie einen Suchbegriff ein!'); 

$nach = explode(" ", $_POST['suche']); 
$i = 0; 
$where = ""; 
foreach ($nach AS $k) 
{ 
if ($i == 1) $where .= ' AND '; 
$where .= "$auswahl LIKE '%$k%'"; 
if ($i == 0) $i = 1; 
}

mysql_select_db($database_episodenguide, $episodenguide);
$query_episoden = "SELECT * FROM episoden WHERE $where"; 
$episoden = mysql_query($query_episoden, $episodenguide) or die(mysql_error());
$row_episoden = mysql_fetch_assoc($episoden);
$totalRows_episoden = mysql_num_rows($episoden);

es fehlten nur noch die % bei $k, jetzt funktionier alles so wie es soll - und es ist sogar noch einacher als mein erster versuch ;-)

super wie schnell man hier geholfen wird ;)

Gruß Christian
 
Das Problem hab' ich auch schon gefunden.
Hab' das aber noch nicht gepostet, weil ich erst noch die Suche etwas verbessern wollte. :-)

Hier mal das Ganze Online.

Und hier der Code:
PHP:
<?php
$Out = array();

if (isset($_POST['suche']) && $_POST['suche'] != "")
{
	if ($_POST['suchart'] == "ganz")
	{
		$where = "$_POST[radiobutton] LIKE '%$_POST[suche]%'";
	}
	else
	{
		$nach = explode(" ", $_POST['suche']);
		$i = 0;	$where = "";

		foreach ($nach AS $k) 
		{
			if ($i == 1) $where .= " $_POST[suchart] ";
			$where .= "$_POST[radiobutton] LIKE '%$k%'";
			if ($i == 0) $i = 1;
		}
	}

	mysql_select_db($db, $connect) or die (mysql_error());

	$query_episoden = "SELECT id, titel, länge FROM episoden" . ($where != "" ? " WHERE $where" : "");
	$episoden = mysql_query($query_episoden) or die(mysql_error());

	$a = 0;
	while ($row_episoden = mysql_fetch_assoc($episoden))
	{
		$Out[$a]['id'] = $row_episoden['id'];
		$Out[$a]['titel'] = $row_episoden['titel'];
		$Out[$a]['länge'] = $row_episoden['länge'];

		$a++;
	}
}

$Size = sizeof($Out);
?>
<html>
<head>
<title>Suche</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="http://icolumbo.de/icolumbo1.css" rel="stylesheet" type="text/css">
</head>
<script type="text/javascript">
function validate ()
{
	if (document.form1.suche.value == "")
	{
		alert('Bitte geben Sie einen Suchbegriff ein!');
		return false;
	}

	return true;
}
</script>
<body onload="document.form1.suche.focus()">
  <table width="519" border="0" bgcolor="#CC9900" class="episoden">
    <tr class="standart">
      <td width="17%" height="17" class="episodenguide">Episodenguide </td>
      <td class="standart" width="42%">&nbsp;</td>
      <td class="standart" width="14%">&nbsp;</td>
      <td class="standart" width="19%">&nbsp;</td>
      <td width="8%" class="standart"><a href="javascript:history.back()"><img src="http://icolumbo.de/bilder/symbole/zurueck.gif" width="45" height="13" border="0"></a></td>
    </tr>
  </table>
<form name="form1" method="post" action="" onsubmit="return validate()">
  <table width="519" border="0" cellspacing="1" cellpadding="0">
      <tr valign="middle" class="tabelle">
        <td width="174" height="16" align="left" class="kleineschrift">&nbsp;&nbsp;Suche:</td>
        <td align="left" class="kleineschrift" colspan="2">&nbsp;&nbsp;Wo soll gesucht werden?</td>
      </tr>
      <tr class="tab_farbe01">
        <td width="174" valign="middle"><div align="center" class="standart">
            <input name="suche" type="text" id="suche3">
        </td>
        <td valign="top" align="left" class="standart" rowspan="2">
			<input name="radiobutton" type="radio" value="titel" checked />
			Titel<br />
			<input type="radio" name="radiobutton" value="beschreibung" />
			Beschreibung/Kritik<br />
			<input type="radio" name="radiobutton" value="cast" />
			Schauspieler<br />
			<input type="radio" name="radiobutton" value="dt_stimme" />
			Synchronstimme<br />
			<input type="radio" name="radiobutton" value="länge" />
			L&auml;nge<br />
        </td>
        <td width="60" valign="middle" align="center" class="standart" rowspan="2">
            <input type="submit" name="Submit" value="Suchen">
        </td>
      </tr>
	  <tr class="tab_farbe01">
	  	<td class="standart" valign="top">
			<input type="radio" name="suchart" value="ganz" checked />Als ganzes Wort<br />
			<input type="radio" name="suchart" value="AND" />Jedes Wort muss vorhanden sein<br />
			<input type="radio" name="suchart" value="OR" />Für jedes Wort eine neue Suche<br />
		</td>
	  </tr>
    </table>
  <table width="519" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td align="center" class="standart"><a href="http://icolumbo.de/guide/liste.php">Alle Episoden anzeigen </a></td>
    </tr>
  </table>
</form>
<?php
if (isset($_POST['suche']))
{
if ($_POST['suche'] == "") echo '<span class="kleineschrift">Sie haben keinen Suchbegriff eingegeben!</span>';
else {
echo "<span class=\"kleineschrift\">$Size Ergebnis".($Size>1||$Size==0 ? "se" : "")." bei der Suche nach </span>&quot;<span class=\"normalfett\">".(isset($_POST['suche']) ? $_POST['suche'] : "")."</span>&quot;<br>";
if($Size > 0){
?>
<table width="519" border="0" cellspacing="1">
  <tr class="tabelle">
    <td width="30" align="center"><strong>Nr.</strong></td>
    <td width="409" align="center"><strong>Titel</strong></td>
    <td width="80" align="center"><strong>L&auml;nge</strong></td>
  </tr>
    
<?php
for ($i=0; $i<sizeof($Out); $i++)
{
	$l = $i + 1;

	echo "<tr class=\"tabelleinnen\"><td width=\"20\" class=\"normalfett\" align=\"center\">$l</td><td class=\"normalfett\"><a href=\"http://icolumbo.de/guide/episoden.php?id=".$Out[$i]['id']."\">".$Out[$i]['titel']."</a><br><br></td><td>".$Out[$i]['länge']." Min.</td></tr>";
}
?>
  
  </table>
<?php }}} ?>
<p><iframe src="http://www.icolumbo.de/copyepisoden.php" frameborder="0" scrolling="no" width="519px"></iframe></p>
</body>
</html>

Es befinden sich nur 5 Serien von "Columbo" in meiner DB (keine Originaltitel ;) ).
Gib' einfach mal z. B. "Mord Plan" ein und benutz die versch. Optionen.

PS:

Wie schreibt man das eigentlich:

Standart, oder Standard ?! :rolleyes:
 
Zuletzt bearbeitet:
was ein Service hier :) :)

aber du hast gerade noch was am PHP text geändert oder? weil eben ging das bei mir noch nicht einwandfrei. (suche mit AND und OR funktionierte nicht) jetzt geht aber.

Das ist sehr gut wie du das gelöst hast - es übersteigt aber jetzt meine PHP kenntnisse völligst :eek:

ich habs aber dennoch Geschaft den Originaltitel noch mit in die Tabelle zu bekommen. Und vorne hätte ich lieber die Nummer der Episode stehen - anstatt der Suchergebniss Nummer. Hab ich auch selber geschafft :-)

Ich werde noch etwas weiter an deinem Code rumbasteln, so langsam steige ich hinter das System. Es läuft aber im moment noch nach dem "versuch und irrtum Prizip" bei mir ;)

Nochmals vielen dank für deine tolle Arbeit - ich habe noch mehr vor in sachen PHP, ich denke ich werde mich nochmal hier melden müssen - versuche aber erstmal ob ichs net selbst hingebastel bekomm. ;-)

achja - in Franken schreibt man Standard mit "t" ;) aber mit "d" ists wohl doch richtiger, zumindest findet google da mehr Ergebnisse mit.

Gruß Christian

http://icolumbo.de/guide/suche3.php
 
Zurück