SQL-Abfrage / Buddyhack (nicht komplett)

>>>>> Gehen Sie zum Original-Thread <<<<<

Google
Adsense
SNaKeMe
Hallo Leute, ich bin schon seit längerem daran einen Hack zu erstellen. Leider scheitert es an der SQL-Abfrage bzw. Ausgabe. Es ist folgendes geplant. Jeder User kann per "Profil bearbeiten" seine Handynummer und Festnetznummer eintragen. Wenn dieser User nun möchte das einem anderem User diese angezeigt wird added er diesen anderen User zu seiner Buddylist. Die Ausgabe erfolgt unter dem Avatar im Post des Useres der den anderen geadded hat.

Soweit zur Idee. Natürlich ist eine Ausgabe im Profil auch noch geplant.

Hier der Code, drunter folgt dann das Problem dabei.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
$buddies $db->query_first("SELECT buddylist FROM bb".$n."_users WHERE $posts[userid] ");
        echo "Datenbankausgabe: ".$buddies."<br>";
        $buddies_array explode(" ",$buddies);
        foreach($buddies_array as $buddies_element){
            echo "Schleifendurchlauf, Buddy-Nummer: ".$buddies_element."\n";
            if($wbbuserdata[userid]==$buddies_element) {
                echo "<b>Handy:</b> $posts[handy]<br>";
                }
        }


Der Code ist extra so wegen der Fehlersuche geschrieben. Das Problem ist einfach das ich den Mysql Array nicht zerlegen bzw. ausgeben kann. Er zeigt als Ausgabe immer nur "Array" an. Der Code ist noch nicht fertig und die Ausgabe wird auch mit Templates und nicht mit echo erfolgen.

Wäre über jede Hilfe dankbar. Bzw. kann mir jemand die fetch_arry Funktion erklären, weil ich das dumpfe Gefühl habe diese für die Abfrage zu brauchen. Der Code steht übrigens so in der thread.php in ca. Zeile 325.

Vielen Dank & mfg SNaKeMe
XundY
deine sql-abfrage ist schon mal Fehlerhaft:
SELECT buddylist FROM bb".$n."_users WHERE `userid`='":$posts['userid']."'
macht da erstmal weitaus mehr sinn.

Und was zu mysql_fetch_array findest du hier

Wenn du es für wbb2 nutzt kannst du das mysql_ weglassen ansonsten ist die Verwendung dieselbe

mfg
SNaKeMe
Okay danke für den Tipp. Leider ändert das auch nix an der Ausgabe. Dein Doppelpunkt müsste ein Punkt sein. Aber sonst funzt die Abfrage genau gleich wie meine alte vorher. Ich muss mir bei Zeiten mal die fetch_array Funktion zu gemüte führen.

Bitte weitere Tipps. Danke!


PS: Im Anhang ein Bilder der Ausgabe.
XundY
Habe auch nicht behauptet, das die Ausgabe sich ändert nur so war das Query definitiv nicht korrekt Augenzwinkern

mfg
SNaKeMe
Hey Leutz ich hatte mal die Idee ein Profilfeld zu erstellen was nur für Leute die sich in deiner eigenen Buddylist befinden sichtbar ist. Allerdings bin ich dann an der SQL-Abfrage gescheitert bzw. hatte noch keine Zeit weiter daran zu feilen. Weil sich das wohl auch nicht so schnell ändern würd dachte ich, ich frag mal hier nach Hilfe. Die Ausgabe die momentan Produziert wird lautet : Array. Was leider nicht gewollt ist weil ich ja die Werte für den Vergleich brauche. Weiss allerdings nicht so genau wie ich diesen Array zerlege bzw. ob ich das richtig gemacht hab. Bin für jeden Vorschlag / Hilfe etc. dankbar.

mfg SNaKeMe

Hier der momentane "test" Code, gehört in die thread.php ca. Zeile 300 rum:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
$buddies = $db->query_first("SELECT buddylist FROM bb".$n."_users WHERE `userid`='".$posts['userid']."'");
		echo "Datenbankausgabe: ".$buddies."<br>";
		$buddies_array = explode(" ",$buddies);
		foreach($buddies_array as $buddies_element){
	        echo "Schleifendurchlauf, Buddy-Nummer: ".$buddies_element."\n";
        	if($wbbuserdata[userid]==$buddies_element) {
	        	echo "<b>Handy:</b> $posts[handy]<br>";
				}
		}

Hier der alte Code:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if($wbbuserdata['userid']) {
		$result = $db->query_first("SELECT buddylist FROM bb".$n."_users WHERE $posts[userid]");
		$handyarray = array("$result"); // brauchen wir das vllt ? oder lieber fetch_array ?
		foreach(explode(' ',$handyarray) as $handyausgabe) {
		echo "$handyausgabe[0]";
		echo "$handyausgabe[1]";
		if($posts[userid]==$handyausgabe) {
		echo "<b>Handy:</b> $posts[handy]<br>";
						
				}
			}
		}	


Im Vorfeld wurde natürlich das Profilfeld von "Hand" erstellt. Und wird auch mit der allgemeinen Mysql-Abfrage in der thread.php abgefragt.

Thx. Push!
XundY
die echos kannste schon mal vergessen, denn wenn du dieDaten einfach per echo ausgibst werden die oben auf deiner Seite angezeigt aber sicher nicht im entsprechenden Feld im Template.

foreach benutz man um Ein arrayZeilenweise auszugeben dann benutzt man natürlich nicht noch zusätzlich explode.

Aber selbst foreach kannst du dir sparen wenn du query_first benutzt, damit wird eh nur ein einziger Datensatz aus der Datenbank geholt, somit kannst du ganz einfach mit $buddies['Feldname'] auf die einzelnen Feldinhalte zugreifen.

mfg
SNaKeMe
Die Sache ist ja die das ich die Userid des Betrachters mit den Userid´s der Buddyliste des Posters vergleichen möchte. Die Buddyliste ist allerdings in der Mysql-Datenbank als Textfeld definiert und die einzelnen Userid´s mit Leerzeichen getrennt. Deshalb muss ich ja die Buddyliste des Posters auslesen und zerlegen. Danach diese dann mit der Userid des Betrachters vergleichen. Stimmt eine der ausgelesenen Userid´s mit der des Betrachters überein, soll das Profilfeld angezeigt werden.
helga
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
$result = $db->query_first("SELECT buddylist FROM bb".$n."_users WHERE $posts[userid]");

$arraybuddys = explode(" ", $result['buddylist']);

if(in_array($wbbuserdata['userid'], $arraybuddys)) {

Ausführen, wenn vorhanden

}
else {

Ausführen, wenn nicht vorhanden

}
SNaKeMe
Also vom Aufbau und der Logik her würd ich sagen, dass ist der Code. Allerdings stimmt die Ausgabe nicht. Ich hab bei ein paar Usern, meine Userid in die Buddyliste eingetragen bekomme allerdings nur das "else"-Ergebnis ausgegeben, als wäre meine Userid nicht in Iher Buddyliste enthalten. Scheint wohl an dem Explode-Befehl zu hängen.

Nachtrag:
Hab das noch mit nem Freund von mir abgeklärt haben dazu diesen Code verwendet:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
$result $db->query_first("SELECT buddylist FROM bb".$n."_users WHERE $posts[userid]");

$arraybuddys explode(" "$result['buddylist']);

echo "result: ".$result."\n";
echo "arraybuddys: ".$arraybuddys."\n";
echo "if-Abfrage: ".in_array($wbbuserdata['userid'], $arraybuddys)."\n";
echo '$wbbuserdata[\'userid\']: '.$wbbuserdata['userid']."\n";

if(in_array($wbbuserdata['userid'], $arraybuddys)) {

echo "Ja";

}
else {

echo "Nein";

}


Wir fragen uns warum eigentlich bei der echo "result" Ausgabe Array steht. Er meinte das es wohl am query_first Befehl liegt! Deshalb kann wohl der Array in der If-Abfrage dann auch nicht verglichen werden und gibt immer den Else-Wert aus. Bei Fragen oder Hilfe könnt Ihr mich auch gerne per Icq anquatschen Nummer ist 96943224.

Thx very much!
helga
bei der Ausgabe der Variable $result steht array, weil dies ein Array mit einem Eintrag ist, daher mußt du dies als $result['buddylist'] ausgeben.

Du kannst dir ein komplettes Array aber auch per print_r ausgeben lassen, also so:

print_r ($result);
SNaKeMe
LooooooooooL ich hab jetzt den Fehler verstanden *gg*

Er nimmt vom ersten Post die Userid und die nimmt er so oft wie es Posts gibt und gibt immer die Buddyliste des ersten Posts aus. Das heisst er liesst den Zweiten Post gar nicht aus usw.

Ich meld mich wenn ich dafür ne Lösung hab.

mfg
helga
ah, habe mir dein Anfangspost garnicht durchgelesen, sondern nur mittendrinn angefangen.

Da du ja diese Anzeige im Posting haben willst und dein Eintrag ja eh in der Usertabelle vorhanden ist, dann mußt du noch nichtmal eine DB-Abfrage machen, da diese Wert schon vorhanden sind.

Also suche mal in der thread.php folgendes:


code:
1:
2:
3:
		if ($posts['userid']) {
			$posts['homepage'] = htmlconverter($posts['homepage']);
			$posts['email'] = getASCIICodeString($posts['email']);



dadrunter kommt dann folgendes:

$buddies_array = explode(" ", $posts['buddylist']);

code:
1:
2:
3:
4:
5:
foreach($buddies_array as $buddies_element){

$buddy_data = getwbbuserdata($buddy['userid']);
eval("\$buddys .= \"".$tpl->get("thread_buddy_bit")."\";");
}


Dann erstellst du eine neue TPL, wo dann das alles rein soll, was von deinem Buddy erscheinen soll. Als Variable deines Buddys nimmst du dann immer:

$buddy_data['userid'] oder $buddy_data['username'] e.t.c.

In der thread_postbit.tpl packst du nur an geeigneter Stelle die Variable $buddys rein, also dort wo deine Daten angezeigt werden sollen.
SNaKeMe
Ausgabefehler:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/www/web62/html/fff/thread.php(220) : eval()'d code on line 1

Thread.php:
code:
1:
2:
3:
4:
5:
6:
7:
$buddies_array = explode(" ", $posts['buddylist']);
			foreach($buddies_array as $buddies_element) {
			$buddy_data = getwbbuserdata($buddy['userid']);
			eval("\$buddys = \"".$tpl->get("thread_buddy_bit")."\";");
			}


Zeile 200:
code:
1:
eval("\$buddys = \"".$tpl->get("thread_buddy_bit")."\";");


Ich raffs grad nicht wo da ein Fehler sein soll?
helga
ehm, der Fehler liegt in deiner neu angelegten TPL, also in dieser hier:

thread_buddy_bit.tpl
SNaKeMe
Das ist aber nur das drin:

code:
1:
2:
$buddy_data['handy']<br>
$buddy_data['home']


Ich glaub das liegt an dem $buddy_data.

Hab eben grad mal nur Test reingeschrieben und da ging es ohne Probs. Sogar bei den richtigen User angezeigt.
helga
ändere mal in:

$buddy_data[handy]<br />
$buddy_data[home]
SNaKeMe
Kein Fehler aber auch keine Anzeige oO
Die Felder sind in der Datenbank allerdings ausgefüllt.
helga
Öhm da hab ich noch nen fehler drinne:

code:
1:
2:
3:
4:
5:
6:
7:

$buddies_array = explode(" ", $posts['buddylist']);
			foreach($buddies_array as $buddies_element) {
			$buddy_data = getwbbuserdata($buddies_element);
			eval("\$buddys = \"".$tpl->get("thread_buddy_bit")."\";");
			}


teste mal
SNaKeMe
Hmm leider wieder nicht. Keine Ausgabe und kein Fehler.

Was ist das eigentlich hier für ein Befehl: getwbbuserdata ?

PS: Meine Icq ist immer noch 96943224 großes Grinsen
XundY
getwbbuserdata macht aber nur sSinn wenn der übergebene Weert entweder die userid oder der Name ist von daher solltest du erstmal die sql-Abfrage entsprechend modifizieren damit das Array nur userids enthält dann wirds auch funzen

wobai das hier eigentlich in den wbb2-bereich gehört!

mfg
>>>>> Gehen Sie zum Original-Thread <<<<<
Sedo - Buy and Sell Domain Names and Websites project info: wbb-help.de Statistics for project wbb-help.de etracker® web controlling instead of log file analysis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43