PHP->Klammer zu viel, nur unbekannt wo...

Diskutiere mit über: PHP->Klammer zu viel, nur unbekannt wo... im Web-Programmierung Forum

  1. koli.bri

    koli.bri Thread Starter Gast

    Hallo.

    da wollte ich mal eben für Mauki eine Funktion erstellen, damit er eine Sitemap auf seiner Homepage anbieten kann, und dann passiert mir sowas:
    Ich bekomme die Fehlermeldung, dass eine geschweifte Klammer "}" zu viel ist...
    Hier geht es zu dem Thread von Mauki, wo er sein Problem schildert, und folgendermaßen sieht mein Quelltext aus:

    PHP:
    <html><head><title>blubb</title></head><body><form><textarea style="width:1000px; height:300px;">

    <?php
    function schreibeordner($ordner,$html "\n",$sortart 0,$sortflg 0)
    {  
    // #1
    /* schreibeordner() => Gibt Ordnerinhalt mit formatierung und sortierung zurueck
     *   Laeuft NICHT Rekursiv (gibt immer nur einen Ordner aus)
     * Argumente:
     *   $ordner => Ordner, der durchsucht werden soll
     *   $html => Formatierung der Ausgabe. Folgende Platzhalter sind erlaubt:
     *     _DATEI_ => Die Datei, die angezeigt wird.
     *     _ORDNER_ => gibt den Ordner zu der Datei aus
     *     _ENDUNG_ => Gibt die Dateiendung aus
     *     _GROS_ => Gibt die Groesse der Datei aus
     *     _ZEIT_ => Gibt die Zeit aus, zu der die Datei zuletzt editiert worden ist
     *     __ => 
     *   $sortart => Gibt an, wonach Sortiert werden soll
     *     0 => Keine Sortierreihenfolge
     *     1 => Alphabetisch nach Dateinamen
     *     2 => Aphabetisch nach Dateiendungen
     *     3 => Dateigroesse
     *     4 => Letzte Bearbeitungszeit
     *     5 => Ordner oder Datei
     *     
     *     
     *   $sortflg => Sortierreihenfolge
     *     0 => Aufsteigend
     *     1 => Absteigend
     */
     
     
    if($verz opendir($ordner))
     {
        
    $x 0;
        
    $file = array();
        while(
    $temp readdir($verz))
        {  
    //#3
            
    if($temp != '.' AND $temp != '..')
            {  
    //#4
                
    $file[$x]['1'] = $temp;                            // Nach Dateiname
    //            $file[$x]['4'] = filemtime($temp);            // Nach letzter Bearbeitungszeit
    //            $file[$x]['3'] = filesize($temp);            // Dateigroesse
    //            $file[$x]['5'] = is_dir($temp) ? "o" : "f";    // Ordner oder Datei

                // Infos aus pahtinfo()
                
    $temp2 pathinfo($ordner."/".$temp);
    //            $file[$x]['2'] = $temp2['extension'];    // Dateiendung

                
                
    $x++;
            }  
    //+4
        
    }  //+3
        
    closedir($verz);
        
    /*
    print_r($file);            //Nur zum Testen
    echo "-->".$x."<--";    //Nur zum Testen
    */

        // Sortieren:
        
    if($sortart AND $sortart <= 5)
        {
            for(
    $y=0;$y<$x;$y++)
            {
                for(
    $z=$y;$z<$x;$z++)
                {
                    
    $chk strnatcmp($file[$y][$sortart], $file[$z][$sortart]);
                    if(
    $chk 0)
                    {
                        
    $t $file[$y];
                        
    $file[$y] = $file[$z];
                        
    $file[$z] = $t;                
                    }
                }
            }
        }
        
    //Umdrehen
        
    if($sortflg != 0)
        {
            
    $file array_reverse($file);
        }
        
        
    // Vorbereiten zur Ausgabe:
        
    $return = array();
        foreach(
    $file as $var){
            
    $t $html;
            
    $ar = array('_DATEI_' => $file[1][1]);
    //                    '_ORDNER_' => $ordner,
    //                    'ENDUNG' => $var[2],
    //                    'GROS' => $var[3],
    //                    'ZEIT' => $var[4],
    //        );
    //echo $t;   // Nur zum Testen
            
    $t strtr($t$ar);
        }
        
    $t implode("",$return);
        return 
    $t;

     
    // Das hier kommt nur, wenn es den Angegebenen Ordner nicht gibt
     

     else
     {
        return 
    "Keinen Ordner mit diesem Namen gefunden";
     }
    }
    echo 
    schreibeordner("Homepages","_DATEI_");
    ?>
    </textarea></form>

    <?
    echo schreibeordner("Homepages","_DATEI_");

    ?>
    <body></html>
    Die Textarea habe ich drin, damit das "print_r" vernünftig angezeigt wird, was aber im Beispiel auskommentiert ist.
    Würd jetzt noch gerne mehr dazu schreiben, aber ich muss noch was essen, falls ihr den Fehler nicht auf anhieb seht, fragt einfach nach.
    Aber ich muss jetzt essen ^^

    PS.: Ich habe schon mehrere Stunden Suche hinter mir, aber ich denke mal, da es mein Script ist, finde ich ihn nicht...

    Ich denke auch im Namen von Mauki, vielen Dank für die kommende Hilfe.


    gruß
    Lukas
     
  2. balufreak

    balufreak MacUser Mitglied

    Beiträge:
    1.560
    Zustimmungen:
    28
    Registriert seit:
    12.10.2003
    in welcher zeile sagt er ist die }?
     
  3. kazu

    kazu MacUser Mitglied

    Beiträge:
    1.364
    Zustimmungen:
    47
    Registriert seit:
    09.11.2005
    Ich mache das immer so, dass ich teile des Skriptes wegkommentiere und wenn' s dann ohne Fehlermeldung geht hat man's gefunden. :)
     
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Dazu ad hoc 2 Tipps:

    (1) ich schreibe hinter jede schließende Klammer was sie schließt:

    PHP:

    function Tudas ($damit) {
      if (
    $a==$damit) {
       .....
      } 
    // end if $a==$damit

    // end of function Tudas
    sieht übertrieben aus, hilft aber bei größeren Projekten enorm. Ich mache das für alle geschwiffenen Klammern

    (2) Ich mische nie HTML und PHP

    Wenn ich in PHP-Seiten HTML generiere, dann immer mittels echo/print oder Funktionen. Das ewige PHP-HTML-Gewechsel schadet nur der übersicht. Damit kann man auch schön einrücken, ohne die Einrückungen im HTML-Code zu haben:

    PHP:

    print "<table>";
      print 
    "<tr>";
        print 
    "<td>blablub</td>";
        print 
    "<td>schrubbel</td>";
      print 
    "</tr>";
    print 
    "</table>";
    damit verliere ich auch bei Skripten über mehrere 1000 Zeilen nicht den Faden oder finde ihn zumindest wieder! Sortier mal Dein Skript nach den Kriterien, Du findest dann die Klammer.

    Ich hab gelernt, daß ich Zeit spare, wenn ich sie gleich in diese Art von Kommentaren investiere. Dazu gehört auch eine gute History, wer wann warum was geändert hat. Alle Änderungen werden als PATCHxy gemarkert und die Originalzeilen als Kommentare aufgehoben!
     
  5. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    So hat jeder seine Tricks und Kniffe.

    Ich z.B. mache mit jeder (!) öffnenden Klammer sofort die schließende.
    Das mit dem Kommentieren mache ich auch wie wegus nur vielleicht nicht ganz so intensiv ;).
    Im vim hat man auerßdem die Möglichkeit zu jeder Klammer das Gegenstück zu finden (%). Auch das ist sehr nützlich, wenn man sich trotzdem mal verzettelt.
     
  6. goddess

    goddess MacUser Mitglied

    Beiträge:
    229
    Zustimmungen:
    10
    Registriert seit:
    26.02.2006
    In Zeile 94 sind vor der Klammer zwei Zeichen drin, die nicht hingehören. Man sieht sie im in deinem Code nicht, aber Zend sei dank... Einfach rauslöschen und mit blanks wieder anfüllen.
     
  7. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    ich bin da gebranntes Kind! Am Anfang war es ein kleines Intranet was ich aufbaute, jetzt ist es eine 8 Jahre alte Software gewachsen ab PHP 3.06, mit hunderten Dateien und unterschiedlichen Zugriffsbeschränkungen. Täglich benutzt von mehr als 50 usern. Wenn man da den Überblick behalten will, wird man sehr pedantisch - im eignen Interesse! ;)

    Stimmt! Ein Editor ohne diese Funktion ist Keiner :D

    Da kann ich ( neben zend) auch den Textwrangler sehr empfehlen. Die Funktion "Zap Gremlins" löscht sowas automatisch! Auch sehr praktisch!
     
  8. koli.bri

    koli.bri Thread Starter Gast

    Vielen dank. Ich vermute, dass Taco mir die anstatt eines Tabs da reingehauen hat, auf jeden Fall bekomm ich jetzt keine Fehlermeldung mehr.
    (Aber auch nicht das, was ich wollte...)
    Ich denke, den Rest schaff ich alleine.

    Noch einmal Danke an die Tipps, normalerweise mache ich das auch so, dass ich zu eine öffnenden Klammer direkt die schließende daneben schreibe.
    Nur ist mir erst am Ende aufgefallen, dass ich die Möglichkeit, dass ein falsches Verzeichniss aufgerufen wird, gar nicht abfange, weshalb ich da noch schnell das if hinzugefügt habe.

    Aber das Der Fehler wohl von Tavo kam ist blöd, dabei mochte ich das Teil so...

    Naja, vielen lieben Dank nochmal.

    gruß
    Lukas
     
  9. kazu

    kazu MacUser Mitglied

    Beiträge:
    1.364
    Zustimmungen:
    47
    Registriert seit:
    09.11.2005
    Das geht aber auch prima mit
    PHP:

    echo("<table>
      <tr>
        <td>blablub</td>
        <td>schrubbel</td>
      </tr>
    </table>"
    );

    Übrigens, was genau unterscheidet eigentlich print und echo? Ich habe bisher immer nur echo benutzt. :confused:
     
  10. koli.bri

    koli.bri Thread Starter Gast

    http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

    Das hab ich bei der www.php.net gefunden, bei "echo()".
    Der Unterschied, den ich jetzt für wichtig halte, weil man ihn auch einsetzen kann, ist, das print() einen Rückgabewert hat, also, wenn das Schreiben erfolgslos war, kann man dies Abfangen. da man aber keine Meldung rausgeben kann, fällt mir gerade kein Beispiel ein.

    Im Prinzip, würde ich sagen, ist es vollkommen Egal, was man benutzt.
    Eventuell ist echo() schneller, da es keinen Rückgabewerd hat.
     
Die Seite wird geladen...
Ähnliche Themen - PHP >Klammer viel Forum Datum
Werte der gleichen Schlüssel summieren (assoziativen Array) Web-Programmierung 25.08.2016
einfaches php. emailformular bei strato Web-Programmierung 08.08.2015
PHP Array in Google Maps Wegpunkte umwandeln Web-Programmierung 13.03.2015
PHP Update auf 5.6 im Terminal für Localhost (MAMP und Laravel) Web-Programmierung 12.09.2014
PHP: Nächster Tag auf Deutsch ausgeben Web-Programmierung 23.01.2014

Diese Seite empfehlen

Benutzerdefinierte Suche