Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Threadanzeige [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Threadanzeige


 
owna6e2
19-05-2004, 17:09 
 
Hallo,

ich habe ein Problem mit der Anzeige von Threads. Da ich denke, dass das eher ein PHP-Problem ist, da das SQL-Statement korrekt ist, hab ich das hier gepostet. Ich habe die Datei angehängt.

Das Problem ist, dass a.) Threads nicht nach Datum sortiert werden und b.) die Usernamen von irgendeinem Post von den gezeigten Threads jedem Thread zugeordnet werden (unter der Tabelle "Letzter Beitrag von")

Ich hoffe mir kann jemand helfen. :(

 
Big Chief
19-05-2004, 17:48 
 
zu a.)

ORDER BY post_id DESC

Alles in Allem nicht verwunderlich, dass nicht nach Datum sortiert wird ;)

zu b.)
poste doch mal wo die Usernamen ausgelesen werden, und wo sie den jeweiligen Thread zugeordnet werden .. es ist nämlich schon ein bisschen mühsam und zeitaufwändig bei den 90 Zeilen komplett durchzusteigen

 
owna6e2
20-05-2004, 11:34 
 
Hm, also, auch wenn ich nach "p_date" sortiere, werden die Threads nicht nach den zuletzt erstellten Posts sortiert.

Bezüglich der User - diese werden von Zeile 59 bis 81 ausgelesen.


$gu = mysql_fetch_array(mysql_query("SELECT nickname FROM $user_tname WHERE id='$thread[userid]'"));
$username = $gu[nickname];

echo "<a href='?action=user&id=$thread[userid]'>$username</a>";
echo " @ $thread[t_date], $thread[t_time] o'clock</p></td>";

$count = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM board_posts WHERE tid='$thread[id]'"));
$count[0]--;

echo "<td align='center'>$count[0]</td>
<td align='center'>$thread[hits]</td>
<td align='left'>";

$gu2 = mysql_fetch_array(mysql_query("SELECT nickname FROM $user_tname WHERE id='$thread[p_userid]'"));
$username2 = $gu2[nickname];

echo "<p style='margin-left:10; margin-top:0; margin-bottom:0'>$thread[p_date], $thread[p_time] o'clock</p></a>
<p style='margin-left:10; margin-top:3; margin-bottom:0'>by ";

echo "<a href='?action=user&id=".$thread[p_userid]."'>$username2</a>
</p></td></tr>
</td></tr>";

 
owna6e2
23-05-2004, 10:00 
 
Bitte um Hilfe :(

 
owna6e2
29-05-2004, 13:33 
 
Bitte...

 
Floriam
29-05-2004, 15:00 
 
Hast du eventuell das DESC bei der Zeit vergessen? Muss man bei Timestamps machen, wenn man sie nach den neusten sortiert werden sollen... :)

Anm: Du solltest dich mal mit JOINS auseinander setzen. Was du da fabrizierst ist der reinste Performance Killer.. ;)

 
Hopka
29-05-2004, 15:41 
 
Original geschrieben von owna6e2

$gu = mysql_fetch_array(mysql_query("SELECT nickname FROM $user_tname WHERE id='$thread[userid]'"));
Die Zeile für sich ist schon sehr, sehr schlimm.

So wäre es zumindest etwas besser.
$guQuery = "SELECT nickname FROM '" . $user_tname . "' WHERE id = " . $thread['userid']);
$guResult = mysql_query($query) or die(mysql_error);
$gu = mysql_fetch_array($guResult);
mysql_free_result($guResult);
Den Query würde ich immer in eine eigene Variable packen. Den kannst du dann nämlich später ausgeben und sehen, was wirklich an die Datenbank geschickt wird (z.B. die Inhalte deiner Variablen etc). Dabei die Variablen nicht einfach mitten in den String reinpacken, sondern extra dazu holen, sonst gibt es nämlich Probleme z.B. mit deinem Array $thread.
Bei Arrays übrigens immer den Schlüssel in '' packen, es sei denn es sind numerische Schlüssel, sonst können schnell Fehler auftreten. (Steht übrigens auch im PHP-Handbuch)
Die Spalte id in deiner Tabelle ist ein Zahlenwert, nehme ich mal an, deswegen: keine Anführungszeichen an dieser Stelle an die Datenbank schicken!

Das Result (das, was mysql_query zurückgibt) auch nochmal in eine extra Variable, denn so kannst du dir evtl. in der Datenbank auftretende Fehler ausgeben lassen. mysql_free_result ist zwar nicht zwingend notwendig, aber es ist besser, das zu verwenden.

So, und jetzt passe mal den Rest deines Codes entsprechend an und schaue, ob du den Fehler nicht selbst findest.

P.S. Falls du MySQL-Queries innerhalb einer Schleife durchführst (ich hab mir die .zip-Datei jetzt nicht angesehen), ist das eine sehr schlechte Idee, denn wenn das Script häufiger aufgerufen wird, kannst du mit starken Performance-Problemen rechnen.

 
xManUx
29-05-2004, 18:52 
 
kleiner tipp von mir...

genau so wie dein zip hatte ich früher genau so mal angefangen.. doch die schlamperei würd ich mir ganz schnell abgewöhnen..

1. empfehl ich dir generell mysql querys sauber zu schreiben

z.b:



$sql = "

SELECT
blubb,
blah,
usw
FROM
tabelle1, tabelle2
WHERE
blah= '".$blah."'
AND
bloo = '".$blu2."'
";



das liest sich angenehmer. ( und dir fällt es nacher leichter den query mal eben zu verbessern etc.

2. würd ich an manchen stellen arrays benutzen.


$hierwasrein[] = $irgendwas->aus_der_DB_innerhalb_einer_while_schleife;


dann kannst du später wieder in einer anderen schleife das auslesen, und musst nicht wieder extra ne DB abfrage machen. um $hierwasrein[] auseinander zu kriegen müsstest aber implode() verwenden.

3. mysql_error() verwenden kann u.U. viel zeit sparen! :D

4. würd ich an deiner stelle erstmal ne pause einlegen und mich mit mysql befehle auseinander setzen. ( dir scheint da noch viel zu fehlen )

in dem sinne viel spaß :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:16 Uhr.