Fehler im PHP-Script

  • Sry für die vielleicht etwas allgemeine Überschrift, aber ich wusste das Probleme nicht besser zu benennen und da ich nun wahrlich am verzweifeln bin, versuch ich mal hier mein Glück.

    Also:

    Also, ich habe gestern an dem ersten Abschnitt gesessen "Städte-Koordis auslesen" und bin nach 3h versuchen und zermürbung auf den Fehler gekommen, warum er mir keine werte ins array stadt speichert: das array wurde nicht in der if-Schleife deklariert ... komisch, weil ich es wohl manch ander mal auch außerdem deklarieren konnte, aber okay.

    Nun habe ich für den 2. Abschnitt "Punkte auslesen" genau den gleichen Quelltext verwendet, aber dem array punkte werden einfach keine Werte in der for-schleife zugewiesen. Durch echo konnte ich herausfinden, dass noch vor der for-schleife alle werte zugewiesen werden konnten, aber in der for-schleife selber kann ich zwar $test=1; schreiben, aber wenn ich dann die variable später ausgeben will, passiert nichts. D.h. nicht nur meinem lieben array werden keine werte zugewiesen, auch alle anderen dort vorgenommen wertzuweisungen werden einfach nicht akzeptiert.

    Ich bin echt am verzweifeln, da ich einfach nicht weiß, wodran es nun liegen könnte.

    MFG
    misel

  • Ich kann (oder will, suchs dir aus) erst helfen, wenn ich etwas mehr Quelltext habe - weil bei dem was du gepostet hast fehlen zwei schließende Klammern (Bedingung 1, Schleife 1):

    [php:1:39dab03580]<?php
    [...]
    // Schleife 1:
    for( $i = 0 ; $i < count($neu); $i++ )
    { // Öffnende Klammer für Schleife 1
    // Städte-Koordis auslesen
    // Bedingung 1:
    if ( $neu[$i] == "Verteidigungsanlagen" )
    { // Öffnende Klammer für Bedingung 1
    $stadt = array();
    // Schleife 2:
    for ( $s = 0; $s < $anz_stadt ; $s++ )
    { // Öffnende Klammer für Schleife 2
    $stadt[$s]=$neu[$i+1+$s];
    } // Schließende Klammer für Schleife 2
    } // Schließende Klammer für Bedingung 1

    // Punkte auslesen
    // Bedingung 2:
    if ( $neu[$i] == "Punkte" )
    { // Öffnende Klammer für Bedingung 2
    $punkte = array();
    // Schleife 3:
    for ( $s = 0; $s < $anz_stadt ; $s++ )
    { // Öffnende Klammer für Schleife 3
    $punkte[$s]=$neu[$i+(7*($s+1))];
    } // Schließende Klammer für Schleife 3
    } // Schließende Klammer für Bedingung 2
    [...]
    ?>[/php:1:39dab03580]

    Gruß,
    Modula (mit Kopfweh und Notepad, da PC frisch neuinstalliert)

  • *g* nun gut, dann versuch ich das unwichtige wegzustreichen, ohne dass klammern in mitleidenschaft gezogen werden und hoffe, dass es nicht zuviel quelltext auf einmal ist. Auf welchen Abschnitt es ankommt, weißt du ja nun.


    MFG
    misel (mit dem 0815-Editor von Windows unterwegs ;) )

  • gut *hoff dass er wiedergefunden wird* ^^

    denn trotz langer grübelleien, sehe ich noch immer keinen fehler.

    MFG
    misel

  • Lies dir mal meine Kommentare durch, ansonsten hab ich das Script lediglich umformatiert um besserer lesbarkeit zu erreichen.

    [php:1:27d9300533]<?php
    /** Funktionen */
    // Funktionen zum Entfernen von Absätzen aus der Statistik
    /** Funktionen gehören eigentlich an den Anfang einer PHP Datei... */
    function left($str, $howManyCharsFromLeft)
    {
    return substr($str, 0, $howManyCharsFromLeft);
    }
    function right($str, $howManyCharsFromRight)
    {
    $strLen = strlen($str);
    return substr($str, $strLen - $howManyCharsFromRight, $strLen);
    }


    $date = date("m.d.Y H:i:s");

    if (!isset($ausgefllt)){
    ?>
    <form name="Account" method="post" action="account.php">
    <table width="600" border="0" cellspacing="2" cellpadding="2">
    <tr>
    <td align="center" valign="top"><font size="2" face="Arial, Helvetica, sans-serif">Hier bitte die Account-Statistik eingeben:</font></td>
    </tr>
    <tr>
    <td>
    <textarea name="Statistik" cols="80" rows="25" class="inputtextarea"></textarea></td>
    </tr>
    <tr>
    <td>
    <input type="submit" class="inputbutton" value="Absenden">
    <input name="ausgefllt" type="hidden" id="ausgefllt" value="1">
    </td>
    </tr>
    </table>
    </form>
    <?php } else
    {
    //Die Statistik ins array schmeißen
    /** Einen Array mit " " zu trennen ist wenig Sinnvoll, du solltest besser ";" o.ä. verwenden... */
    $neu = array();
    $array = explode(" ", $Statistik);
    for($x = 0; $x < count($array); $x++)
    {
    $array[$x] = trim($array[$x]);
    if( $array[$x] != NULL )
    {
    $neu[] = $array[$x];
    }
    }

    // Vorgang zum Entfernen von Absätzen aus der Statistik
    /** irgendwie verstehe ich nicht so ganz warum du hier nicht mit str_replace() arbeitest... */
    for( $i = 1; $i <= strlen($Statistik); $i++ )
    {
    if( ord(right(left($Statistik, $i), 1)) == 9 || ord(right(left($Statistik, $i), 1)) == 10 || ord(right(left($Statistik, $i), 1)) == 13 )
    {
    $Statistik = left($Statistik, ($i - 1)) . " " . right($Statistik, (strlen($Statistik) - $i));
    }
    }

    /** Dieser Codeausschnitt ist doppelt, warum? */
    $neu = array();
    $array = explode(" ", $Statistik);
    for($x = 0; $x < count($array); $x++)
    {
    $array[$x] = trim($array[$x]);
    if( $array[$x] != NULL )
    {
    $neu[] = $array[$x];
    }
    }

    // Anzahl Städte Bestimmen
    for( $i = 0 ; $i < count($neu); $i++ )
    {
    /** schaut nach nem ellen langen if Block aus, sowas solltest du mit switch() {} machen... */
    if( $neu[$i] == "Iridium-Mine" )
    {
    $iri_mine = $i + 1;

    /** Also die Art und weise wie du die Städte zählst musst mir mal erklären, irgendwie hab ich das Gefühl als sei dein Array ineffektiv... */
    $anz_stadt = 0;
    while( is_numeric($neu[$i + $anz_stadt + 1]) )
    {
    $anz_stadt++;
    }
    }
    // Städte-Koordis auslesen
    if ( $neu[$i] == "Verteidigungsanlagen" )
    {
    /** *kopfkratz* - ich bin immer mehr der überzeugung, du solltest deine Arraystruktur überarbeiten :P */
    $stadt = array();
    for ( $s = 0; $s < $anz_stadt ; $s++ )
    {
    $stadt[$s]=$neu[$i+1+$s];
    }
    }
    // Punkte auslesen
    if ( $neu[$i] == "Punkte" )
    {
    $punkte = array();
    /** also spätestens jetzt müsst ich wissen wie dein $neu Array aufgebaut ist, bzw. wie dein $Statistik String aussachut... */
    for ( $s = 0; $s < $anz_stadt ; $s++ )
    {
    $test=1;
    $punkte[$s]=$neu[$i+(7*($s+1))];
    }
    }
    }

    /** die echo Anweisung kann man eleganter lösen, ich nehms mal raus und zeigs dir an nem beispiel... */
    /* // Entfernen der komplizierten echo Anweisung |>
    echo "


    <table width=\"400\"><tr><td class=\"inputbutton\" width=\"400\">
    <FONT face=arial size=2>
    Tach du Memme,


    danke für's eintragen deiner Statistik

    ".$punkte[0]."


    <HR NOSHADE SIZE=\"1\" WIDTH=\"400\" ALIGN=\"LEFT\">


    <a href=\"javascript:history.go(-1);\" class=\"inputbutton\">
    &laquo;&laquo; zurück</A>
    </td></tr></table></center>";
    */ // Entfernen der komplizierten echo Anweisung <|
    echo <<< EOE


    <!--

    --><!-- zwei
    in einem

    ? da nimm lieber nen neues

    -->

    </p>


    <table width="400">

    <tr>
    <td class="inputbutton">

    Tach du Memme,</p>


    danke f&uuml;r's eintragen deiner Statistik

    {$punkte[0]}
    </p>
    <hr noshade size="1" />


    [b]
    <a href="javascript:history.go(-1)" class="inputbutton">
    &laquo;&laquo; zur&uuml;ck
    </a>

    </p>
    </td>
    </tr>
    </table>
    </p>
    EOE;
    }
    ?>[/php:1:27d9300533]

    Meine Kommentare erkennst du an /** KOMMENTAR */ bzw.

  • Okay, vielen, vielen Dank ^^

    Ich werd heute abend mal alles durchgehen und wenn Fragen auftauchen mich hier nochmal melden.