Mit Formularabfrage Datenbank durchsuchen und Ergebnis ausgeben.

Verzeiht, dass ich mich so dumm anstelle. Ich poste mal den ganzen kleinen Quellcode.
"Abfrage" hab ich auskommentiert, das ist unwichtig. Es geht um "Abfrage2".

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>NEA-Bibliothek</title>
</head>
<body>

<?php
$verbindung = mysql_connect("localhost","root","")
or die ("keine Verbindung m&ouml;glich. Benutzername oder Passwort sind falsch.");
mysql_select_db("NEA-Bibliothek")
or die ("Diese Datenbank existiert nicht.");
?>

<h1>Formular f&uuml;r Suchmaske</h1>

<form action="nea.php" method="post">
<p>Suchbegriff:<br><input name="suchbegriff" type="text" size="30" maxlength="100"></p>
<input type="submit" name="abschicken" value="Anfrage abschicken" />
<input type="reset" value="Anfrage l&ouml;schen" />
</form>

<hr style="color:red; background: red; height:5px;">

<?php
if("" == $_POST['suchbegriff']) {
echo "Bitte geben sie einen Suchbegriff ein";
}
echo $_POST['suchbegriff'];
?>

<hr style="color:red; background: red; height:5px;">


<?php //$abfrage = "SELECT * FROM kataloge";
//$ergebnis = mysql_query($abfrage);
//while($row = mysql_fetch_object($ergebnis))
// {
// echo "$row->hersteller, $row->typ, $row->date, $row->titel, $row->schlagworte <br>";
// }
?>

<?php $abfrage2 = "SELECT * FROM kataloge WHERE schlagworte LIKE "%'.$_POST['suchbegriff'].'%"";
echo "$row->hersteller, $row->typ, $row->date, $row->titel, $row->schlagworte <br>";

?>

</body>
</html>


Was mach ich falsch? Mir fehlt halt ne ganze Menge Hintergrundwissen, ich arbeite dran es mir anzueignen.
 
Zuletzt bearbeitet:
Ich hab doch ziemlich exakt den Code von msslovi0 kopiert und nur meine Werte verändert.

Die Tabelle heißt definitiv kataloge, überprüfen möchte ich die Spalte schlagworte und vergleichen mit dem in

<?php
if("" == $_POST['suchbegriff']) {
echo "Bitte geben sie einen Suchbegriff ein";
}
echo $_POST['suchbegriff'];
?>


abgefragten Suchbegriff.

Bin ich doof? Ist ne rhetorische Frage,
 
Du übergibst die $abfrage2 nicht mit mysql_query() an die Datenbank und holst dir auch kein Ergebnis mit mysql_fetch_object() zurück.
 
Okay....

heißt, die abfrage2 ist erstmal richtig?

Aber ich muß vor dem echo noch ein mysql_query und ein mysql_fetch_object zwischensetzen?

Ich schau mir die Klassen mal an. Danke schonmal.
 
So, ich hab jetzt mal rumgeändert auf:

<?php $abfrage2 = "SELECT * FROM kataloge WHERE schlagworte LIKE "%'.$_POST['suchbegriff'].'%"";
$ergebnis = mysql_query('$abfrage2');
while ($row = mysql_fetch_array($ergebnis)) {
echo "$row->hersteller, $row->typ, $row->date, $row->titel, $row->schlagworte <br>";
}


Lacht nicht, aber geht immer noch nicht. ;)
 
Ähm, die Profis dürfen mich schlagen, aber mysql_fetch_array gibt doch ein ARRAY, und kein OBJEKT zurück, oder?

Also kann der Zugriff via $row->hersteller gar nicht klappen, sondern muss via
PHP:
$var = $row['hersteller'];
erfolgen.

Das hier hat nichts mit Klassen zu tun!

:)
 
Ich mache doch gar nicht den Zugriff via $row->hersteller, sondern gebe das mit echo aus.
Im endeffekt möchte ich nur die komplette Zeile ausgeben. Wie auch immer das klappt...
 
Doch, doch, du vermischt das lustig. Ich weiß auch nicht, warum du oben noch mit mysql_fetch_object() arbeitest und jetzt auf mysql_fetch_array() umschwenkst (wobei ich auch Arrays bevorzuge). Das also anpassen und das auch ändern:
PHP:
$ergebnis = mysql_query('$abfrage2');
und zwar in:
PHP:
$ergebnis = mysql_query($abfrage2);
 
Ich vermische das, weil ich ehrlich gesagt absolut nicht weiß was ich tue... Da fehlte mir schon immer das Gefühl für.

AUch wenn ich die ' entferne bleibt die Fehlermeldung..
 
Fehlermeldung? Von einer Fehlermeldung war bislang nicht die Rede.
 
Doch doch, hatte ich erwähnt. Oder? *grübel*

Parse error: syntax error, unexpected T_STRING in C:\Programme\XAMPP\htdocs\xampp\NEA.php on line 51

Das erscheint wenn ich die Seite aufrufe. Klingt ja nach einem einfachen vergessen eines Semikolons oder so. Aber ich seh da nichts.

P.S.: Line 51 ist die in der $abfrage2 beginnt.
 
Wir nähern uns: ich hab jetzt den Syntax-Error behoben.

Allerdings gibt er mir jetzt einfach nur den Suchbegriff erneut aus, mein

echo "$row->hersteller...", sollte aber doch die gefundene Zeile ausgeben, oder??
 
Achso? Ich bin verwirrt. ;)

Also mach ich jetzt $row['hersteller'], $row['typ'], etc. pp.?

EDIT: es sieht jetzt so aus:

<?php $abfrage2 = "SELECT * FROM kataloge WHERE schlagworte LIKE '%".$_POST['suchbegriff']."%' ";
$ergebnis = mysql_query($abfrage2);
while ($row = mysql_fetch_array($ergebnis)) {
echo "$row['hersteller'],$row['typ'],$row['date'],$row['titel'], $row['schlagworte'] <br>";
}


Jetzt hab ich wieder einen Syntax-Error..Warum??

btw: kann man nicht einfacher eine komplette Zeile ausgeben lassen?
 
Okay, ich hab's geändert zu:

echo '<p>Hersteller: '.$row['hersteller'].'</p>';
echo '<p>Typ: '.$row['typ'].'</p>';
echo '<p>Datum: '.$row['date'].'</p>';
echo '<p>Titel: '.$row['titel'].'</p>';
echo '<p>Schlagworte: '.$row['schlagworte'].'</p>';
}


Jetzt geht es. Danke schonmal an euch!
 
Ihr hasst mich sicherlich schon, aber einen hätt ich noch:

Ich würde gerne schon im Vorfeld alle schlagworte die momentan in der Datenbank liegen anzeigen lassen.
Das ist ja erstmal so einfach, dass sogar ich das hinbekommen habe.

Allerdings wäre es natürlich schön, wenn diese Schlagworte alphabetisch angezeigt werden und am besten doppelte rausgefiltert werden.

Ich hab mich darüber gerade mit einem Kumpel unterhalten, der meinte, wenn man nur eine tabelle hat, sei das sehr kompliziert. Dann hat er versucht es mir zu erklären:

du legst ein array an $schlagworte = new Array();

du liest alle schlagworte ein und explodest explode() sie jeweils mit komma oder mit leerzeichen, was da halt in der spalte drin ist, in ein neues array $schlagworte_one = explode($row['schlagworte'],',');

danach durchläufst du das array $schlagworte_one

foreach($schlagworte_one AS $value) {

und guckst hier drin ob das schlagwort schon in $schlagworte ist mit einer weiteren foreach schleife (vll. gibt es auch ne nette funktion in php dafür) vorher noch ne testvariabel $add reinmachen
$add = true;
foreach($schlagworte AS $value_two)
if($value = $value_two)
$add = false;
}

if($add)
{
gibt es nicht im array also hinzufügen an letzter stelle
$length = array_length($schlagworte);
$schlagworte[($length-1)] = $value;
}

wenn das durchgelaufen ist dann kannst du mit einer weiteren foreach alle schlagworte ausgeben

foreach($schlagworte AS $value) {

echo $value.', ';

}


da bin ich dann ausgestiegen... geht das einfacher? Oder ist das echt so eine komplizierte Sache?
 
Na ja, das klappt aber nur, wenn in jeder Zelle nur ein Eintrag vorhanden ist.

Ich habe in einer einzigen Zelle bis zu 30 Begriffe - meine schlagworte halt. Die sollen jetzt aber Spaltenübergreifend alphabetisch sortiert werden.

Wenn ich also 30 Einträge insgesamt habe, also 30 Zeilen, dann möchte ich den Inhalt der daraus reslutierenden 30 Zellen alphabetisch wiedergegeben haben. Das sind aber halt nicht 30 Begriffe, sondern evtl. 300. Das macht das Problem wohl so kompliziert.
 
Aso...

Hm... Sortieren kann PHP auch. Das ist, wenn die Schlagworte in einem Array vorliegen, eine Zeile. Schau mal bei den Array-Funktionen bei SelfPHP. Halt irgendeine, die "SORT" im Namen hat :D

Das mit den Doppelten ließe sich auch anders lösen.
Missbrauchen wir ein Assioatives Array dafür:
Der Grundgedanke: Zu jedem Schlüssel, dass ein Array hat, kann es nur EINEN Wert geben.

Also speichern wir die Schlagworte mit dem Schlagwort als Schlüssel in dem Array.

Während man die also ausließt:

PHP:
$schlagwoerter = array();
while(waehrend_des_auslesens){
$schlagwoerter[$schlagwort] = $schlagwort;
}

Taucht jetzt zweimal das Schlagwort "Sumsebiene" auf, so wird es beim zweiten Auftreten wieder mit dem Schlüssel "Sumsebiene" ins Array geschrieben. Da der Schlüssel aber Eindeutig ist, es also nicht zwei Arrayelemente mit dem Schlüssel "Sumsebiene" geben kann, ist danach jedes Element nur einmal im Array drin :)
 
Zurück
Oben Unten