online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Uesch vom 28.06.2019, 15:36 Options

My SQL

Hallöchen,

ich möchte ein Lexikon bauen und habe nun folgendes Problem:

$sql = "SELECT
spanisch, deutsch
FROM
words
WHERE

hinter das Where soll nun sowas kommen wie:
deutsch = '"$eingabe"'";


Nun werden allerdings nur die Einträge angezeigt, die GENAU dem entsprechen, was ich eingegeben habe. Nehmen wir aber einmal an, ich gebe "Haus" ein. Dann soll er sich alle Wörter raussuchen, in denen das Wort Haus vorkommt, also z.B. auch behausen. Versteht ihr was ich meine? Hat jemand eine Idee wie ich das am besten bewerkstelligen kann?

Gruß,

Üsch


Antwort schreiben

Antwort 1 von DeluxeStyle vom 28.06.2019, 15:53 Options

du solltest dich ein bisschen in den Standard von SQL einarbeiten

Such mal nach LIKE...

Antwort 2 von son_quatsch vom 28.06.2019, 15:53 Options

... WHERE deutsch LIKE '%haus%'

Antwort 3 von Uesch vom 28.06.2019, 16:12 Options

Naja, so kann man das auch nicht machen.
Da zeigt er ja trotzdem immer nur das an, was genau dem entspricht, was man eingegeben hat.
Hab jetzt:
$sql = "SELECT
spanisch, deutsch
FROM
words
WHERE
deutsch LIKE '$search'";

Hab "Brot" und "Knäckebrot" in der Datenbank.
Wenn ich Brot eingebe, zeigt er trotzdem nur die Übersetzung von Brot an, nicht von Knäckebrot!

Antwort 4 von DeluxeStyle vom 28.06.2019, 16:15 Options

deutsch LIKE '%$search%'";

% hast du vergessen

Antwort 5 von Proggi vom 28.06.2019, 16:18 Options

da du mit Variablen arbeiten möchtest, must du diese richtig einbauen... bei einfachen Variablen wie $eingabe kannst du einfach folgendes machen:

$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch='$eingabe';";


wenn die Variable aus einem Array stammt, solltest du mit verknüpften Zeichenketten arbeiten damit das bei möglichst vielen PHP-Versionen richtig arbeitet:

$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch='".$_POST['eingabe']."';";


vorsicht bei Formularfeldern, beachte das die eingabe eventuell auf das vorkommen von SQL-eigenen zeichen wie insbesondere das Hochkomma eventuell geprüft werden muss:

$sql = "delete FROM words WHERE deutsch='".$_POST['eingabe']."';";

könnte eventuell alles löschen, wenn jemand folgende Eingabe tätigt:

' or '1'='1


wenn auch begriffe gesucht werden sollen, die ähnlich lauten, benutze wie vermerkt
like
mit dem Wildcard
%


$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch like '".$_POST['eingabe']."';";


erfordert die Eingabe von % durch den Benutzer im Eingabefeld z.B.

regen%

findet Regen, regenerieren usw

beim code
$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch like '%".$_POST['eingabe']."%';";


wird bei regen aber auch
deregenerieren etc gefunden, wenn der benutzer nur Regen ohne eigene Wildcards vor oder hinter dem wort eingibt.

Antwort 6 von Uesch vom 28.06.2019, 17:00 Options

Danke erstmal!

Habe hetzt folgenden Code:
$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch like '%".$_POST['eingabe']."%';";
$result = mysql_query ($sql);  
while($row = mysql_fetch_object($result))
{  
echo
$row->spanisch;
}}


In der Datenbank habe ich drei Wörter: Haus, Brot und Knäckebrot

Wenn ich nun Brot eingebe, werden alle Wörter angezeigt, nicht nur die, die Brot enthalten. Was mache ich falsch?

Antwort 7 von Uesch vom 28.06.2019, 17:10 Options

Ok, ich habs hingekriegt!
Er schreibt die Übersetzung aber jetzt direkt hintereinander, also z.B.:

bredhouse

Wie sag ich ihm, dass er nach jedem neuen Treffer eine neue Zeile machen soll?

Antwort 8 von Proggi vom 28.06.2019, 17:52 Options

selfhtml läßt grüßen...

du kannst einen Zeilenumbruch ausgeben lassen mit echo "<br>\r\n";

ich finde den Aufbau etwas unübersichtlich, normal setze ich sowas dann in eine Tabelle und arbeite meist mit fetch_array.

while ($data = mysql_fetch_array($result)) {
echo $Data['deutsch']." <i>bedeutet</i> ".$Data['spanisch']."<br>\r\n";
}

oder du machst eine normale HTML-Zeile mit Zeilenumbruch und setzt dann in die Whileschleife

?>Blah meine Zeile <b>deutsches</b> Word Fett<br>
<?php

und ersetzt dann die Wörter die variabel sind durch
<?= $Data['deutsch'] ?>

?>Blah meine Zeile <b><?= $Data['deutsch'] ?></b> Word Fett<br>
<?php

Antwort 9 von Proggi vom 28.06.2019, 17:53 Options

sorry $Data <> $data - großkleinschrift beachten

Antwort 10 von Uesch vom 28.06.2019, 18:02 Options

Genial,

danke vielmals!

Antwort 11 von Uesch vom 30.06.2019, 12:01 Options

EIne Frage noch:

Wie kann ich es hinkriegen, dass er, wenn ich zum Beispiel "Brot" eingebe, an erster Stelle auch die Übersetzung von Brot zeigt. Denn sonst geht er einfach der Reihenfolge nach und dann kommt zum Beispiel zuerst Knäckebrot und erst ganz unten Brot.
Wie kann ich außerdem den Teil eines Wortes fett machen, nach dem gesucht wurde, also zum Beispiel: Knäckebrot?

Antwort 12 von Proggi vom 30.06.2019, 14:27 Options

Du kannst nach name sortieren lassen, auf Deutsch oder Spanisch. Es ist auch möglich ein Dropdownfeld zu machen wo man Sortieren nach Deutsch/Spanisch auswählen kann.

$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch like '%".$_POST['eingabe']."%' order by deutsch;";


oder

mit Dropdownfeld mit den werten value="deutsch" und spanisch


<select name="sortierung">
<option value="deutsch">Deutsch aufwärts</option>
<option value="deutsch desc">Deutsch aufwärts</option>
<option value="spanisch">Spanisch aufwärts</option>
<option value="spanisch desc">Spanisch abwärts</option>
</select>
$sql = "SELECT spanisch, deutsch FROM words WHERE deutsch like '%".$_POST['eingabe']."%' order by ".$_POST['sortierung'].";";


Das austauschen mit Stings läßt du in der While schleife vor dem
echo $Data['deutsch']." <i>bedeutet</i> ".$Data['spanisch']."<br>\r\n";

in der Variable $Data['deutsch'] den wert $_POST['eingabe'] suchen und durch "<b>".$_POST['eingabe']."</b>" ersetzen:
müste mit str_replace gehen - siehe dokumentation von String-manipulation...
http://de2.php.net/docs.php

Antwort 13 von Proggi vom 30.06.2019, 14:31 Options

müste so vor die zeile wo es ausgegeben wird stehen:
$Data['deutsch'] = str_replace($_POST['eingabe'], "<b>".$_POST['eingabe']."</b>", $Data['deutsch']);

Antwort 14 von Uesch vom 30.06.2019, 17:16 Options

Ich habs jetzt so gemacht:
$data['deutsch'] = str_replace($_POST['search'], "<b>".$_POST['search']."</b>", $data['deutsch']);

und dann kurz danach
echo $data['deutsch']


Was ist daran falsch?

Antwort 15 von Uesch vom 02.07.2019, 13:58 Options

Weiß keiner, was daran falsch ist?

Antwort 16 von Tolli vom 03.07.2019, 10:14 Options

Ich glaube es antwortet keiner, weil es richtig ist. ;)

Mit folgendem Code klappt es bei mir ohne Probleme:

<?php

$data['deutsch'] = "test1 test2 ein testtext";

$data['deutsch'] = str_replace($_GET['search'], "<b>".$_GET['search']."</b>", $data['deutsch']);

echo $data['deutsch'];
?>


Gibt aus:

Zitat:
<b>test</b>1 <b>test</b>2 ein <b>test</b>text


Nebenbei ist die simple Frage was daran falsch ist auch keine sehr genaue Fehlerbeschreibung...
- Gibt es eine Fehlermeldung? (--> http://de3.php.net/error_reporting)
- hast du schonmal irgendeinen Testtext in $data['deutsch'] eingesetzt?
-Syntaxfehler überprüft?

Antwort 17 von Uesch vom 03.07.2019, 14:21 Options

Du hast ja Recht, genial. Der Code geht ja!

Danke

Antwort 18 von Uesch vom 03.07.2019, 14:42 Options

Ach und wie würde man es machen, wenn man statt "bold" lieber einen bestimmten CSS-Style haben möchte?

Irgendwie so?:

$data['deutsch'] = str_replace($_GET['search'], class= 'test'.$_GET['search']., $data['deutsch']);

Antwort 19 von Uesch vom 04.07.2019, 12:08 Options

weiß das keiner?

Antwort 20 von 4711 vom 04.07.2019, 12:23 Options


$data['deutsch'] = str_replace($_GET['search'], "<span class= 'test'>".$_GET['search']."</span>", $data['deutsch']);

Ähnliche Themen

kommentare in sql datenbank
soad  04.01.2007 - 120 Hits -

sql laufwerk
micky01  21.02.2007 - 110 Hits -

SQL Variablen zuweisung
ichhabeinefrage  03.08.2007 - 256 Hits - 6 Antworten

Frage an die SQL Spezialisten
RalfH  15.11.2007 - 132 Hits - 2 Antworten

Gesucht, Programm für Datenbank Modelierung
Dr.Ma-Busen  02.06.2008 - 103 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026