Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Undefined Index ...?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Undefined Index ...?

    Moin, euer Stammnutzer mal wieder.

    Kann ich dieselbe mysql_abfrage zwei Mal mit mysql_fetch_array abfragen? Ich vermute ja, aber ich finde einfach meinen Fehler nicht...

    PHP-Code:
            if(ISSET($_POST["fragenr"]))
        {
            
    $fragenr $_POST["fragenr"];
        }
        else
        {
            
    $fragenr 0;
        }
        
        if(ISSET(
    $_POST["name"]) && strlen($_POST["name"]) >= 1)//Wenn Name gesetzt und mind. 1 Zeichen beinhaltet
        
    {        
            
    $name $_POST["name"];
            
            echo 
    "Willkommen, ".$name"! Schnallen Sie sich an, es geht sofort los! Nicht vergessen, Sie haben ganze drei Joker, die nur darauf warten, Ihnen bei Ihrer Geldleiter aufwärts zu verhelfen!";
            
            
    $name_eintragen mysql_query("INSERT INTO rekorde (name) VALUES ($name)");
        }
        else
        {
            echo 
    "<font color='#FF0000'><b>Fehler!</b></font> Bitte Namen eingeben!<br><a href='index.html'>Zur&uuml;ck zur Homepage</a>";
        }
        
        
        
    $wwm_abfragen "SELECT * FROM wwm"// WHERE frage_nummer = ".$i;
        
    $wwm mysql_query($wwm_abfragen);
        
    $frage = array();
        
    $antwort_richtig = array();
        
            while(
    $daten_wwm mysql_fetch_array($wwm))
                {
                    
    $frage[] = $daten_wwm["frage"];
                    
    $antwort_richtig[] = $daten_wwm["antwort_richtig"];
                    
    // $antwort1[] = $daten_wwm["antwort1"];
                    // $antwort2[] = $daten_wwm["antwort2"];
                    // $antwort3[] = $daten_wwm["antwort3"];
                    // $antwort4[] = $daten_wwm["antwort4"];
                
    }
        
            if (
    $fragenr != 0)
        {
            if(ISSET (
    $_POST["antwort1"]));
            
    $antwort1 $_POST["antwort1"];
            if(ISSET (
    $_POST[antwort2]));
            
    $antwort2 $_POST["antwort2"];
            if(ISSET (
    $_POST["antwort3"]));
            
    $antwort3 $_POST["antwort3"];
            if(ISSET (
    $_POST["antwort4"]));
            
    $antwort4 $_POST["antwort4"];
            
            echo 
    $antwort1;
            
                    if (
    $antwort1[$fragenr-1] == $antwort_richtig[$fragenr-1])
            echo 
    "Glückwunsch! Richtige Antwort, weiter geht es!";
            else if (
    $antwort2[$fragenr-1] == $antwort_richtig[$fragenr-1])
            echo 
    "Glückwunsch! Richtige Antwort, weiter geht es!";
                
            else if (
    $antwort3[$fragenr-1] == $antwort_richtig[$fragenr-1])
            echo 
    "Glückwunsch! Richtige Antwort, weiter geht es!";

            else if (
    $antwort4[$fragenr-1] == $antwort_richtig[$fragenr-1])
            echo 
    "Glückwunsch! Richtige Antwort, weiter geht es!";

        }
        
        
        echo 
    $fragenr;
        
        
        
    $antwort1 = array();
        
    $antwort2 = array();
        
    $antwort3 = array();
        
    $antwort4 = array();

        
            while(
    $daten_wwm mysql_fetch_array($wwm))
            {
                
                
    $antwort1[] = $daten_wwm["antwort1"];
                
    $antwort2[] = $daten_wwm["antwort2"];
                
    $antwort3[] = $daten_wwm["antwort3"];
                
    $antwort4[] = $daten_wwm["antwort4"];

            
            }

            

        
        
    $nxtfragenr $fragenr+1;
        
        
        echo 
    $fragenr;
        
        if (
    $fragenr <=14)
        {
        echo 
    "<p><p>
                <div align='center'>
                <form action='werwird.php'    method='post'>
                    <table width = '80%' border = '1'>
                    <colgroup>
                        <col width='50%'></col>
                        <col width='50%'></col>
                    </colgroup>
                        <tr>
                            <th colspan = '2'><img src='bilder/quiz_neu.png' height='24' width ='24'> "
    .$frage[$fragenr]." <img src='bilder/quiz_neu.png' height='24' width ='24'>
                            </th>
                        </tr>
                        <tr>
                            <td>
                                <input type='radio' name='antwort' value='"
    .$antwort1[$fragenr]."' >".$antwort1[$fragenr]."</input>
                            </td>
                            <td>
                                <input type='radio' name='antwort' value='"
    .$antwort2[$fragenr]."'>".$antwort2[$fragenr]."</input>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <input type='radio' name='antwort' value='"
    .$antwort3[$fragenr]."'>".$antwort3[$fragenr]."</input>
                            </td>
                            <td>
                                <input type='radio' name='antwort' value='"
    .$antwort4[$fragenr]."'>".$antwort4[$fragenr]."</input>
                            </td>
                            
                        </tr>
                    </table>
                <input type='hidden' name='fragenr' value='"
    .$nxtfragenr."'></input>
                <input type='submit' value='Frage beantworten!'></input>
                </form>
                </div>"
    ;
        } 
    Als Fehlerquelle gibt er die Zeilen in der Tabelle an, in denen die Antwortmöglichkeiten ausgegeben werden sollen.


    Außerdem, nachdem man dcas Formular abgeschickt hat, auch noch die Zeilen mit den if ISSET-Anweisungen der Antworten.

    Würde darauf tippen, dass es was damit zu tun hat, dass die Antwortmöglichkeiten egtl. in einem Array gespeichert werden, jedoch die angeklickte Antwort im Formular eine Variable ist.

    Ideen?
    PHP-Code:
    echo $_POST['Beitrag_DAU']; 


  • #2
    Jain.

    Jeder Aufruf einer _fetch() Funktion setzt den internen Datensatzzeiger einen weiter vor...

    Schau dir mal PHP: mysql_data_seek - Manual an, damit kannst du im Resultset hin- und herspringen.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Auch als Stammuser solltest du das Manual kennen. Würdest du da aufmerksam lesen würdest du erkennen das mysql_fetch_array einen Datensatz ausliest und dann den internen Zeiger um eins weiter schiebt. Heißt nachdem alle Datensätze durchgegangen sind ist der Zeiger am Ende. Möchtest du jetzt nochmal mysql_fetch_array aufrufen kommt natürlich ein leeres Ergebnis zurück weil nichts mehr da ist ...

      Kommentar


      • #4
        Kann ich mit data_seek nur den Datensatznummer auslesen oder auch ändern? Laut php.net ja, aber funktioniert nicht so ganz bei mir...
        PHP-Code:
            mysql_data_seek($daten_wwm0); 
        Fehlermeldung:
        Warning: mysql_data_seek() expects parameter 1 to be resource, boolean given in
        Ich erhalte die Fehlermeldung ebenfalls, wenn ich 1 statt 0 einsetze.

        Meine Antwortmöglichkeiten im Formular sind nun auch verschwunden, aber die kommen ja vllt. nach Lösung dieses Problem wieder da (Es fehlt nur die Ausgabe der Antworten selbst, Formular und Eingabeoptionen sind vorhanden)
        PHP-Code:
        echo $_POST['Beitrag_DAU']; 

        Kommentar


        • #5
          Lerne bitte endlich Grundlagen!

          $daten_wwm ist bei dir keine “resource”.
          Wenn du nicht weißt, was eine resource id ist - dann informiere dich bitte.

          Kommentar


          • #6
            Dann scheint $wmm die Resource-ID zu sein? War wohl Flüchtigkeitsfehler meinerseits - hoffe ich.
            Allerdings war mir Google beim Thema resource id wenig hilfreich /info

            Die Grundlagen würde ich ja vllt. sogar noch lernen, aber da bei mir die Zeit knapp wird, sieht es in der Richtung eher mager aus.

            Und . ohne Vorwürfe, Provakation oder ähnliches: Sind die Meisten von euch nicht mind. 25 und sind im Berufsleben oder haben studiert? Sprich, ihr habt da mehr Erfahrung als ein 21-jähriger Schüler?
            Das Handbuch ("Manual") hilft in einem solchen Moment IMHO auch nciht weiter, wenn man nicht weiß, wie sich die Funktion nennt (wenn man denn überhaupt weiß, dass es sie gibt!) - und das ganze Handbuch nach einer bestimmten Funktion, die man nicht beim Namen kennt, zu durchforsten, halte ich nicht für sehr effizient.
            PHP-Code:
            echo $_POST['Beitrag_DAU']; 

            Kommentar


            • #7
              Das Handbuch ("Manual") hilft in einem solchen Moment IMHO auch nciht weiter, wenn man nicht weiß, wie sich die Funktion nennt (wenn man denn überhaupt weiß, dass es sie gibt!) - und das ganze Handbuch nach einer bestimmten Funktion, die man nicht beim Namen kennt, zu durchforsten, halte ich nicht für sehr effizient.
              Das ist Unsinn. Das Handbuch
              - ist durchsuchbar
              - nach Kategorien (bspw. Datenbanken) aufgeteilt. Oft sind das nur 2 Handvoll Funktionen, von denen man bei den meisten die Funktion bereits am Namen erkennt
              - verlinkt relevante Begriffe, wie bspw. den Pseudotyp Ressorce
              - bietet genug Beispiele für solche EInsteigerthemen

              Zudem würdest Du genug Fehler verhindern, wenn Du Dich um sprechende Variablennamen bemühen würdest. Dass wwm, $wwm_abfragen und $daten_wwm nichts aussagen, liegt auf der Hand.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Durchsuchbar: Was nur etwas bringt, wenn man weiß, was man sucht.

                Anderen Punkte: Gebe ich zu, daran habe ich nicht gedacht. Vllt. habe ich auch einfach nur die Suchmethoden nicht wirklich in meinem Leben gelernt, die du beschrieben hast.

                Welche Variablennamen empfiehlst du denn dann? (Kannst dich ruhig auf meine Variablen beziehen)
                PHP-Code:
                echo $_POST['Beitrag_DAU']; 

                Kommentar


                • #9
                  Welche, die die wahre Aktion oder Funktion widerspiegeln.

                  $name_eintragen = mysql_query("INSERT INTO rekorde (name) VALUES ($name)");
                  $wwm_abfragen = "SELECT * FROM wwm"; // WHERE frage_nummer = ".$i;
                  repräsentieren beide eine Aktion, laut Typ enthalten sie aber verschiedene Dinge: $name_eintragen eine Ressource einer DB-Anfrage, $wwm_abfragen einen Querystring für eine Abfrage. Das ist etwas grundlegend anderes.

                  $daten_wwm ist auch ungünstig, weil es nichts über die Struktur aussagt. „Datensatz“ wäre treffender, weil das der Fachbegriff für eine Tabellenzeile eines Ergebnisses mit verschiedenen Feldern ist.

                  Die Verwendung von $antwort ist auch verwirrend:
                  PHP-Code:
                              $antwort1[] = $daten_wwm["antwort1"];
                              
                  $antwort2[] = $daten_wwm["antwort2"]; 
                  besser wäre, die Antworten so zu strukturieren:

                  PHP-Code:
                              $antwort[$frageid][1] = $daten_wwm["antwort1"];
                              
                  $antwort[$frageid][2] = $daten_wwm["antwort2"]; 
                  bzw.
                  PHP-Code:
                              $antwort[] = array (
                                                 
                  => $daten_wwm["antwort1"] ,
                                                 
                  => $daten_wwm["antwort2"]
                                                 ); 
                  $antworten wäre dann natürlich auch passender.

                  Usw. usf.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Naja, $antwort bezieht sich ja auf eine einzelne Antwort (wenn man davon absieht, dass es mehrere Spalten in der Tabelle gibt)

                    würde jetzt statt $wwm_abfragen wohl $wwm_abfragen_string nehmen, wenn ich das Ganze neuschreiben würde ($wwm wäöre dann entsprechend $wwm_abfragen)

                    Wobei ich zugeben muss, dass ich mich meist sehr schwer mit den Variablennamen tue...

                    Aber das mit dem Unidentified index bekomme ich noch nicht ganz hin..Der Fehler liegt beim Array, da bin ich mir sicher, nur wie umgehe ich diesen?

                    E: Moment...habe ihn evtl gefunden....

                    €²: OK, lag daran, dass im Formular das Feld immer "Antwort" hieß. Dies hatte vorher ich entsprechend geändert, damit Mehrfachauswahlen nicht mehr möglich sind. Habe das im Kode weiter oben nun auch entsprechend abgeändert.

                    Ganz schön anstrengend so ein 150-Zeilenprogramm, wenn man vorher in der Schule nur Zwanzigzeiler hatte...
                    PHP-Code:
                    echo $_POST['Beitrag_DAU']; 

                    Kommentar


                    • #11
                      Variablen sollen beschreiben was sie machen:
                      Ein String der ein SQL Insert Statement darstellt könntest du bspw. $sqlInsertString nennen.
                      Ein Array das Daten aus der Datenbank beinhaltet könnte bspw. $dbResultArray heißen.
                      IMHO sollte man Variablennamen/Funktionsnamen so wählen, dass man einfach beim Lesen bereits weiß, was diese Variable/Funktion macht/darstellt.
                      Ob du camleCase benutzt oder die einzelnen Wörter mit einem "_" verbindest liegt bei dir.

                      Undifinied Index heißt, das eine Variable nicht initialisiert ist und auf sie zugegriffen wird.
                      "My software never has bugs, it just develops random features."
                      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                      Kommentar

                      Lädt...
                      X