[PHP] Probleme beim Auslesen eines Arrays

#0
27.02.2007, 22:16
Moderator
Avatar hevtig

Beiträge: 2312
#1 Hallo,

habe jetzt schon eine zeitlang kein php mehr angepackt, doch jetzt muß ich wieder dran. ;)
Ich möchte eine Forensoftware 'erweitern', obwohl das eher Nebensache ist.
Ich habe jedenfalls ein Formular, welches ausgefüllt wird, und die Daten werden in MySQL gespeichert. Das funktioniert ansich auch soweit.

Ich habe Probleme mit dem Auslesen der Daten.
Damit ich sichergehen kann, daß nicht irgendwelche Funktionen der Forensoftware querschlagen habe ich das Wesentliche zum Testen in eine eigene Datei kpiert.

Code

<?php
include "./inc/header.inc.php";
        // anworten heraussuchen
        
        $r_answertext = thwb_query("SELECT answertext FROM Tabelle WHERE threadid=178 ORDER BY questionid ASC");

        while ($answertext = mysql_fetch_array($r_answertext, MYSQL_NUM))
        {
            print_r($answertext);
        }
?>
Der Query paßt, habe ich über mysql query Browser gecheckt.
Es sollten 2 Ergebnisse erscheinen: Antwort1 und Antwort 2
Das Ergebnis lautet folgendermaßen:

Zitat

Array ( [0] => Antwort1 ) Array ( [0] => Antwort2 )
Beides Array 0? Wie soll ich die denn einzeln ansprechen?
Habe schon zig Möglichkeiten ausprobiert, aber ich bekomme die nicht einzeln angesprochen. Entweder zusammen, oder nur eins... einfach ärgerlich

Bestimmt kann mir einer helfen.

Vielen Dank schonmal dafür.
__________
Woher soll ich wissen was ich denke, bevor ich höre was ich sage??
Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+!
Seitenanfang Seitenende
28.02.2007, 00:46
Member
Avatar Xeper

Beiträge: 5291
#2

Code

<?php
include "./inc/header.inc.php";
        // anworten heraussuchen
        
        $answer_array = array ();
        $r_answertext = thwb_query("SELECT answertext FROM Tabelle WHERE threadid=178 ORDER BY questionid ASC");

        while ($answertext = mysql_fetch_array($r_answertext, MYSQL_NUM))
        {
            $answer_array = array_merge($answer_array, $answertext);
        }

        foreach($answer_array as $answer) {
         echo $answer;
        }
?>
Gehts nicht so?
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
28.02.2007, 10:42
Moderator
Themenstarter
Avatar hevtig

Beiträge: 2312
#3 Jein! ;)

Vielen Dank erstmal für die Mühe.

Werd damit auch ein wenig rumprobieren.
Bislang hat sich aber nicht viel geändert.

das print_r in meinem Code war ja ansich nur zu Testzwecken.
Normalerweise wird da das Template aufgerufen.
im Template ist die hartgecodete Frage, darunter kommt jetzt $answer.

Im Ergebnis zeigt er mir dann komischerweise nur noch "Antwort2" an.

Ich kann ja nochmal den momentanen Code posten

Code

// anworten heraussuchen
        $answer_array = array ();
        $r_answertext = thwb_query("SELECT answertext FROM $pref"."question WHERE threadid=$thread[threadid] ORDER BY questionid ASC");

        while ($answertext = mysql_fetch_array($r_answertext, MYSQL_NUM))
        {
            $answer_array = array_merge($answer_array, $answertext);
        }

        foreach($answer_array as $answer) {
        $answer;
        }

        eval($Tanswer->GetTemplate("ANSWER"));
mmit dem eval wird das Template aufgerufen

Code

<tr bgcolor="$style[CellA]">
            <td></td>
            <td>Dies hier ist der Platzhalter für Frage 01:</td>          
          </tr>

          <tr bgcolor="$style[CellB]">
            <td>Antwort:</td>
            <td>
$answer
            </td>
          </tr>


          <tr bgcolor="$style[CellA]">
            <td></td>
            <td>Dies hier ist der Platzhalter für Frage 02:</td>
          </tr>

          <tr bgcolor="$style[CellB]">
            <td>Antwort:</td>
            <td>
$answer

            </td>
          </tr>
Ergebnis

Zitat

Dies hier ist der Platzhalter für Frage 01:
Antwort2
Dies hier ist der Platzhalter für Frage 02:
Antwort2
Packe ich das aufrufen des Templates vor die geschweifte Klammer
bekomme ich folgendes:

Zitat

Dies hier ist der Platzhalter für Frage 01:
Antwort1
Dies hier ist der Platzhalter für Frage 02:
Antwort1
Dies hier ist der Platzhalter für Frage 01:
Antwort2
Dies hier ist der Platzhalter für Frage 02:
Antwort2
Ich verzweifel da noch echt dran. Dabei mein ich, daß das doch gar nicht so schwer sein kann :/

Im Optimalfall hätte ich gerne den Code so, daß ich später im Template einfach so drauf zugreifen kann.

Code

...
Dies hier ist der Platzhalter für Frage 01:
$answer[1]
Dies hier ist der Platzhalter für Frage 02:
$answer[2]
...
Vielleicht doch noch irgendwelche Einfälle?
__________
Woher soll ich wissen was ich denke, bevor ich höre was ich sage??
Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+!
Seitenanfang Seitenende
28.02.2007, 11:00
Member
Avatar Xeper

Beiträge: 5291
#4

Code

// anworten heraussuchen
        $answer_array = array ();
        $r_answertext = thwb_query("SELECT answertext FROM $pref"."question WHERE threadid=$thread[threadid] ORDER BY questionid ASC");

        while ($answertext = mysql_fetch_array($r_answertext, MYSQL_NUM))
        {
            $answer_array = array_merge($answer_array, $answertext);
        }

        foreach($answer_array as $answer) {
        $answer;
        }

        eval($Tanswer->GetTemplate("ANSWER"));
Das eval musst ja in das foreach() und zwar vor echo $answer;.

Das sieht dann so aus:

Code

foreach($answer_array as $answer) {
        eval($Tanswer->GetTemplate("ANSWER"));
        echo $answer;
        }
Mach nochmal irgendwo davor ein var_dump($answer_array); du musst ja schauen ob in dem array irgendwelche Duplikate etc. sind - das wurde ja mit array_merge() zusammen gefügt.

http://de.php.net/manual/de/function.array-merge.php

Schau auch nochmal hier:
http://de.php.net/manual/de/function.array-merge-recursive.php
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
28.02.2007, 12:34
Moderator
Themenstarter
Avatar hevtig

Beiträge: 2312
#5 Hi,

vielen Dank. Das mit dem array_merge hats wohl gebracht. Hab es zwar jetzt noch ein wenig anders:

Code

// anworten heraussuchen
        $answer_array = array ();
        $r_answertext = thwb_query("SELECT answertext FROM $pref"."question WHERE threadid=$thread[threadid] ORDER BY questionid ASC");

        while ($answertext = mysql_fetch_array($r_answertext, MYSQL_NUM))
        {
            $answer_array = array_merge($answer_array, $answertext);
        }
        $answer_array;

        eval($Tanswer->GetTemplate("ANSWER"));
Damit scheint es hinzuhauen ;)
Im Template ruf ich die Werte dann per
$answer_array[1]
auf.

Warum sich das ganze jetzt so verhält, versteh ich zwar noch nicht ganz, aber man lernt ja nie aus ;)
__________
Woher soll ich wissen was ich denke, bevor ich höre was ich sage??
Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+!
Seitenanfang Seitenende
28.02.2007, 12:52
Member
Avatar Xeper

Beiträge: 5291
#6 Ja array_merge hängt sie alle nach einenader dran 0 müßte es auch geben, aber keine Ahnung es gibt verschiedene sort funktionen für arrays usw.
Da kann man noch was machen wenn's dir aktuell nicht gefällt.
Du musst mir aber jetzt auch noch was im Gegenzug erklären ;)

Zitat

$answer_array;

eval($Tanswer->GetTemplate("ANSWER"));
Warum steht bei dir das einsame $answer_array; im Wald?
Seit wann kann man eine Variable aufrufen (es sei denn Sie ist eine Funktion, Klasse ...).
Das kannst du doch getrost weg lassen oder?
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
28.02.2007, 14:21
Moderator
Themenstarter
Avatar hevtig

Beiträge: 2312
#7 ja, im template habe ich jetzt das ergebnis mit $answer_array[x] aufgerufen.
Scheint so jetzt erstmal zu funktionieren.

Danke nochmal für den Denkanstoß ;)

Muß natürlich noch ausgiebig getestet werden. Muß aber erstmal noch mehr machen...


aber du hast recht. das $answer_array; kann man weg lassen. War wohl noch von den vielen Tests übriggeblieben.
__________
Woher soll ich wissen was ich denke, bevor ich höre was ich sage??
Sag NEIN zu HD+/CI+ - boykottiert die Etablierung von HD+/CI+!
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: