Herzlich willkommen im Archiv vom ABAKUS Online Marketing Forum
Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.
Code: Alles auswählen
...
...
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
...
...
Schau in deinen Code:ben78 hat geschrieben:Mir werden nur passende Suchergebnisse angezeigt, wenn ich mit Verwendung des Sprungmenüs nach einer Marke suche. Wenn ich was in das Textfeld eingebe, wird nicht danach gesucht. Es erscheint trotzdem nur das, was im Sprungmenü ausgewählt ist.
Code: Alles auswählen
$suchwort = mysql_real_escape_string($_POST['suche']);
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "')";
Code: Alles auswählen
<input type="text" name="suche" value="Produktfinder" />
<select name="suche">
Code: Alles auswählen
[b]LINE 40:[/b] $suchwort = mysql_real_escape_string($_POST['suche']);
[b]LINE 46:[/b] $sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
[b]LINE 53:[/b] if ($marke) $sql = $sql." AND Marke = $marke";
{
die('Ungültige Abfrage: ' . mysql_error());
}
Dann wurde das Feld suche nicht vom Formular übermittelt. Du kannst mit phpinfo(INFO_VARIABLES) schauen, was PHP dir alles an Variablen zur Verfügung stellt.ben78 hat geschrieben:$suchwort = mysql_real_escape_string($_POST['suche']);
Notice: Undefined index: suche in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 40
Du hast die Variable $marke nirgends gefüllt. Um $suchwort kümmerst du dich ja in eingangs genannter Zeile, für $marke musst du das Gleiche machen.$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";
Notice: Undefined variable: marke in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search-fulltext1.php on line 46
Du hast keinen Index, der zu den angefragten Spalten Bezeichnung, Beschreibung und Marke passt.Ungültige Abfrage: Can't find FULLTEXT index matching the column list
Code: Alles auswählen
function _get($var, $else=false, $force=false) {
if (!$force) {
return isset($_GET[$var]) ? $_GET[$var] : $else;
}
else {
$force = array_flip($force);
return isset($_GET[$var]) && isset($force[$_GET[$var]]) ? $_GET[$var] : $else;
}
}
function _post($var, $else=false, $force=false) {
if (!$force) {
return isset($_POST[$var]) ? $_POST[$var] : $else;
}
else {
$force = array_flip($force);
return isset($_POST[$var]) && isset($force[$_POST[$var]]) ? $_POST[$var] : $else;
}
}
Code: Alles auswählen
$suche = _post('suche');
$marke = _post('marke');
Code: Alles auswählen
$marke = _post('marke', 'Sony');
Code: Alles auswählen
$marke = _post('marke', 'Sony', array('Sony', 'Toshiba', 'Panasonic'));
Code: Alles auswählen
$submit = _post('submit');
$suche = _post('suche');
$marke = _post('marke');
// formular abgesendet
if ($submit) {
$suche = mysql_real_escape_string($suche);
}
// suchbegriff vorhanden
if ($suche) {
$sql = "SELECT * FROM table WHERE suche = '$suche'";
}
Code: Alles auswählen
if ( $db_link )
{
echo 'Verbindung erfolgreich: ';
echo $db_link;
}
else
{
// hier sollte dann später dem Programmierer eine
// E-Mail mit dem Problem zukommen gelassen werden
die('keine Verbindung möglich: ' . mysql_error());
}
Code: Alles auswählen
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";
if ($marke) $sql = $sql." AND Marke = $marke";
$db_erg = mysql_query( $sql );
Code: Alles auswählen
$sql = "SELECT DISTINCT Marke FROM test ORDER BY Marke";
if ($db_erg = mysql_query( $sql ))
{
echo '<form action="./mysql/search-fulltext1.php" method="post">';
echo '<div id="search-mysql">';
echo '<input type="text" name="suche" size="20" ';
echo "onfocus=\"if (this.value =='Produktfinder') { this.value=''}\" ";
echo "onblur=\"if (value == '') {value='Produktfinder'}\" value=\"Produktfinder\" />";
echo '<select name="hersteller">';
echo '<option value="">Marke</option>';
while ($row = mysql_fetch_array( $db_erg))
{
echo '<option value="' . $row["Marke"] . '">' . $row["Marke"] . '</option>';
}
echo '</select>';
echo '<input type="submit" value="GO">';
echo '</div></FORM>'
Code: Alles auswählen
$sql = "SELECT * FROM test WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . $suchwort . "') AND MATCH Marke AGAINST ('" . $marke . "')";
Code: Alles auswählen
ALTER TABLE test ADD FULLTEXT (Bezeichnung, Beschreibung, Marke);
Code: Alles auswählen
$suchwort = mysql_real_escape_string($_POST['suche']);
Code: Alles auswählen
AND MATCH Marke AGAINST ('" . $marke . "')"
Code: Alles auswählen
if ($marke) $sql = $sql." AND Marke = $marke";
Code: Alles auswählen
if ($marke) $sql = $sql." AND Marke = '$marke'";
Code: Alles auswählen
$sql = "SELECT *
FROM test
WHERE MATCH(Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke) {
$sql .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
Code: Alles auswählen
// Vriablen Definieren
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);
// Abfrage
$sql = "SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke)
{
$sql .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
$anzahl = mysql_num_rows($db_erg);
echo "Suchergebnisse: $anzahl";
Code: Alles auswählen
// Vriablen Definieren
$suchwort = mysql_real_escape_string($_POST['suche']);
$marke = mysql_real_escape_string($_POST['hersteller']);
Code: Alles auswählen
// vars
$suchwort = isset($_POST['suche']) ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';
Code: Alles auswählen
// vars
if (isset($_POST['suche'])) {
$suchwort = trim($_POST['suche']);
else {
$suchwort = '';
}
if (isset($_POST['hersteller'])) {
$marke = trim($_POST['hersteller']);
else {
$marke = '';
}
Den kannst Du wieder löschen. Bei LIKE ist kein FULLTEXT Index notwendig. Nur bei MATCH ist dieser nötig und da fragst Du bekanntlich nur die drei Spalten ab.Via ALTER TABLE test ADD FULLTEXT (marke) habe ich in meiner MySQL-Tabelle einen Fulltext-Index für die Spalte Marke erstellt.
Zum Debugging empfehle ich Dir einfach mal die Abfrage per echo ausgeben zu lassen. Also so:0 Ergebnisse gefunden
Code: Alles auswählen
if ($marke) {
$sql .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'";
}
echo $sql;
...und auch vielen Dank für diesen Tipp:// vars
$suchwort = isset($_POST['suche']) ? trim($_POST['suche']) : '';
$marke = isset($_POST['hersteller']) ? trim($_POST['hersteller']) : '';
Das Feld Marke ist ein Sprungmenü, aus dem man sich für seine Suche eine Marke auswählen kann und kein Textfeld wo der User wie bei meiner Match-Abfrage was eintippen kann.Den kannst Du wieder löschen. Bei LIKE ist kein FULLTEXT Index notwendig. Nur bei MATCH ist dieser nötig und da fragst Du bekanntlich nur die drei Spalten ab.
Zum Debugging empfehle ich Dir einfach mal die Abfrage per echo ausgeben zu lassen. Also so:Code: Alles auswählen
: if ($marke) { $sql .= " AND Marke LIKE '%" . mysql_real_escape_string($marke) . "%'"; } [b]echo $sql;[/b][/quote] Ein [b]echo $sql;[/b] hatte ich auch schon drinnen. Das zeigt mir dann die Querys an. Ich erhalte als echo $sql;: [b]SELECT * FROM test WHERE MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('Produktfinder') AND Marke = '%Treck%'Suchergebnisse: 0[/b] Es passt ja eigentlich alles in der Query. Das einzige was nicht passt ist das blöde Sprungmenü für die Marken. Immer wenn ich mir aus dem Sprungmenü eine Marke wie z. B. "Treck" auswähle - ob ich nun einen Suchbegriff wie z. B. Bergschuhe in das Textfeld getippt habe oder nicht -, spielt dabei keine Rolle -, erhalte ich permanent 0 Ergebnisse. Wenn ich allerdings nur Bergschuhe in das Suchfeld eintippe und das Sprungmenü (Marke auswählen) unberührt lasse, funzt alles wie gewünscht. Aber eben nur dann, wenn keine Marke aus dem Sprungmenü ausgewählt wurde und wenn doch, dann halt eben immer 0 Ergebnisse
Code: Alles auswählen
echo '<form action="./mysql/search-fulltext1.php" method="post">';
echo '<div id="search-mysql">';
echo '<input type="text" name="suche" size="20" ';
echo "onfocus=\"if (this.value =='Produktfinder') { this.value=''}\" ";
echo "onblur=\"if (value == '') {value='Produktfinder'}\" value=\"Produktfinder\" />";...
Code: Alles auswählen
// Querey
$sql = "SELECT * FROM beauty WHERE";
if ($suchwort) $sql .= " MATCH (Bezeichnung, Beschreibung, Marke) AGAINST('" . mysql_real_escape_string($suchwort) . "')";
if ($marke)
{
if ($suchwort) $sql .= " AND";
$sql .= " Marke = '%" . mysql_real_escape_string($marke) . "%'";
}
// if sucheingabe
$db_erg = mysql_query( $sql );
if ( ! $db_erg )