Mysql Freundesliste ...

Matlox

Mitglied
Hallo Leute,
ich habe eine freundesliste gecodet, funktioniert wunderbar, das problem ist jetzt nur, sobald 2 oder mehr freunde in der freundesliste sind, wird für jeden einzelnen "alle freunde offline" angezeigt, d.h. wenn 2 offline sind, steht leider 2x untereinander der text da, ich poste mal den codeschnipsel, vllt. sieht jemand meinen leichtsinnsfehler und korregiert mich oder hatt vllt. sogar noch ne bessere schreibeweiße allgemein für den code :)

LG Matlox
Danke im vorraus

PHP:
	$sql3 = "SELECT * FROM `freundesliste` WHERE `myid` = '$id' AND `freundesanfrage` = '2'";

	if (!$res_id3 = mysql_query($sql3)) {
		die (mysql_error()); }

			if (!mysql_num_rows($res_id3)) { 

				eval ("dooutput(\"".template("freundeslisteleer")."\");"); }
		else {
					while ($row = mysql_fetch_array($res_id3)) { 
 
			$freundid = $row['freundid']; 
			$befreundetseit = $row['befreundetseit'];

	$sql4 = "SELECT * FROM `user` WHERE `id` = '$freundid' AND `online` = '2'";

	if (!$res_id4 = mysql_query($sql4)) {
		die (mysql_error()); }

			if (!mysql_num_rows($res_id4)) {

				eval ("dooutput(\"".template("freundeslisteoffline")."\");"); }
	else {
					while ($row = mysql_fetch_array($res_id4)) {

			$pic = $row['pic']; 
			$name = $row['name']; 

		eval ("dooutput(\"".template("onlinefreundesliste")."\");"); }}}}
 
Ich denke mal, der entscheidende teil ist in der freundeslisteoffline.tpl :D

PHP:
            if (mysql_num_rows($res_id4) == 0) {

                eval ("dooutput(\"".template("freundeslisteoffline")."\");"); }
    else {
                    while ($row = mysql_fetch_array($res_id4)) {

            $pic = $row['pic']; 
            $name = $row['name']; 

        eval ("dooutput(\"".template("onlinefreundesliste")."\");"); }}}}

// PS: Aus Sicherheitsgründen, 
// mysql_error nur in der Entwickelungsphase 
// benutzen, nicht während, dass Script auf 
// einem normalen Server läuft und hüte dich 
//am besten davor so oft eval zu benutzen ;) 

// MfG
// KD3
 
Danke für die schnelle Antwort,
ich hab das ganze script auf eval aufgebaut, was wär den besser?!
ich will halt schnell die einzelnen layouts ändern können ....


und nein der fehler ist nicht in der .tpl datei, hab das mal so geschrieben:

PHP:
	if (!$res_id4 = mysql_query($sql4)) {
		die (mysql_error()); }

			if (mysql_num_rows($res_id4) == 0) {

				echo "Alle Freunde Offline"; }
	else {
					while ($row = mysql_fetch_array($res_id4)) {

			$pic = $row['pic']; 
			$name = $row['name']; 

		eval ("dooutput(\"".template("onlinefreundesliste")."\");"); }}}}

und es funktioniert immer noch nicht, er gibt mir das immer so oft aus, so viele freunde ich habe, bzw. so viele sql einträge FROM `user` WHERE `id` = '$freundid' AND `online` = '2' eingetragen sind :D

LG Matlox
Danke im vorraus
 
oh man, bin ich doof xD Das hab ich davor nicht gesehen.......... hab das problem gefunden^^

PHP:
while ($row = mysql_fetch_array($res_id3)) { # Du machst dies so oft du freunde hast, ist ja normal :D Der gibt dann immer das folgende dann an :)
 
            $freundid = $row['freundid']; 
            $befreundetseit = $row['befreundetseit'];

    $sql4 = "SELECT * FROM `user` WHERE `id` = '$freundid' AND `online` = '2'";

    if (!$res_id4 = mysql_query($sql4)) {
        die (mysql_error()); }

            if (!mysql_num_rows($res_id4)) {

                eval ("dooutput(\"".template("freundeslisteoffline")."\");"); }
    else {
                    while ($row = mysql_fetch_array($res_id4)) {

            $pic = $row['pic']; 
            $name = $row['name']; 

        eval ("dooutput(\"".template("onlinefreundesliste")."\");"); }}}}  


Mach das lieber so:

$sql4 = "SELECT * FROM `user` WHERE `id` = '$freundid' AND `online` = 2";

$query4 = mysql_query($sql4);

$rowcount4 = mysql_num_rows($query4);

if($rowcount4 > 0) {

for($i = 0; $i < $rowcount4; $i++) {

$fetchcount4 = mysql_fetch_assoc($query4);

print_r($fetchcount4); // Für die übersicht ;)


}

} else { echo 'Keine Freunde online'; }
 
ok das probier ich gleich mal aus, muss mich aber noch bissl mit den befehlen auseinander setzen, ich bin noch neuling und schaff es mit einfachen funktionen und bischen logisches denken komplette cms´s zu codieren, hab zwar die php quakenet anleitung auch gelesen, doch die nich verstanden, deswegen nur durch probiern, probiern, probiern gelernt :D

wär noch nett wenn ich bescheid bekomme warum ich eval nich benutzen soll ^^


VIELEN VIELEN DANK

LG Matlox
 
Wenn es einer schaffen würde und schadcode über nen eval befehl einschleusen würde, dann könnte die Seite drauf gehen :D Ist in JavaScript und PHP das selbe^^
Das Tut von Quakenet ist nicht gut meiner meinung nach, allein lernt man alles viel schneller, ich hab ehrlich gesagt nur auf http://www.phpself.de das allermeiste gelernt, was man in der Praxis auch brauchen würde ;)

// EDIT

Mach dich auch mal in sachen SQL-Injection schlau ;) Google mal ;)




MfG
KD3
 
Zuletzt bearbeitet:
danke schonmal für die Hilfe, sehr vielen dank

hab jetzt mal das komplette script umgecodet, alles so wie du ´beschrieben hast, funktioniert wunderbar, hab mich auch mit den befehlen bissl auseinandergesetzt, der Login, das Usermenü, alles funktioniert, bis auf die freundesliste wieder, hab das mit den befehl print_r($fetchcount4); mal ausgeben lassen, er hollt mir dann trozdem nur 1nen user raus, und komischerweiße, fals ich eval benutze zeigt er nur den user der eingeloggt ist selber an :S

PHP:
	$sql3 = "SELECT * FROM `freundesliste` WHERE `myid` = '$id' AND `freundesanfrage` = '2'";
	$query3 = mysql_query($sql3);

			if (!mysql_num_rows ($query3) > 0)  { 
 
				eval ("dooutput(\"".template("freundeslisteleer")."\");"); }
		else {

			$row = mysql_fetch_array($query3); { 
 
			$freundid = $row['freundid']; 
			$befreundetseit = $row['befreundetseit'];

	$sql4 = "SELECT * FROM `user` WHERE `id` = '$freundid' AND `online` = '2'";
	$query4 = mysql_query($sql4);

		$rowcount4 = mysql_num_rows($query4);
			if($rowcount4 > 0) {

				for($i = 0; $i < $rowcount4; $i++) 

			$fetchcount4 = mysql_fetch_assoc($query4);
			print_r($fetchcount4); 

				eval ("dooutput(\"".template("freundeslisteonline")."\");"); }
	else { 
				eval ("dooutput(\"".template("freundeslisteoffline")."\");"); }}}

was mach ich nur falsch? :rolleyes:

LG DANKE


und welche art von includen der tpl datein benutz ich am besten?!
 
Was verbirgt sich z.B hinter der freundeslisteonline.tpl?

das print_r($fetchcount4); war nur für die übersicht von mir geschrieben.
Ich denke mal alles wird, wenn die freundeslisteonline.tpl geladen ist, ausgegeben oder? Dann müsste man aber natürlich wissen wie du die Variablen am Ende benannt hast.


An dieser Stelle fällt mir gerade ein, das da was nicht stimmen kann....

PHP:
<?php

    $sql3 = sprintf('SELECT * FROM 
                     freundesliste 
                     WHERE myid =%d 
                     AND freundesanfrage = 2', 
                     mysql_real_escape_string($id)
                     );
                     
    $query3 = mysql_query($sql3);
    $rowcount3 = mysql_num_rows($query3);

    
            if ($rowcount3 > 0)  { 
              
              $ids = array();
              $befreundetseit = array();
              
              for($i = 0; $i < $rowcount3; $i++) {
              
              $fetch3 = mysqli_fetch_assoc($query3);
              
              $ids[] = $fetch3['freundid'];
              $befreundetseit[] = $row['befreundetseit'];
              
              }
                
                 }
        else {
    for($i = 0; $i < count($ids); $i++) {
    
    $sql4 = sprintf('SELECT * FROM 
                     user 
                     WHERE id =%d 
                     AND online = 2',
                     mysql_real_escape_string($ids[$i])
                     );
            
    $query4 = mysql_query($sql4);

    $rowcount4 = mysql_num_rows($query4);
    
            if($rowcount4 > 0) {

                for($i = 0; $i < $rowcount4; $i++) {

                  $fetchcount4 = mysql_fetch_assoc($query4);
                  
                  echo '<a href="profile.php?uid='.$fetchcount4['id'].'">'.$fetchcount4['username'].'</a>';
                  
                  
              }
              
                eval ("dooutput(\"".template("freundeslisteonline")."\");"); 
            }    
                }
    else { 
                eval ("dooutput(\"".template("freundeslisteoffline")."\");"); }
                
                }
                
                }


?>
 
hmmm das kann mal garnich hinhaun,
also ich erkläre das freundschaftsscript mal,

id = session id

das wird oben festgelegt

er sucht sich bei sql3 die freunde der freundesliste raus und gibt die freundid aus,
durh die freundid sucht er sich die user aus sql4 heraus und soll die dann ausgeben,

mit den letzten code bekomm ich jetzt 3 fehlermeldungen:

- Warning: sprintf(): Too few arguments
- Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
- Notice: Undefined variable: ids

ich liebe es wenn ich tagelang an nen script hocke ^^

LG Danke für die Antworten
Matlox
 
hmmm das kann mal garnich hinhaun,
also ich erkläre das freundschaftsscript mal,

id = session id

das wird oben festgelegt

er sucht sich bei sql3 die freunde der freundesliste raus und gibt die freundid aus,
durh die freundid sucht er sich die user aus sql4 heraus und soll die dann ausgeben,

mit den letzten code bekomm ich jetzt 3 fehlermeldungen:

- Warning: sprintf(): Too few arguments
- Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
- Notice: Undefined variable: ids

ich liebe es wenn ich tagelang an nen script hocke ^^

LG Danke für die Antworten
Matlox


EDIT:

und in der freundeonline.tpl steht nix anderes als was im echo steht, also nur die ausgabe der user, wie gesagt, will das eig. nich über echo machen sondern über eval und kenn leider keine anderen guten templatesysteme ... :S
 
Zurück