Webstatt.org - Community seit 2006 - 2012 (2024?)

Zeichenfolge in String löschen

user-333
07.06.2007 16:27

Hallöchen,
und zwar will ich bestimmte Teile in einem String löschen bzw. ändern.

1. Alles, was sich zwischen eckigen Klammern befindet inkl. der Klammern selbst ( z.B. [abc] )
2. <br> soll geändert werden in <br/>

Machbar mit regedit? Wie funktioniert's?
Vielen user-158k!

user-321
07.06.2007 17:31

regedit... die windoof-registry?

1. naja versuch doch mal explode("[", $string) und dann nochmal drauf.
2. str_replace(), einfach im manual nachgucken

Avatar user-162
07.06.2007 17:32

dein 1. Problem löst du mit Regex zb mit preg_replace() und dem Suchtermn /\[[^\]*\]/
dein 2. Problem kannst du einfach mit str_replace() lösen.

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
user-333
07.06.2007 18:12

dankeschön für die schnelle antwort.
Bei dem ganzen handelt es sich um eine konvertierung von der einen DB in eine andere.

Ich habe die Tabelle gag_artikel, aus welcher ich gewisse informationen benötige, die ich später in die tabelle jos_content einfügen will.

Meine Frage:
Ist mein Script korrekt? Ist das möglich auf die Weise, die ich einschlage?


// DEKLARIERE FUNKTIONEN
function convert_user($user) {
if($user == 1)
$user = '337';
elseif($user == 2)
$user = '69';
}

function convert_text($text) {
$text = preg_replace('/\[[^\]*\]/', '', $text);
$text = ereg_replace('<br>', '<br/>', $text);
}

function convert_date($date) {
$date = date('Y-m-d H:i:s',$date);
}

// HERE WE GOOO...
$abfrage = "SELECT *
FROM gag_artikel";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
$row['userid1'] = convert_user($row['userid1']);
$row['text'] = convert_text($row['text']);
$row['date'] = convert_date($row['date']);
// FÜGE ARTIKEL IN JOOMLA-TABELLE EIN
$eintrag = "INSERT INTO jos_content (id, title, title_alias, introtext, fulltext, state, sectionid, mask, catid, created, created_by, created_by_alias, modified, modified_by, checked_out, checked_out_time, publish_up, publish_down, images, urls, attribs, version, parentid, ordering, metakey, metadesc, access, hits)
VALUES ('', '" .$row['titel']. "', '', '', '" .$row['text']. "', 1, 1, 0, 61, '" .$row['datum']. "', '" .$row['userid1']. "', '', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', '" .$row['datum']. "', '0000-00-00 00:00:00', '', '', '', '0', '', '', '', '0', '0'zwinkern";
}



Danke für Tipps!!

user-303
07.06.2007 18:21

du erwartest von deinen funktionen einen rückgabewert, den sie aber nicht haben.

wir sind hier nicht in vb: php macht aus übergebenenen variablen nicht referenzen!


und warum gibst du in deinem insert dauernd felder an, die du dann doch nicht füllst?

user-333
07.06.2007 20:12

stimmt, ist quatsch, ne? Fettes Grinsen
Aber wie bewerkstellige ich das funktions-rückgabewert-problem?

user-303
07.06.2007 20:54


function convert_text($text) {
$text = preg_replace('/\[[^\]*\]/', '', $text);
return ereg_replace('<br>', '<br/>', $text);
}

function convert_date($date) {
return date('Y-m-d H:i:s',$date);
}

Avatar user-182
08.06.2007 08:04

warum zum gaga bei ohne regex ereg_replace?
z3: return str_replace('<br>', '<br />', $text);

Seid ihr auch schon wix'r? xD
user-343
08.06.2007 13:25

Original von user-303[...]
und warum gibst du in deinem insert dauernd felder an, die du dann doch nicht füllst?


Einen Grund fällt mir ein: MySQL 5.0 und höher reklamiert im strikten SQL-Modus, wenn Felder ohne default-Wert bei einem Insert keinen Wert bekommen.

user-333
08.06.2007 16:08

Das findet php alles nicht so toll traurig

function convert_text($text) {
$text = preg_replace("/\[[^\]*\]/", "", $text); //89
return $text;
return str_replace('<br>', '<br />', $text);
}


Warning: Compilation failed: missing terminating ] for character class at offset 9 in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 89


    $row['userid1'] = convert_user($row['userid1']); //103
$row['cat'] = convert_cat($row['cat']);
$row['text'] = convert_text($row['text']);
$row['date'] = convert_date($row['date']); //106


Warning: Cannot use a scalar value as an array in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 105

Warning: Cannot use a scalar value as an array in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 106

Warning: Cannot use a scalar value as an array in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 103

Warning: Cannot use a scalar value as an array in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 104



Ich hab keinen blassen Schimmer was das bedeuten soll und google spuckt mir keine Lösung aus, die ich hierauf anwenden könnte...

Avatar user-271
08.06.2007 16:16

Original von user-333
Das findet php alles nicht so toll traurig

function convert_text($text) {
$text = preg_replace("/\[[^\]*\]/", "", $text); //89
return $text;
return str_replace('<br>', '<br />', $text);
}


Warning: Cannot use a scalar value as an array in /var/www/vhosts/gag-greven.de/httpdocs/convert.php on line 105

das erste ist ein Fehler im RegEx....wenn du alles löschen willst, was zwischen eckigen klammern steht, dann mach das eher so:
function convert_text($text) {
$text = preg_replace("/\[.*?\]/", "", $text); //89
$text = str_replace('<br>','<br />', $text);
return $text;
}

wenn man auch auskommentierte klammern haben soll...wobei ich das irgendwie nicht versteh...was du mit dem regex machen willst Fettes Grinsen
/[[^\]]*\]/
mhhh....ergibt für mich keinen sinn, so würde er aber funzen, nimm aber lieber, das was ich oben hab, ist nicht so kyrilisch zwinkern

und das zweite...mhhh...bist du dir sicher, dass $row ein array ist....wir erzeugst du, oder besser gesagt, definierst du $row, was weist du $row zu

#!/bin/bash
traurig){ neutral:& };:
user-303
08.06.2007 16:17

Original von user-343
Original von user-303[...]
und warum gibst du in deinem insert dauernd felder an, die du dann doch nicht füllst?


Einen Grund fällt mir ein: MySQL 5.0 und höher reklamiert im strikten SQL-Modus, wenn Felder ohne default-Wert bei einem Insert keinen Wert bekommen.
aber wenn man doch explizit will, dass die felder leer sind, dann ist diese reklamation seitens der datenbank doch irgendwie sinnlos

user-333
08.06.2007 16:26

Original von user-271
und das zweite...mhhh...bist du dir sicher, dass $row ein array ist....wir erzeugst du, oder besser gesagt, definierst du $row, was weist du $row zu


$abfrage = "SELECT *
FROM gag_artikel";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
$row['userid1'] = convert_user($row['userid1']);
$row['text'] = convert_text($row['text']);
$row['date'] = convert_date($row['date']);
// FÜGE ARTIKEL IN JOOMLA-TABELLE EIN
$eintrag = "INSERT INTO jos_content (id, title, title_alias, introtext, fulltext, state, sectionid, mask, catid, created, created_by, created_by_alias, modified, modified_by, checked_out, checked_out_time, publish_up, publish_down, images, urls, attribs, version, parentid, ordering, metakey, metadesc, access, hits)
VALUES ('', '" .$row['titel']. "', '', '', '" .$row['text']. "', 1, 1, 0, 61, '" .$row['datum']. "', '" .$row['userid1']. "', '', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', '" .$row['datum']. "', '0000-00-00 00:00:00', '', '', '', '0', '', '', '', '0', '0'zwinkern";
}


Danke für die schnelle Hilfe!!!


Edit:
mit
while($row = mysql_fetch_array($ergebnis)) {
klappts, aber er macht nicht das, was ich will... Er macht einfach gar nichts...

user-303
08.06.2007 16:29

klar, weil mysql_fetch_object ein object und kein array liefert!

nimm mysql_fetch_assoc

edit: RTFM zwinkern

user-333
08.06.2007 16:41

okay, er tut einfach nichts, aber wenigstens sollte der code jetzt richtig sein. wahrscheinlich iwo ein denkfehler drin.
Also, danke für eure Hilfe!!!

user-343
08.06.2007 19:37

Original von user-303
Original von user-343
Original von user-303[...]
und warum gibst du in deinem insert dauernd felder an, die du dann doch nicht füllst?


Einen Grund fällt mir ein: MySQL 5.0 und höher reklamiert im strikten SQL-Modus, wenn Felder ohne default-Wert bei einem Insert keinen Wert bekommen.
aber wenn man doch explizit will, dass die felder leer sind, dann ist diese reklamation seitens der datenbank doch irgendwie sinnlos

Irgendwie schon, ja. Aber es ist nunmal so... Nervt manchmal, wenn da die Fehlermeldung kommt. Wer weiss, vielleicht verlangt es auch der SQL-Standard so ("strikter Modus" hört sich danach an).

user-333
08.06.2007 20:53

Sooo, hiermit kann ich das thema beenden.
Es gab verschiedene Dinge, die dazu geführt haben, dass es nicht funktioniert hat.

Z.B. hatten Variablen, die eingefügt wurden, ein ' enthalten, womit natürlich alles hinfällig war.

Naja, zum Glück hab ich es noch hinbekommen. user-158ke, dass ihr mir beim bereinigen des Codes geholfen habt!

user-303
08.06.2007 21:13

wie lange hast du gebraucht, um zu merken, dass dein $eintrag nie ausgeführt wird?

user-333
09.06.2007 15:13

$eintrag wurde noch nie nicht ausgeführt. ich hatte nur in meinem letzten post mit dem code nicht die query reinkopiert.
der einzige fehler war, dass ein ' in den variablen war, also wurde das ja unterbrochen.