Problem mit Array (kann nicht ausgelesen werden)

xplOoosive

Grünschnabel
Hallo,
habe folgendes Problem in meinem Script, welches ich für ein Forum erstellt habe:
Es sollen zu dem jeweiligen Thema die Kommentare aus der Tabelle 'thread_comments' abgerufen werden und für jedes Kommentar der jeweilige Inhalt der Spalte 'createdby' (der Benutzer der den Kommentar erstellt hat)in der Variable '$akt_user_result' gespeichert werden. Dies klappt auch soweit, jedoch kann ich '${$result_userinfo_comment_string.$x}' nicht in einem Array auslesen:

PHP:
$usercomment = "SELECT * FROM thread_comments WHERE topic = '$akt_thread';";
$result_usercomment_2 = mysql_query($usercomment);
$x=0;
while ($werte = mysql_fetch_array($result_usercomment_2))
	{
		
		$akt_user_result = $werte['createdby'];
		
		
	
   $result_userinfo_comment_string = "result_userinfo_comment";
   $userinfo_comment_string = "userinfo_comment";
   ${$userinfo_comment_string.$x}="SELECT Nachname, Vorname, Beitraege, dabeiseit FROM benutzerdaten WHERE Nickname = '$akt_user_result' ;";
   ${$result_userinfo_comment_string.$x}=mysql_query((${$userinfo_comment_string.$x}));
   $test = mysql_fetch_array((${$result_userinfo_comment_string.$x}));
   while ($bla=mysql_fetch_array((${$result_userinfo_comment_string.$x})))
   echo $bla['Nachname'];
   echo $akt_user_result;
$x++;
}
(zur Info: der befehl 'echo $akt_user_result;' klappt, jedoch 'echo $bla['Nachname'];' nicht...)
ich glaube, es liegt an der Verschachtelung der Variablen, gebe ich aber ein 'echo $test; ' kommt das Ergebnis 'Array'.
 
Zuletzt bearbeitet:
item: Ich sehe nirgens das $x gesetzt wird

item: $test kannst du mit var_dump() anschauen

item: Verscuhe dein Code zu vereinfachen. Die variablen zusammengesetzten Variablennamen verwirren extrem. Wenn du unbedingt das SQL-Result von jedem durchgang der Schleife behalten musst, würd ich es mit einem array machen.
PHP:
$result_userinfo_comment[$x] = mysql_query($sql_userinfo_comment[$x]);
 
Das $x kann eigentlich auch leer bleiben. Was das Problem genau ist, hab ich auch noch nicht gefunden. Aber:
item: $test kannst du mit var_dump() anschauen

item: Verscuhe dein Code zu vereinfachen. Die variablen zusammengesetzten Variablennamen verwirren extrem. Wenn du unbedingt das SQL-Result von jedem durchgang der Schleife behalten musst, würd ich es mit einem array machen.
PHP:
$result_userinfo_comment[$x] = mysql_query($sql_userinfo_comment[$x]);
 
Danke schonmal!!
Es gibt jedoch noch ein Problem, und zwar bei der Ausgabe der Daten:
PHP:
<?php
$x=0;
	
	while ($werte = mysql_fetch_array($result_usercomment_2))
	{
		
		$akt_user_result = $werte['createdby'];
		
		
	
   $userinfo_comment[$x] = "SELECT Nachname, Vorname, Beitraege, dabeiseit FROM benutzerdaten WHERE Nickname = '$akt_user_result';";
   $result_userinfo_comment[$x] = mysql_query($userinfo_comment[$x]);
   $test = mysql_fetch_array($result_userinfo_comment[$x]);
   $blaa=var_dump($test);
   echo $blaa;
   

		  
		
	$x++;
//...
$akt_thread = $_GET["thread"];
$usercomment = "SELECT * FROM thread_comments WHERE topic = '$akt_thread';";
$result_usercomment_2 = mysql_query($usercomment);	 														 
$x=0;   
				   while (($comment_info = mysql_fetch_array($result_userinfo_comment[$x])) AND ($comment = mysql_fetch_array($result_usercomment_2)))
		   {
			   echo "blaaa";
		   ?>
		   <tr><td><h2 id="intro"><u>Infos</u></h2>
           
           
           <?php print "Name: ".$comment_info['Vorname']." ".$comment_info['Nachname']; ?><br />
           <?php print "Bisherige Beitr&auml;ge: ".$comment_info['Beitraege']; ?><br />
           <?php print "Dabei seit: ".$comment_info['dabeiseit']; ?></td><td id="intro">
           <?php //print $comment['comment']; ?></p></td></tr>
		   <?php 
		   
		   $x++;
		   }		 
	}
in der Tabelle sollen links die Infos über den jeweiligen User angezeigt werden und rechts der jewelige Kommentar. Es erscheint jedoch kein Kommentar.. Kann es sein, dass es daran liegt, dass mysql_fetch_array($result_usercomment_2) mehrere Strings enthält und mysql_fetch_array($result_userinfo_comment[$x]) nur einen ? Der Befehl echo "blaaa" wird auch nicht ausgeführt, was daraufhin deutet, dass die Bedingung der while-schleife wohl nicht erfüllt ist.
der befehl var_dump($test) lieferte bei mir das folgende ergebnis:
PHP:
array(8) {
  [0]=>
  string(3) "abc"
  ["Nachname"]=>
  string(3) "abc"
  [1]=>
  string(3) "abc"
  ["Vorname"]=>
  string(3) "abc"
  [2]=>
  string(2) "24"
  ["Beitraege"]=>
  string(2) "24"
  [3]=>
  string(22) "03.01.2012 - 15:17 Uhr"
  ["dabeiseit"]=>
  string(22) "03.01.2012 - 15:17 Uhr"
}
array(8) {
  [0]=>
  string(3) "abc"
  ["Nachname"]=>
  string(3) "abc"
  [1]=>
  string(3) "abc"
  ["Vorname"]=>
  string(3) "abc"
  [2]=>
  string(2) "24"
  ["Beitraege"]=>
  string(2) "24"
  [3]=>
  string(22) "03.01.2012 - 15:17 Uhr"
  ["dabeiseit"]=>
  string(22) "03.01.2012 - 15:17 Uhr"
}
array(8) {
  [0]=>
  string(3) "abc"
  ["Nachname"]=>
  string(3) "abc"
  [1]=>
  string(3) "abc"
  ["Vorname"]=>
  string(3) "abc"
  [2]=>
  string(2) "24"
  ["Beitraege"]=>
  string(2) "24"
  [3]=>
  string(22) "03.01.2012 - 15:17 Uhr"
  ["dabeiseit"]=>
  string(22) "03.01.2012 - 15:17 Uhr"
}
seltsam finde ich hier jedenfalls, dass in jedem index der string zweimal vorhanden ist...
 
Zuletzt bearbeitet:
Das jedes 2 mal vorhanden ist, leigt an der Funktion mysql_fetch_array()
mysql_fetch_array — Liefert einen Datensatz als assoziatives Array, als numerisches Array oder beides
Ansonsten mit mysql_fetch_assoc() (Zugriff über Keys) oder mysql_fetch_row() (Zugriff über Index) arbeiten

Die Bedinung (echo "BlaBla"): Du arbeitest dort mit =. Ergi weist du Werte zu. Zum vergleichen solltest du == verwenden. Zudem mischst du dort irgendwei ein while() mit einem if() oder osnstwas. Was soll die folgende Zeile genau bewirken? Warum weisst du dem $comment die Resourse von letzten SQL-Aufruf zu?
PHP:
while (($comment_info = mysql_fetch_array($result_userinfo_comment[$x])) AND ($comment = $result_usercomment_2)){
    ..
}
 
Gut, ich denke ich werde es mal mit mysql_fetch_row() probieren.
Ich habe die while-schleife jedoch erstmal falsch kopiert, habe sie nochmal neu eingegeben:
PHP:
while (($comment_info = mysql_fetch_array($result_userinfo_comment[$x])) AND ($comment = mysql_fetch_array($result_usercomment_2)))
Was mir jedoch neu ist, ist dass ich == verwenden muss. Ich habe bis jetzt immer nur ein = benutzt z.B. bei anderen Abfragen von Arrays, wo es auch geklappt hat.
 
Zum Zuweisen ist = schon richtig. Ich dachte zuerst du willst Vergleichen.


Das mit den 2 Zuweisungen im while() ist aber nicht wirklich Sinnvoll oder?
 
Ich habe die while schleife nun mal getrennt:
PHP:
<?php $e=0;   
			echo $result_userinfo_comment[$e];	   				    
				   while ($comment_info = mysql_fetch_array($result_userinfo_comment[$e]))
		   {
			   
		   ?>
		   <tr><td><h2 id="intro"><u>Infos</u></h2>
           
           
           <?php print "Name: ".$comment_info['Vorname']." ".$comment_info['Nachname']; ?><br />
           <?php print "Bisherige Beitr&auml;ge: ".$comment_info['Beitraege']; ?><br />
           <?php print "Dabei seit: ".$comment_info['dabeiseit']; ?></td><td id="intro">
           <?php $e++;
		   }
		   while ($comment = mysql_fetch_array($result_usercomment_2))
		   {
			   
			    print $comment['comment']; ?></p></td></tr>
		   <?php 
		       
		   }
Klappen tut es aber immer noch nicht. echo $result_userinfo_comment[$e] gibt resource id#10 zurück, stimmt also. Die while-schleifen werden jedoch nicht aufgerufen.
 
Also. Da hast du ein rechtes Chaos im Code.
Du hast im ersten SQL wahrscheinlich genau ein Eintrag der rauskommt. Due greifst dann mit mysql_fetch_array() die Zeile ab. Somit ist der Zeiger in der Ersten Resource am Ende. Nachher willst du nochmals zgrieffen. Aber der Zeiger ist bereits am Ende und somit kommt bei $comment_info = mysql_fetch_array($result_userinfo_comment[$e] false zurück.

Ich versuch hier das ganze mal ein wenig zu vereinfachen. Dazu muss ich verstehen was du machen willst.

1) Du suchst die Userinformationen für einen bestimmten User aus

2) Du suchst alle Kommentare zu einem Thread

3) Hier kommen die Fragezeichen. Du gibst alle Kommentare aus mit den Userinformationen des zuvor ausgewählten Users. Also nicht mit dem User der die Kommentare geschrieben hat.

Bitte erklär mal den Punkt 3) genau, was da abgehen soll.
 
Im Punkt 3 sollen eigentlich die Infos über die User, die die Kommentare geschrieben haben mit dem jeweiligen Kommentar zusammen ausgegeben werden. Gibt es denn nicht noch eine andere Möglichkeit, die Daten auszulesen ohne die schleife while ($.. = mysql_fetch_array/assoc/row($...)) ?
Denn das Problem hierbei ist ja der Arraycounter, sagst du.
 
Zuletzt bearbeitet:
Zurück