Supportnet / Forum / Skripte(PHP,ASP,Perl...)
My SQL
Frage
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: [code]deutsch = '"$eingabe"'";[/code]
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 1 von DeluxeStyle
du solltest dich ein bisschen in den Standard von SQL einarbeiten
Such mal nach LIKE...
Such mal nach LIKE...
Antwort 2 von son_quatsch
... WHERE deutsch LIKE '%haus%'
Antwort 3 von Uesch
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!
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
deutsch LIKE '%$search%'";
% hast du vergessen
% hast du vergessen
Antwort 5 von Proggi
da du mit Variablen arbeiten möchtest, must du diese richtig einbauen... bei einfachen Variablen wie $eingabe kannst du einfach folgendes machen:
wenn die Variable aus einem Array stammt, solltest du mit verknüpften Zeichenketten arbeiten damit das bei möglichst vielen PHP-Versionen richtig arbeitet:
vorsicht bei Formularfeldern, beachte das die eingabe eventuell auf das vorkommen von SQL-eigenen zeichen wie insbesondere das Hochkomma eventuell geprüft werden muss:
könnte eventuell alles löschen, wenn jemand folgende Eingabe tätigt:
wenn auch begriffe gesucht werden sollen, die ähnlich lauten, benutze wie vermerkt
erfordert die Eingabe von % durch den Benutzer im Eingabefeld z.B.
findet Regen, regenerieren usw
beim code
wird bei regen aber auch
deregenerieren etc gefunden, wenn der benutzer nur Regen ohne eigene Wildcards vor oder hinter dem wort eingibt.
$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'='1wenn 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
Danke erstmal!
Habe hetzt folgenden Code:
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?
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
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?
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
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
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
sorry $Data <> $data - großkleinschrift beachten
Antwort 10 von Uesch
Genial,
danke vielmals!
danke vielmals!
Antwort 11 von Uesch
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?
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
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.
oder
mit Dropdownfeld mit den werten value="deutsch" und spanisch
Das austauschen mit Stings läßt du in der While schleife vor dem
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
$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
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
Ich habs jetzt so gemacht:
und dann kurz danach
Was ist daran falsch?
$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
Weiß keiner, was daran falsch ist?
Antwort 16 von Tolli
Ich glaube es antwortet keiner, weil es richtig ist. ;)
Mit folgendem Code klappt es bei mir ohne Probleme:
Gibt aus:
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?
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
<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
Du hast ja Recht, genial. Der Code geht ja!
Danke
Danke
Antwort 18 von Uesch
Ach und wie würde man es machen, wenn man statt "bold" lieber einen bestimmten CSS-Style haben möchte?
Irgendwie so?:
Irgendwie so?:
$data['deutsch'] = str_replace($_GET['search'], class= 'test'.$_GET['search']., $data['deutsch']);Antwort 19 von Uesch
weiß das keiner?
Antwort 20 von 4711
$data['deutsch'] = str_replace($_GET['search'], "<span class= 'test'>".$_GET['search']."</span>", $data['deutsch']);
Antwort 21 von son_quatsch
$data['deutsch'] = str_replace($_GET['search'], '<span style= "background-color: #000000; color: #FFFFFF;">'.$_GET['search'].'</span>', $data['deutsch']);
Antwort 22 von Uesch
Danke,
das Problem ist jedoch, dass ich folgendes habe: Beim Klick auf ein Wort öffnet sich ein Fenster, in dem weiteres zu diesem Wort steht. Wenn ich es nun aber so mache wie du beschrieben hast, erkennt er das Wort nicht mehr. Folgendes Script habe ich:
Die Variable "wen" speichert er dann nur solange bist das <span kommt. Also z.B. wenn ich auf das Wort "Abend" klicke und vorher in der Suche "en" eingegeben habe, speichert er nur "Ab" in der Variable. Und das "en" hat ja den <span style= "background-color: #000000; color: #FFFFFF;"> Versteht ihr?
das Problem ist jedoch, dass ich folgendes habe: Beim Klick auf ein Wort öffnet sich ein Fenster, in dem weiteres zu diesem Wort steht. Wenn ich es nun aber so mache wie du beschrieben hast, erkennt er das Wort nicht mehr. Folgendes Script habe ich:
<script type="text/javascript">
function pop(ausloeser) {
var wen = ausloeser.firstChild.data;
MeinFenster = window.open("formen.php?user="+wen, "Formen", "width=400,height=350,left=100,top=200");
MeinFenster.focus();
}
</script>Die Variable "wen" speichert er dann nur solange bist das <span kommt. Also z.B. wenn ich auf das Wort "Abend" klicke und vorher in der Suche "en" eingegeben habe, speichert er nur "Ab" in der Variable. Und das "en" hat ja den <span style= "background-color: #000000; color: #FFFFFF;"> Versteht ihr?
Antwort 23 von rendolf
wie ich in einem anderen thread schon gepostet habe, kann die lösung so aussehen:
<a href="javascript:pop('Otto');">O<span class= 'test'>tt</span>o</a>
<script type="text/javascript">
function pop(user) {
MeinFenster = window.open("formen.php?user="+user, "Formen", "width=500,height=500,left=100,top=200");
MeinFenster.focus();
}
</script>
Antwort 24 von Uesch
Und wie würde man es machen, dass er - egal, ob der erste Buchstabe groß oder klein ist - dasselbe macht. Mit diesem Code:
Danke im Vorraus,
Üsch
$data['deutsch'] = str_replace($_GET['search'], "<b>".$_GET['search']."</b>", $data['deutsch']); macht er nämlich momentan nur das Bold, was auch genau dem entspricht, was man in der Suche eingegeben hat. Ich hätte es gerne aber so, dass, wenn man "haus" eingibt, auch "Haus" fett gezeigt wird.Danke im Vorraus,
Üsch

