Willkommen in der Webstatt Zum Webstatt Blog und Stories
trefixxx am 07.06.07 18: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 Dank!

netcup.de Warum gibt es hier Werbung?
The Master am 07.06.07 19:31

regedit... die windoof-registry?

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

der_nic der_nic am 07.06.07 19: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.

trefixxx am 07.06.07 20: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')";
}



Danke für Tipps!!

Snake am 07.06.07 20: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?

trefixxx am 07.06.07 22:12

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

Snake am 07.06.07 22: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);
}

Franky Franky am 08.06.07 10:04

warum zum gaga bei ohne regex ereg_replace?
z3: [FONT=courier new]return str_replace('<br>', '<br />', $text);[/FONT]

Wasili am 08.06.07 15:25

Quote
Original von Snake[...]
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.

trefixxx am 08.06.07 18:08

Das findet php alles nicht so toll :(

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...

nuit nuit am 08.06.07 18:16

Quote
Original von trefixxx
Das findet php alles nicht so toll :(

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 :D
/[[^\]]*\]/
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 ;)

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

Snake am 08.06.07 18:17

Quote
Original von Wasili
[quote]Original von Snake[...]
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.[/quote]aber wenn man doch explizit will, dass die felder leer sind, dann ist diese reklamation seitens der datenbank doch irgendwie sinnlos

trefixxx am 08.06.07 18:26

Quote
Original von nuit
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')";
}


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...

Snake am 08.06.07 18:29

klar, weil mysql_fetch_object ein object und kein array liefert!

nimm mysql_fetch_assoc

edit: RTFM ;)

trefixxx am 08.06.07 18: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!!!

Wasili am 08.06.07 21:37

Quote
Original von Snake
[quote]Original von Wasili
[quote]Original von Snake[...]
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.[/quote]aber wenn man doch explizit will, dass die felder leer sind, dann ist diese reklamation seitens der datenbank doch irgendwie sinnlos[/quote]
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).

trefixxx am 08.06.07 22: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. Danke, dass ihr mir beim bereinigen des Codes geholfen habt!

Snake am 08.06.07 23:13

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

trefixxx am 09.06.07 17: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.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt