Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Zerteilung per EXPLODE“

Ben78

Nicht mehr ganz neu hier

Hey PSD-Leutz,

wie funzt denn die Zerteilung mehrerer Wörter in einem Eingabefeld mittels "explode", welche durch ein Leerzeichen getrennt sind? Mein erster Versuch mit "explode" funzt nicht so ganz. Bin schon gespannt, was ich hier wieder falsch mache bzw. gemacht habe...bin immer noch ein anfägner-trottel:motz:

PHP:
$arrayname = explode(" ",$suchwort);

$abfrage1 = "SELECT * FROM tabelle WHERE Mitarbeiter LIKE '%" . mysql_real_escape_string($arrayname) . "%' AND Abteilung LIKE '%" . mysql_real_escape_string($abteilung) . "%' LIMIT 0,1";
$output = mysql_query($abfrage1);
 

Duddle

Posting-Frequenz: 14µHz

AW: Zerteilung per EXPLODE

Die Funktion explode() funktioniert genau so, wie es in der Dokumentation beschrieben ist.

Was du genau falsch machst, siehst du (hoffentlich) wenn du dir einfach mal $abfrage1 als Text ausgeben lässt. Die Zeile, die du dann siehst, wird exakt so an den MySQL-Server geschickt. Wenn dir dann immer noch nicht auffällt, was falsch ist, sitzen die Grundlagen für MySQL-SELECTs nicht.

Achja, hilfreich kann hier auch die Funktion mysql_error() sein.


Duddle
 

cebito

undefined

AW: Zerteilung per EXPLODE

$arrayname ist kein String sondern ein Array, bestehend aus den Wörtern des vorherigen Strings $suchwort. Du kannst also nicht mysql_real_escape_string($arrayname)in der Query verwenden, da "mysql_real_escape_string" einen String erwartet.
Hier mal ein explode-Beispiel:
PHP:
<?php
 $string = "Das ist eine Zeichenkette";
 $array = explode(" ", $string);
    for($i=0; $i < count($array); $i++) {
       echo $array[$i] . "<br>";
    }
?>
Ausgabe:

Das
ist
eine
Zeichenkette


Edith sagt (wie Duddle schon meint):

PHP:
if (mysql_errno) echo mysql_error ();
hinter die Query geschrieben soll echt Wunder wirken...
 
Zuletzt bearbeitet:

Ben78

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

<?php
$string = "Das ist eine Zeichenkette";
$array = explode(" ", $string);
for($i=0; $i < count($array); $i++) {
echo $array[$i] . "<br>";
}
?>

So hatte ich das anfangs auch in meinem Skript stehen. Hierdurch wird mir $suchwort nur in HTML ausgegeben. Ich brauche es aber in meiner Query und komme nicht drauf, wie ich das anstellen soll.
 

Ben78

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

Also das hier habe ich jetzt wieder in meinem Skript stehen. Hier wird mir aber die Variable $suchwort nur in HTML (zwecks dem echo) ausgegeben. Ich versuche schon seit ca 4,5 Std. rauszubekommen, wie ich das zerteilte $Suchwort in meine Query bekomme...mit Pausen zwischendurch versteht sich...:(
PHP:
 $array = explode(" ", $suchwort);
    for($i=0; $i < count($array); $i++) {
       echo $array[$i] . "<br>";
    }
 

cebito

undefined

AW: Zerteilung per EXPLODE

Was willst du jetzt? $suchwort aufsplitten? Dann nimm für deine Query die einzelnen Worte aus $array...
 

Ben78

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

Was willst du jetzt? $suchwort aufsplitten? Dann nimm für deine Query die einzelnen Worte aus $array...

Ja genau, dass versuche ich de ganze Zeit. Also $suchwort aufsplitten. Wie mache ich dass? Also für meine Query die einzelnen Worte aus $array nehmen. Ich habe es mit $array[$i] . "<br>" in meiner Query probiert...funzt aber netttttttttttttttttttttt.:motz::':)uhm::motz:
 

Ben78

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

Erstmal vielen Dank @cebito

Das Tutorial beschreibt genau mein Prob.. Habe natürlich gleich versucht, mein Vorhaben gemäß dem Tut. umzusetzen. Aber es will einfach nicht funktionieren.

Hier mal meine versuchte Umsetzung:
PHP:
$suchwort_array = explode(" ", $suchwort);




$abfrage1 = 'SELECT * FROM tabelle WHERE ';

for($i=0; $i < count($suchwort_array); $i++)
{
$abfrage1 .= "(Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[$i]) . "%' OR Abteilung LIKE '%" . mysql_real_escape_string($abteilung) . "%' LIMIT 0,1)";

if($i<count($suchwort_array)-1){ 
            $abfrage1 .= ' and '; 

        } 
        //verknüpfung der einzelnen worte mit und 
    } 			

$output = mysql_query($abfrage1);
 

Chriss1987

me.drinkCoffee();

AW: Zerteilung per EXPLODE

Hi Ben78,

da ich nicht genau weiß, wie viele Wörter in dem Input erlaubt sind,
hier mal 2 Beispiele, wie soetwas aussehen könnte:

mit genau 2 erlaubten Wörtern
PHP:
<?php
// Beispiel, wenn im Input nur genau 2 Wörter erlaubt sind
# das erste Wort für Mitarbeiter
# das zweite Wort für die Abteilung
$suchwort_array = explode(" ", $suchwort);

if (count($suchwort) == 2)
    {
        $abfrage1 = "SELECT * FROM tabelle WHERE Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[0]) . "%' AND Abteilung LIKE '%" . mysql_real_escape_string($suchwort_array[1]) . "%' LIMIT 0,1";
    }
else
    {
        die('nicht alle erforderlichen Werte übergeben!');
    }

?>

mit mehreren erlaubten Wörtern (wobei ich dabei nicht genau weiß, wie du bestimmen möchtest, welches Wort wofür steht, außer du gibst ne feste Reihenfolge vor)(hier nur ein Beispiel, wie du die Suchergebnisse auf die Mitarbeiter anwendest)
PHP:
<?php
// Beispiel, wenn im Input mehrere Wörter erlaubt sind
$suchwort_array = explode(" ", $suchwort);

// Abfrage-Array definieren
$sql = array();

// für jedes Suchwort ein neues Element dem Abfrage-Array hinzufügen
foreach ($suchwort_array AS $item)
    {
        $sql[] = "Mitarbeiter LIKE '%" . mysql_real_escape_string($item) . "%";
    }

// wenn Suchwörter übergeben wurden
if (count($sql) > 0)
    {
        // alle Elemente des Abfrage-Arrays mit OR (oder AND) verbinden und an die eigentliche SQL-Abfrage hängen
        $abfrage1 = "SELECT * FROM tabelle WHERE (".implode(" OR ", $sql).") AND Abteilung LIKE '%" . mysql_real_escape_string($abteilung) . "%' LIMIT 0,1";
    }
// wenn nicht, dann alle Einträge aus der Tabelle auslesen (oder das Script abbrechen oder sonst was machen)
else
    {
        $abfrage1 = "SELECT * FROM tabelle";
    }

?>

Schöne Grüße aus dem Sauerland!
Chriss
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

PHP:
$suchwort_array = explode(" ", $suchwort);




$abfrage1 = 'SELECT * FROM tabelle WHERE ';

for($i=0; $i < count($suchwort_array); $i++)
{
$abfrage1 .= "(Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[$i]) . "%' OR Abteilung LIKE '%" . mysql_real_escape_string($abteilung) . "%' LIMIT 0,1)";

if($i<count($suchwort_array)-1){ 
            $abfrage1 .= ' and '; 

        } 
        //verknüpfung der einzelnen worte mit und 
    }             

$output = mysql_query($abfrage1);

Hallöchen.

Du solltest dir zunächst im Klaren sein was du genau also Query an die DB senden willst.

Hier ein Beispiel wie es bei deinem Konstrukt letztendlich aussehen soll:
PHP:
<?php
$sql="SELECT * FROM tabelle 
WHERE 
(
Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[0]) . "%' 
OR
Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[1]) .  "%' 
OR
Mitarbeiter LIKE '%" . mysql_real_escape_string($suchwort_array[2]) .  "%' 
)
AND Abteilung LIKE '%" . mysql_real_escape_string($abteilung) . "%' 
LIMIT 0,1";
?>
Das wäre zumindest meine Folgerung auch wenn du dir mit der Abteilung noch nicht so sicher bist ob du AND oder ob du OR nimmst. (laut deinen Codes)

Wie du an dem Muster siehst ist es doch eindeutig was durch eine Schleife laufen sollte, und vorallem was nicht. Dein Ansatz ist nicht schlecht nur schließt du das query in der Schleife ab. Setze die Abteilung außerhalb der FOR Schleife und du hast deine Lösung.

Weiterhin versuch ein Query das nicht funktioniert folgendermaßen zu debuggen:

PHP:
<?php
$output = mysql_query($abfrage1) or die(mysql_error()."<br>".$abfrage1);  
?>
Das SQL Statement würde ich mir generell mit ausgeben lassen, da mysql_error() nicht sehr Aussagekräftig ist.

Gruß M3g4
 
Zuletzt bearbeitet:

Ben78

Nicht mehr ganz neu hier

AW: Zerteilung per EXPLODE

Vielen Dank für die vielen Tipps. Hat mir alles geholfen. Ich habe aus dem LIKE ein MATCH gemacht, damit die Belastung nicht zu heftig wird.

VERY BIG THX 4 HLP!;)
 

CIX88

Aktives Mitglied

AW: Zerteilung per EXPLODE

Bei den vielen LIKEs kann man das auch sicher abkürzen:
PHP:
$suchwort_array = explode(" ", $suchwort);

$sql = "
 SELECT * FROM tabelle 
 WHERE Mitarbeiter REGEXP '".implode('|',$suchwort_array)."' 
 LIMIT 0,1
";

Ist jetzt nur so eine Idee, und ob das nun schneller oder langsamer ist weis ich nicht.
 
Zuletzt bearbeitet:

stylux

Pixelchemiker

AW: Zerteilung per EXPLODE

Nur so als Anregung :)
PHP:
<?php
 
$suchwort_array = explode(" ", $suchwort);
$query = "SELECT * FROM `tabelle` WHERE "; 
$query_array = array(); 
foreach($suchwort_array AS $wort){
 $query_array[] = "`Mitarbeiter` LIKE '%" . mysql_real_escape_string($wort) . "%'";
}
$query .= implode(" OR ", $query_array);
 
?>

Wenns um 10 Datensätze geht isses wohl wurscht ob LIKE oder ein Regulärer Ausdruck zum Einsatz kommen. Wenn man da allerdings einige Nullen anhängt, dann wird LIKE ganz schnell die Oberhand gewinnen.

Wenn man die spezifischen Funktionalitäten, die Reguläre Ausdrücke zur Verfügung stelllen nicht braucht, dann sollte man sie in diesem Zusammenhang eher nicht benutzen denke ich.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.158
Beiträge
2.581.869
Mitglieder
67.224
Neuestes Mitglied
Aliyah79
Oben