Links trennen

Hy,

Ich muss mehrere links in eine spalte schreiben …
Gibts es ne möglichkeit, die links die per leerzeichen getrennt sind beim INSERT mit zb einem | zu trennen und dieses dann als ende eines links zu definieren ?

Danke

DB Struktur

[TABLE=„class: data ajax“]
[TR]
idtitlelinks
password[/TR]
[/TABLE]

Wenn deine Links schon URL-encoded sind und keine Leerzeichen mehr enthalten, dann ist das Leerzeichen ja als Trennzeichen schon geeignet. Das kannst natürlich durch jedes andere Sonderzeichen ersetzen, dass nicht in den Links vorkommt. Hast dir die Frage doch eigentlich selbst beantwortet. Ob es allerdings geschickt ist, Mehrfachwerte in einer Spalte und nicht als 1:n Relation zu modellieren, das ist eine andere Sache. So musst beim Auslesen immer wieder den Split machen und bei der exakten Suche nach einem Link diese in ein LIKE umsetzen und dann selbst das EQUAL (nach Split in der Ergebnismenge) testen

Okay danke versteh schon :slight_smile:

Noch ne frage .

Das ist mein insert

[PHP]$sql_befehl = mysql_query(„INSERT INTO links.links (id, containerid, link) VALUES (NULL, ‚$lastid‘, '“.$_POST[‚links‘]."'); ");[/PHP]

keine angst ist nur local wegen der sicherheit :slight_smile:

Die links werden ja in eine textarea eingegeben und dann in die DB eingetragen
Ich trage zuerst den title ein in eine tabelle namens container , dann hohl ich die last_insert_id , nehm diese und füg die links dann in die tabelle links ein . Containerid ist dann die last_insert_id.

Das heißt ich kann die links zum container zurweisen.

Meine frage nur, es wäre halt gut , wenn nun die links in der textarea getrennt werden bei nem leerzeichen (ende eines links) und jeder link in eine eigene spalte kommt mit der containerid natürlich …
Das wäre doch viel besser oder ?
Nur wie bekomm ich das hin?

Ich denke, am einfachsten verwendest die split-Funktion und machst aus den Links ein Array. Dann brauchst eine weitere Tabelle für diese Links mit drei Spalten Id, Parent_ID, Link_Value. In die Parent_ID kommt deine $lastid als Verweis und in den Link_Value ein einziger Link. Dann hast du eine 1:n-Relation zwischen einer Eingabe-Id und den dort eingegebene n Links. Den Insert machst durch Loopen durch das Array.

Den ansatz habe ich auch schon versucht.

Also ich habs so:

[PHP]$links = split(„[\n|;]“,$links);print_r($links);[/PHP]

Ausgabe ist dann :

Array ( [0] => http://link1.de [1] => http://link2.de [2] => link3.de )

wenn ich nun das mache :

[PHP]print_r($links[0]);[/PHP]
bekomm ich die ausgabe aus array 0 .

Wie trage ich das nun in die db ein ?

muss ich jedem Array eine variable zuweisen also
[PHP]$link1= $links[0];
$link1= $links[1];[/PHP]

usw ?

PHP: foreach - Manual

Puh danke endlich etwas weiter :slight_smile:

So siehts nun aus :

[PHP]$links = split(„[\n|;]“,$links);foreach ($links as $value) { echo „Value: $value
\n“;}[/PHP]

Bekomme dann diese ausgabe :

Value: TAFEU | webconsulting der extraklasse seit 1998
Value: http://link2.de
Value: Soziale Dreigliederung als Gesellschaftsform

Nun wie trage ich das in die db ein.
Also jetzt hab ich ja die variable $value die aber noch immer 3 links enthält ?

Nein, $value enthält immer nur einen einzigen Link, die Schleife wird nur 3 Mal durchlaufen, jedes Mal wird ein anderer Link ausgegeben. Das könntest leicht sehen, wenn du außen $count=0 setzt und im foreach $count++ und dann $count im echo mit ausgibst.
[PHP]
$count++;
echo „Value $count: $value
\n“;
[/PHP]

Statt echo musst in der Schleife nun das richtige INSERT für die Link-Details bilden (erst mal mit ECHO nur ausgeben) und mittels mysql_query einfügen (aber nur, falls trim($value) != „“, könnten Leerzeilen oder Zeilen nur mit Leerzeichen drin sein).

EDIT: Es klappt :slight_smile:

Aber das mit den | ist noch offen…

Also das

$links = split(„[|;]“,$links);

Wie kann ich da ein leerzeichen definieren statt dem | ?

Danke danke danke !!!

EDIT:
Hmm

$links = Split($links, " ")

soltte doch klappen , tuts aber nicht,
In der DB ist der eintrag, alle links in einer spalte , leerzeichen wird aber in die DB mit eingetragen :frowning:

Wenn du die Leerzeichen ersetzen willst machst du das mit str_replace: siehe PHP: str_replace - Manual auch die Beispiele ansehen.

danke habs schon geschafft

$links = explode(" ", $links);
foreach ($links as $value) {

split ist übrigens deprecated. Eine Alternative wäre etwa preg_split.