WinFuture-Forum.de: Datenbanksätze Mit $_post Nach Übereinstimmungen überprüfen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

Datenbanksätze Mit $_post Nach Übereinstimmungen überprüfen


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 20:04

Hallo,
brauche Hilfe bei einem Script welches Ein Suchwort mit zwei Spalten einer großen Tabelle überprüfen soll und als Ergebniss alle übereinstimmungen ausgeben soll.
Es ght um Englisch und Deutsche Begriffe von Adobe Photoshop.

1. Suche nach "entfernen" soll ergeben:
Weiß entfernen - Remove White Matte
Schwarz entfernen - Remove Black Matte
Rand entfernen - Defringe

...also 3 Ausgaben, da in jeder das Wort entfernen vorkommt.

2. Suche nach "weiß" soll ergeben:
Weiß entfernen - Remove White Matte

3. Suche nach "Matte" soll ergeben:
Weiß entfernen - Remove White Matte
usw
...also immer die Deutsche und Englische Bedeutung.

So, ich habe es nun so probiert dass ich alle Datensätze in eine Array schreibe, komme mit der Version allerdings nicht weiter. Dann habe ich noch versucht im SQL-Query mit like zu arbeiten. Das funktioniert schonmal super, aber er findet nicht alles!

Hier mal mein Code den ich bisher habe:
if($_POST['suche']){
   
   echo "Suchergebnisse:";
 
   $sql="
	   SELECT
		   lcase(de) AS de, lcase(en) AS en
	   FROM
		   hp_photoshop
	   WHERE
		   en LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	   OR
		   de LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	   ";
   $sql="SELECT de,en FROM hp_photoshop";
   
   $result=mysql_query($sql);
   $result=mysql_fetch_array($result);
   echo "<pre>";
   print_r($result);
   
   $sql="SELECT de,en FROM hp_photoshop";
   $result=mysql_query($sql);
   while($row = mysql_fetch_assoc($result)) {
		   print_r($row);
	   }
 
   echo "
   Ihre Suche nach <b>".$_POST['suche']."</b> ergab:
   ";
   echo $result[de]." - ".$result[en];
   
   }
Es ist alles sehr durcheinander da ich erstmal herausfinden möchte wie ich es am besten machen kann!
Die Tabelle ist so aufgebaut:
id	de					en 
1	Weiß entfernen		Remove White Matte	  
2	Schwarz entfernen	Remove Black Matte


Wer konkret weiß wie man üblicherweise soeine Suche in PHP durchführt kann mir ja mal ein paar Tipps geben!

Gruß,
Toasterfraktion
0

Anzeige



#2 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 20:43

   $sql="
	   SELECT
		   lcase(de) AS de, lcase(en) AS en
	   FROM
		   hp_photoshop
	   WHERE
		   en LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	   OR
		   de LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	   ";

würd ich als richtig erachten und hätte es wahrscheinlich ähnlich bis gleich gemacht.
wennst du aber danach das schreibst:
   $sql="SELECT de,en FROM hp_photoshop";

kann das ja nicht gehen weil du ja den $sql-String überschreibst und er eigentlich alle Werte innerhalb der Spalten ausgeben sollte.

bitte lass den zweiten $sql=.... mal weg und schau was dann rauskommt

bin gern bereit mich da belehren zu lassen (1/2 Jahr PHP in der Schule is vielleicht doch nicht genug)

Dieser Beitrag wurde von lloiser bearbeitet: 14. August 2008 - 20:44

Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#3 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 20:52

Ja, klar! Das ist alles auch nur zusammengewürfelt und der zweite sql solle sbewusst überschreiben!
Ich habe diverse Sachen untereinander ausprobiert und da is das stehen geblieben!

Wie gesagt da werden dann nicht alle Ergebnisse ausgegeben!
0

#4 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 20:56

probiers mal hiermit:
	 ... mysql_real_escape_string(%strtolower($_POST['suche'])%) ...

hast die % vergessen

Dieser Beitrag wurde von lloiser bearbeitet: 14. August 2008 - 20:57

Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#5 Mitglied ist offline   Mr_Maniac 

  • Gruppe: aktive Mitglieder
  • Beiträge: 770
  • Beigetreten: 29. Juli 02
  • Reputation: 1
  • Geschlecht:Männlich
  • Interessen:Vieles rund um den Computer
    Musik

geschrieben 14. August 2008 - 21:02

Was auch geht:

SELECT
  lcase(de) AS de, lcase(en) AS en
FROM
  hp_photoshop
WHERE '%".mysql_real_escape_string(strtolower($_POST['suche']))."%' IN (de, en)

0

#6 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 21:13

Geht nicht so wirklich:
$sql="SELECT
  lcase(de) AS de, lcase(en) AS en
FROM
  hp_photoshop
WHERE '%".mysql_real_escape_string(strtolower($_POST['suche']))."%' IN (de, en)";


$result=mysql_query($sql);
$result=mysql_fetch_array($result);
echo "<pre>";




echo "<br />Ihre Suche nach <b>".$_POST['suche']."</b> ergab:<br />";
print_r($result);

}


Denke ich falsch? Ich habe nach "entfernen" gesucht und es sind devinitiv 2 oder 3 solche Datensätze vorhanden!
0

#7 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 21:34

IN funktioniert auch mit Spalten? ich hät glaubt nur mit werten also [spalte] in (wert1, wert2, ... wert n)

ansonsten hät ich es so gemacht
where
	 de like mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')
or
	 en like mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')

Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#8 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 21:37

Beitrag anzeigenZitat (lloiser: 14.08.2008, 22:34)

IN funktioniert auch mit Spalten? ich hät glaubt nur mit werten also [spalte] in (wert1, wert2, ... wert n)

ansonsten hät ich es so gemacht
where
	  de like mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')
 or
	  en like mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')


Was ist den daran anders, bzw was bedeutet das %?
0

#9 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 21:41

ist das selbe wie * unter der windows suche
Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#10 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 21:51

Beitrag anzeigenZitat (lloiser: 14.08.2008, 22:41)

ist das selbe wie * unter der windows suche

Also dass er alles selecten soll? Da wollte ich ja an Datensätzem sparen weil es mal sehr viele sein werden!

Ich habe nun folgendes:

Zitat

Suchergebnisse: SELECT de,en FROM hp_photoshop WHERE de LIKE 'adjust' OR en LIKE 'adjust'
Ihre Suche nach adjust ergab:
DE: Anpassen - EN: Adjust
Array
(
	[0] => Anpassen
	[de] => Anpassen
	[1] => Adjust
	[en] => Adjust
)


Und das mit diesem Code:
$sql3="
	SELECT
		de,en
	FROM
		hp_photoshop
	WHERE
		de LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	OR
		en LIKE '".mysql_real_escape_string(strtolower($_POST['suche']))."'
	";
	echo $sql3;

$result=mysql_query($sql3);
$result=mysql_fetch_array($result);
echo "<pre>";


echo "<br />Ihre Suche nach <b>".$_POST['suche']."</b> ergab:<br />";
echo "DE: ".$result[de]." - EN: ".$result[en]."<br />";
print_r($result);


Es gibt aber 2 Einträge mit Adjust, einmal Anpassen und einmal Einstellen!
Er zeigt aber nur den ersten an! Wenn ich jedoch den Query in phpmyadmin eingeben zeigt er sie mir alle gut an! :-)

Wie gehts nun weiter?

Gruß,
Toasterfraktion

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 14. August 2008 - 21:52

0

#11 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 22:03

Beitrag anzeigenZitat (Toasterfraktion: 14.08.2008, 22:51)

Also dass er alles selecten soll? Da wollte ich ja an Datensätzem sparen weil es mal sehr viele sein werden!

Schlecht ausgedrückt von mir: das * unter Windows steht ja auch für eine beliebig lange Zeichenfolge. wennst also *a* in der Windows-Suche eingibst kommt alles worin ein "a" vorkommt. so ähnlich is % auch. %a% liefert alle einträge mit ein "a" drinnen

...
echo $sql3;

while($row=mysql_fetch_array($result))
{ 
extract($row);
echo $de." - ".$en;
}


ich glaub so müsste es funktionieren. Da du ja mehrere Elemente hast die der Suche entsprechen musst du das Ergebnis Zeile für Zeile ($row) durchgehen und auslesen.

EDIT: fehler im code ausgebessert

Dieser Beitrag wurde von lloiser bearbeitet: 14. August 2008 - 22:06

Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#12 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 22:09

Achso ja das mit dem % klingt schonmal super, gibst da irgendwo nen offiziellen Syntax zu, weil mit SELECT lcase(de) AS de, lcase(en) AS en FROM hp_photoshop WHERE '%entfernen%' IN (de, en)
findet er schonmal nichts, auch nicht in phpmyadmin...

Und das mit der Schleife... klar.... :-D danke!

Jetzt muss nurnoch der Syntax funzen, wo finde ich den?
0

#13 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 22:15

$sql3="
	SELECT
		de,en
	FROM
		hp_photoshop
	WHERE
				de LIKE mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')
		OR
				en LIKE mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')
	";

Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

#14 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 22:25

Ne Ne, das muss auf jedenfall so sein, dort wird doch noch mit Variablen von PHP gearbeitet:
Anstatt
mysql_real_escape_string('%'.strtolower($_POST['suche']).'%')

muss es so heißen
de LIKE '%'".mysql_real_escape_string(strtolower($_POST['suche']))."'%'
Nur damit geht es auch wieder nicht!


Er gibt einfach gar nichts aus, ich denke wir haben noch irgendwas üebrsehen oder nicht beachtet:
$sql4="
	SELECT
		de,en
	FROM
		hp_photoshop
	WHERE
				de LIKE mysql_real_escape_string('%'".strtolower($_POST['suche'])."'%')
		OR
				en LIKE mysql_real_escape_string('%'".strtolower($_POST['suche'])."'%')
	";
	
	echo $sql3;

$query=mysql_query($sql3);
$result=mysql_fetch_array($query);
echo "<pre>";


echo "<br />Ihre Suche nach <b>".$_POST['suche']."</b> ergab:<br />";
echo "DE: ".$result[de]." - EN: ".$result[en]."<br />";

while($row=mysql_fetch_array($query))
{
extract($row);
echo $de." - ".$en;
}

print_r($result);


Gruß,
Toasterfraktion

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 14. August 2008 - 22:29

0

#15 Mitglied ist offline   lloiser 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 13. August 08
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. August 2008 - 22:29

$sql4="...";

$query=mysql_query($sql3);


ich hoffe das steht nicht so in deiner datei drinnen :veryangry:
Denken ist Arbeit
Arbeit ist Energie
und Energie soll man sparen
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0