echo $begrueszung;
so nun bin ich auch ein Stück weiter gekommen. Wenn ich mir alle Fehler ausgeben lassen, dann kommt folgendes:
Notice: Array to string conversion in /www/htdocs/v148789/forum/topic.php on line 235
hmm in der besagten Zeile steht aber nur:
$ausgabe = str_replace("{anzahl}",$ppurow,$ausgabe);
hmm ich weiß net was da wieder ist,
str_replace() erwartet einen String, du übergibst hier das mysql_fetch_assoc-Ergebnis, ein Array. Dabei erzeugt es die Notiz und PHP wandelt stillschweigend das Array in einen String um. Diese Umwandlung ist bei einem Array nicht so sonderlich sinnvoll, deswegen wird als Ersatz ein "Array" ausgegeben.
denn das habe ich sonst so auch mit jeder Ausgabe geamcht und beim Nickname und so geht auch alles nur bei den Beiträgen eben net.
Dann vergleiche noch mal genau und erkenne den Unterschied..
Hier nochamls das komplette Skript:
Dann werde ich diesmal das gesamte Script kommentieren, sonst werden wir wohl nie fertig... :-)
<?php
include("config.php"); // config datei laden.
error_reporting(E_ALL);
//echo "<a href=index.php>Zurück zur übersicht</a><br><br>";$ppu = array(); // posts per user
$ppu ist das Array, indem die Abfragen der Postingsanzahl pro am Thread beteiligtem User zwischengespeichert werden, damit das nicht bei jedem Schleifendurchlauf für bereits abgefragte User nochmal getan werden muss.
$ppu wird bei jedem zum Thread neu hinzugekommenen Poster um ein Element erweitert. So dass sich irgendwann sowas in der Art ergibt:
$ppu = array(
'user1' => 42,
'user2' => 815,
...);
Dieses Variable darfst du hier nicht für andere Zwecke missbrauchen. Sonst klappt das ganze System der Zwischenspeicherung natürlich nicht mehr.
$threadid = $_GET['threadid']; // threadid aus adressleiste auslesen
$fp = fopen("template_post.html","r"); // teamplate zum lesen(r) öffnen
$template = fread($fp,filesize("template_post.html")); // inhalt der template datei in die teamplate variable laden.$sql = mysql_query("SELECT * FROM simple_posts WHERE threadid = '$threadid' ORDER BY postid ASC"); // mysql select befehl
while($row = mysql_fetch_Assoc($sql)) { // läd bei jedem durchgang(immer die nächste) eine zeile aus der tabelle in einen array in die variable $row
Diese zwei Zeilen schreiben sich besser so:
$sql = "SELECT * FROM simple_posts WHERE threadid = '".mysql_real_query($threadid)."' ORDER BY postid ASC";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_Assoc($result)) {
Das hat den Vorteil, dass du im Bedarfsfall ein echo $sql; machen kannst, um zu sehen, wie dein SQL-Statement wirklich aussieht, das du zum mysql_query schickst.
In den Kommentaren musst du übrigens die Umlaute nicht umwandeln. Die können dort ruhig lesbar als äöü stehen.
$von = $row['von'];
if (!isset($ppu[$von])) {
$ppusql = "SELECT COUNT(*) AS anzahl FROMsimple\_posts
WHEREvon
='$von'";
$ppuresult = mysql_query($ppusql) OR die(mysql_error());
$ppurow = mysql_fetch_assoc($ppuresult);
$ppu[$von] = $ppurow['anzahl']; ;
}
Nach dieser if-Anweisung steht die Anzahl der Postings des aktuellen Users auf jeden Fall in $ppu[$von]. Entweder stand dies aufgrund einer früheren Abfrage schon drin oder es wurde jetzt eingefügt.
$titel = $row['titel']; // titel besorgen
$von = $row['von']; // von besorgen
$datum = $row['datum']; // datum besorgen
$post = $row['post']; // post besorgen$ppu= $ppurow['anzahl'];
Hier überschreibst du zum einen unseren Zwischenspeicher, das Array $ppu, und zum anderen verwendest du dafür $ppurow['anzahl']. Letzteres ist enthält aber nur dann einen sinnvollen Wert, wenn vorher die Query $ppusql ausgeführt wurde. Deshalb solltest du zur Ermittlung der Anzahl nur auf $ppu[$von] zugreifen, da steht (siehe oben) immer ein sinnvoller Wert drin:
$anzahl = $ppu[$von];
$datum = strftime("%d.%m.%Y",$datum); // datum formatieren
$ausgabe = $template;
$ausgabe = str_replace("{von}",'<a href http://../pr.php?user=' . $von . '">' . $von . '</a>',$ausgabe); // von ins template einsetzen
$ausgabe = str_replace("{titel}",$titel,$ausgabe); // titel ins template einsetzen
$ausgabe = str_replace("{datum}",$datum,$ausgabe); // datum ins template einsetzen$ausgabe = str_replace("{anzahl}",$ppurow,$ausgabe);
So
$ausgabe = str_replace("{anzahl}",$anzahl,$ausgabe);
oder so
$ausgabe = str_replace("{anzahl}",$ppu[$von],$ausgabe);
ist's richtig.
$ausgabe = str_replace("{text}",echo_message($post,false,true),$ausgabe); // den post text ins template einsetzen
$ausgabe = str_replace("{message}",'<a href http://../post.php?show=write&empfaenger=' . $von . '">Message schreiben</a>',$ausgabe); // den post text ins template einsetzen
echo $ausgabe;
};
?>Gruß jaylibII
PS: Das mit der Sicherheit das muss ich mir erst nochamls genau ansehen. Da komme ich gerade nicht so mit aber eines nach dem anderen wurde ich sagen :-)
Vielleicht noch mal zur Verdeutlichung:
Ein
... WHERE user='$user'
wird, wenn in $user "jaylibII" steht, zu
... WHERE user='jaylibII'
und alles ist in Ordnung. Ein "jaylib'II" erzeugt einen Syntax-Fehler:
... WHERE user='jaylib'II'
^ ^ ^ deswegen
Und wenn ein "' OR 1 OR '" drinsteht, wird das zu
... WHERE user='' OR 1 OR ''
Das löst sich auf zu:
... WHERE false OR true OR false
bzw.
... WHERE true
und hat die gleiche Wirkung wie das Weglassen der WHERE-Klausel.
echo "$verabschiedung $name";