bRäuchte mal dringend 2 einweisungen!

Du hast ne abschliessende geschwifte Klammer vergessen. Ich habs bei mir mal nachgebaut, da funktionierts:

PHP:
<?php
mysql_select_db("test2"); 
$Sql_query = "SELECT * from news Order by news_id DESC"; 
$sql_result = mysql_query($Sql_query); 
while($news=mysql_fetch_array($sql_result)){ 
	foreach ($news as $smily) { 
		$smily = str_replace(":)", "<img src='smily.gif'>", $smily); 
		echo "$smily<br>";
	}
}
?>

Die DB bei mir:

CREATE TABLE news (
news_id tinyint(4) NOT NULL auto_increment,
text varchar(255) default NULL,
PRIMARY KEY (news_id),
KEY news_id (news_id)
) TYPE=MyISAM;


Probiers nochmal.

Gruß
DH
 
Joa nun ungefähr klappt es ;) nur das er den beitrag nicht iner der Table anzeigt.. ich pste mal das koplette script.. hoffe es gibt kein ärger:

PHP:
     <table width="575" align="left" height="1090" cellspacing="7">
      <tr>
       <td valign="top" align="center" style="border: 1px solid black" bgcolor="whitE">
<?php
 $db = mysql_connect("localhost","doppelx","lars.th")or die("db fehler");
 mysql_select_db("andre",$db);
 $Sql_query = "SELECT * from news Order by news_id DESC";
 $sql_result = mysql_query($Sql_query);
 while($news=mysql_fetch_array($sql_result)){
 foreach($news as $smily) {
 $smily = str_replace(":)", "<img src='smily.gif' border='0' alt=''>", $smily);
}
?>

<br>
<table width="530" cellspacing="5">
  <tr>
    <td style="border: 1px solid black;color: white; background: #F2520D">
    <b><?php echo $news[news_header]; ?></b></td>
  </tr>
  <tr>
    <td style="border: 1px solid black;color: black; background: #7296BA"><?php echo $news[news_body]; ?><br><br>
    <i><font size="2"> Dieser Beitrag wurde am <?php echo $news[news_date]; ?> von <?php echo $news[news_poster]; ?> gepostet</font></i>
</td>
  </tr>
</table>
<?php
}
mysql_close();
?>

Das ist nun der ganze code.. vieleicht versteht man dadurch j besser was ich will.

Wäre cool wenn du der noch mal die Zeit nimmst un postest.
THX "DER HELD"
 
Ok, da gibts nun ein Problem: ;((

Ich nehme an, dass der zu prüfende Text sich in der Variablen $news[news_body] befindet. Wenn mich net alles täuscht, kannst du mit ner foreach-Schleife zwar die Werte aus dem Array ziehen, aber net ändern. Das müsstest du mit ner for-Schleife machen. Dazu MUSS das aber ein Nicht-Assoziatives Array sein, sprich du musst statt mysql_fetch_array mysql_fetch_row nehmen.

(CODE-WARRIORS correct me if Im totally wrong)

dann die for schleife:
PHP:
for ($i=0; $i <count($news); $i++) {
$news[$i] = str_replace("<img src="images/smilies/smile.gif" border="0" alt="">", "<img src='smily.gif' border='0' alt=''>", $news[$i] );
}

Probiers mal damit :)
 
ohoh!

könntest du mir das mit dem $i++ und dem ganzen code vieleicht erklären denn wenn ich ein script schreibe will ich es auch für die Zukunft wissen wie es geht!

WÄRE SOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO nett von dir ;)
 
@Der Held: Hm... man müsste eigentlich bei assoziativen Arrays mit foreach den Inhalt des Arrays ändern können. Denn man kann ja z.B. schreiben:
PHP:
<?
$assoziativ = array(wert1 => 1, wert2 => 2, wert3 => 3);
foreach ($assoziativ as $feldname => $wert)
  $assoziativ[$feldname] = sqrt($wert);
?>
 
hmmmm...

hmm mein problem ist nun folgendes das script von Der Held gibt ein time Out ;)

Und daas mit dem script von reima.. könntest du mir mal ein beispiel zu meinem code schreiben?
Oder ein anderer? :)
 
Hi,

@DoppelX
TimeOut? Wie das?
Also zu meiner Erklärung:
PHP:
for ($i=0; $i <count($news); $i++) {
$news[$i] = str_replace("<img src="images/smilies/smile.gif" border="0" alt="">", "<img src='smily.gif' border='0' alt=''>", $news[$i] );
}

Die for-Schleife in diesem Fall hat 3 optionale Argumente in den (), jeweils getrennt durch ein Semikolon.
Die erste Bedingung ist der Startwert für die Laufvariable (eine Variable an der sich die Scleife quasi orientiert).
Die zweite Bedingung ist die Laufzeit; solange diese Bedingung erfüllt ist wird der Teil in den geschweiften Klammern ausgeführt.
Die 3. Bedingung ist die Inkrementierung der Laufvariablen, ganz wichtig sonst wirds ne endlos-Schleife.

Solange $i, das bei 0 beginnt, also kleiner ist als die Anzahl der Elemente des Array News, wird der Anweisungsblock ausgeführt.

Die maximale Anzahl der Elemente ergibt sich aus der mysql-Abfrage. Da du mit "SELECT * ...." abfragst hat das Array "news" also soviele Elemente, wie die Tabelle "news" Felder hat. Die elemente werden dabei aufsteigend so sortiert, wie die Tabelle Angeordnet ist. Das erste Feld deiner Tabelle ist somit auch das Element "news[0]".

Da bei jedem Durchlauf der Schleife sich $i um 1 erhöht, geht man also alle Elemente von 0 bis x des Arrays durch:
$news[$i], wenn $i = 0: $news[0], wenn $i=1: $news[1] usw...

So wird das was vorher in $smily ersetzt wurde also in dem jeweiligen Array-Element ersetzt und dem Element wieder zugewiesen.

@reima:
Meine mich an sowas erinnern zu können, aber kann mich durchaus irren. Wie auch immer, das Script funktioniert schliesslich mit einem assoziativem wie auch einem nicht-assoziativem Array gleichermasse ;)
 
PHP:
<?php
mysql_select_db("andre"); 
$Sql_query = "SELECT * from news Order by news_id DESC"; 
$sql_result = mysql_query($Sql_query); 
while($news=mysql_fetch_row($sql_result)){ 
  for ($i=0; $i <count($news); $i++) {
    $news[$i] = str_replace("8-)", "<img src='smily.gif'>", $news[$i])};
  } 
?>

Jetz hast du quasi alle Elemente des Array "news" (=den gesamten sntsprechenden Datensatz) durchsucht und die Smilys ersetz. Du kannst jetzt die Variablen ganz frei verwenden und dort ausgeben wo du magst z.B. so:
<table>
<tr>
<td><?php echo $news[1]</td>
</tr>
<tr>
<td><?php echo $news[2]</td>
</tr>
</table>

Wenn z.B:. dein 2. DB Feld(=$news[1]) die Überschrift und das 3. Feld den Text der Meldung enthält.
 
ne ich beende das nun mal!

ne also beim besten willen nicht.. bei der For schleife gibt es einfach ein Time out.

Ist aber auch nicht so schlimm.
Ich habe mir über nacht etwas einfallen lassen. Und zwar:

Ich mach das nun einfach so, dass wenn ich die News Poste (geschiet ja über ein formular) ich da schon das zeichen :cool: für den Smily Pfad ersetze. SOllte das nicht gehen haben meine User Pech und bekommen keine Smilys ;)

Danke dir DER_HELD und natürlich aauch allen anderen.
Wure zum schluss schon richtig spannend und das nur wegen nem smily :rolleyes:
Naja..

CU EUER DOPPELX
 
Zurück