Funktion zum Leerzeichen durch %20 ersetzen lässt Server abkacken

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

  • #16
    Re: Funktion zum Leerzeichen durch %20 ersetzen lässt Server abkacken

    Original geschrieben von till.kaufmann
    Bitte helft mir.Gruß Till
    es hatte sechs Fehler.
    PHP-Code:
    <?
    echo leerzeichen("hallo **** du ");

    function leerzeichen($zupruefen){
    for ($i=0;$i<strlen($zupruefen);$i++){
        if ($zupruefen[$i] == chr(32)){
            $j = strlen($zupruefen)-1;       
                for ($j;$j>$i;$j--){
                    $zupruefen[$j+2]=$zupruefen[$j];
                }
                $zupruefen[$i]=chr(37);
                $zupruefen[$i+1]="2";
                $zupruefen[$i+2]="0";
            }
        }
    return $zupruefen;
    }

    ?>
    Zuletzt geändert von mäander_; 13.07.2006, 21:31.

    Kommentar


    • #17
      Original geschrieben von axo
      bevor du dir derartige aussagen erlauben darfst, solltest du lernen, allein durchs lesen des codes einzuschätzen, ob der autor ahnung vom programmieren hat oder nicht.
      Der Autor...
      [X] ... weiß nicht wie eine for Schleife funktioniert
      [X] ... versucht mit einem einzigen = auf Gleicheit zu prüfen
      [X] ... verwendet 2 ineinander geschachtelte Schleifen statt eines einzigen Funktionsaufrufes
      [X] ... verwendet ASCII-Codes statt Klartext Zeichen (chr(32) === ' ' && chr(37) === '%')
      [X] ... vergibt irreführende Funktions- und Variablenbezeichner
      [X] ... hat die Vorteile sinnvollen Einrückens nicht erkannt
      [X] ... kennt nicht den Unterschied zwischen "Server kackt ab" und "ich habe (mal wieder) eine Endlosschleife eingebaut"
      [X] ... verwendet XAMPP (vermutlich meinte er das mit "XAMMP")
      [&nbsp;&nbsp;] ... hat 1337-Zeichen im Nickname und eine Clanpage in seiner Signatur verlinkt
      [?] ... möchte ein Browsergame programmieren

      8 von 10 Punkten. Also hat der Autor keine Ahnung vom Programmieren oder hat vorher ausschließlich mit bash bzw. perl "programmiert", was aber aufs Selbe hinausläuft.
      Somit darf ich mir "derartige aussagen" erlauben. Und selbst wenn ich sie mir nicht erlauben dürfte, würde ich sie trotzdem machen.
      hopka.net!

      Kommentar


      • #18
        [X] ... weiß nicht wie eine for Schleife funktioniert
        doch, durchaus.
        [X] ... versucht mit einem einzigen = auf Gleicheit zu prüfen
        passiert häufig, und nicht nur anfängern. darauf hatte ich ja auch hingewiesen
        [X] ... verwendet 2 ineinander geschachtelte Schleifen statt eines einzigen Funktionsaufrufes
        noch nicht gelernt, auf php.net zu suchen. muss kein programmier-anfänger sein.
        [X] ... verwendet ASCII-Codes statt Klartext Zeichen (chr(32) === ' ' && chr(37) === '%')
        eher ein qualitätsmerkmal.
        [X] ... vergibt irreführende Funktions- und Variablenbezeichner
        erster punkt für dich.
        [X] ... hat die Vorteile sinnvollen Einrückens nicht erkannt
        zweiter punkt
        [X] ... kennt nicht den Unterschied zwischen "Server kackt ab" und "ich habe (mal wieder) eine Endlosschleife eingebaut"
        dritter punkt.
        [X] ... verwendet XAMPP (vermutlich meinte er das mit "XAMMP")
        what the hell... wir wollen jetzt aber nicht jeden dazu zwingen, umzusteigen, nur weil uns die shell besser gefällt, oder?
        8 von 10 Punkten.
        3 von 10 punkten.

        Also hat der Autor keine Ahnung vom Programmieren oder hat vorher ausschließlich mit bash bzw. perl "programmiert", was aber aufs Selbe hinausläuft.
        diskussion beendet, alles weitere sinnlos.

        Somit darf ich mir "derartige aussagen" erlauben.
        nach dem satz darfst du dir gar nichts mehr erlauben

        Und selbst wenn ich sie mir nicht erlauben dürfte, würde ich sie trotzdem machen.
        das befürchte ich auch. es gibt aber zum glück eine ignore-liste.

        grüße
        axo

        Kommentar


        • #19
          OffTopic:
          Das Forum gefällt mir, hier bleib ich!


          Ich denke, dass es zum Lernen des Programmierens in PHP sowohl dazu gehört, eigene Konstrukte aus for und while schleifen sauber zu basteln ( ohne dass der "server abkackt" ) als auch die kürzere und einfachere Variation per vordefinierter Funktionen zu kennen.

          Mein Salomonisches Urteil deshalb: Alle haben Recht, nur Till nicht...

          Ansonsten in so einem Fall einfach auf www.php.net gehen und im Manual unter Strings nachgucken. Ich finde selbst da immer noch Funktionen, die genau das machen, was ich will und die ich noch nicht kannte.

          Ansonsten: Basics Pauken.

          Was wird das Browsergame denn?

          Kommentar


          • #20
            Hi Leute, Danke für eure Tips, und auch für eure Kritik.
            Werde versuchen mich zu bessern.
            Mit den Variablennamen habs ich nicht so, mir fällt
            da nichts gscheites ein wie ich die nennen soll.
            Vorteile des Einrückens habe ich verstanden, ich dachte
            so wie ich das gemacht hab ist das eigentlich übersichtlich.
            Ich kenne sowohl den Unterschied zwischen PC kackt ab und
            PC kackt wegen Endlosschleife ab, das nächste mal
            werde ich mich deutlicher ausdrücken.
            Ich habe ASCII-Codes verwendet damit auch jeder Browser
            das gesuchte Zeichen richtig Interpretiert, ich hatte mal das Problem
            mit Javascript das IE und Opera if (blabla=="@") nicht richtig
            interpretiert haben. Seit dem mache ich bei Sonderzeichen immer
            alles mit dem ord() (mir ist schon klar das java-Script Client-Seitig läuft und PHP Server-seitig ist)
            Mir ist auch klar das für das ganze schon Funktionen
            vorhanden sind, aber zur Übung will ich es eben selber schreiben.
            Das ganze soll wenn es fertig ist eine Bildergalerie mit Bildupload werden, schaut es euch einfach mal an
            http://web414.terra-hosting.de/bildskript/index.php
            Das ganze mache ich für meinen Verein, damit der Vorstand selber Bilder uploaden kann.
            Zur Funktionsweise, erst werden alle Ordner im Ordner in der sich die PHP Datei befindet angezeigt, wenn man auf einen Ordner klickt werden alle Bilder in dem ausgewählten ordner angezeigt. Wenn man dann auf ein Bild klickt wird das Bild angezeigt.
            Gruß
            Till

            P.S. Für die wo es interessiert, hier der Quelltext
            PHP-Code:
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
            <html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
            <title>Unbenanntes Dokument</title>
            </head>

            <body>
            <table>
            <?
            //Wenn $Ordner und !$Bild da sind dann werden die im Ordner befindlichen Bilder angezeigt.
            if (isset($_GET['ordner']) & !isset($_GET['bild'])){
            zeigeinhalt(getcwd()."/".$_GET['ordner'],'bilder');
            echo ("\n<br>\n<a href='index.php'>zurück</a>\n");
            }
            //Wenn $Ordner und $Bild da sind dann wird ein einzelnes Bild angezeigt.
            elseif (isset($_GET['ordner']) & isset($_GET['bild']) ){
            echo ("<img src='".leerzeichen("".$_GET['ordner']."/".$_GET['bild']."")."' border='0'>\n<br>");
            echo ("<a href='index.php?ordner=".$_GET['ordner']."'>zurück</a>\n");
            }
            //Es werden die vorhandenen Ordner angezeigt
            else{
            zeigeinhalt(getcwd(),'ordner');
            }

            //Funktionen ------------------------

            //Function zum überprüfen ob eine Datei ein Bild ist
            function pruefebild ($bild){
            if ($bild!="." & $bild!=".." & strlen($bild)>4){
            $i=0;
                while ($i < strlen($bild)-3){
                    if ($bild[$i]=="." & $bild[$i+1]=="j" & $bild[$i+2]=="p" & $bild[$i+3]=="g"){
                    return true;
                    $i++;
                    }
                    elseif ($bild[$i]=="." & $bild[$i+1]=="J" & $bild[$i+2]=="P" & $bild[$i+3]=="G"){
                    return true;
                    $i++;
                    }
                    else{
                    $i++;
                    }
                }
            }
            }
            //Funktion zum Ordner und Bilder anzeigen
            function zeigeinhalt($direc,$dateiart){
            $dateien = dirscan($direc);
            foreach($dateien as $key => $value){
                if (is_dir($value) & $key!=0 & $key!=1 & $dateiart=='ordner'){
                    echo 
            ("<tr><td><a href='index.php?ordner=".$value."'>
            <img src='ordner.gif' border='0'></a></td><td>
            <a href='index.php?ordner=".$value."'>".$value."</a></td></tr>");
                    }
                elseif (pruefebild($value) & $key!=0 & $key!=1 /*& pruefebild($value)==true*/ & $dateiart=='bilder'){
                    echo 
            ("<tr><td><a href='index.php?ordner=".$_GET['ordner']."&bild=".$value."'>
            <img src='bild.gif' border='0'></a></td><td><a href='index.php?ordner=".$_GET['ordner']."&bild=".$value."'>".$value."
            </a></td></tr>");
                }
                }
            }

            //scandir Funktion für PHP Versionen < 5
              function dirscan($dir = './', $sort = 0){
              $dir_open = @ opendir($dir);
              if (! $dir_open)
                       return false;
               while (($dir_content = readdir($dir_open)) !== false)
                       $files[] = $dir_content;
               if ($sort == 1)
                   rsort($files, SORT_STRING);
               else
                   sort($files, SORT_STRING);
               return $files;
            }
            //Wandelt Umlaute Browserkompatibel um
            function umlaute($variable){
                $search = array("ä","ö","ü");
                $replace = array("&auml;","&ouml;","&uuml;");
                for ($x = 0; $x < 3 ;$x++) {
                    $variable_result = str_replace($search[$x],$replace[$x],$variable);        
            }
            return $variable_result;
            }

            //Wandelt Leerzeichen in %20 um
            function leerzeichen($zupruefen){
            for ($i=0;$i<strlen($zupruefen);$i++){
                if ($zupruefen[$i] == chr(32)){
                    $j = strlen($zupruefen)-1;       
                        for ($j;$j>$i;$j--){
                            $zupruefen[$j+2]=$zupruefen[$j];
                        }
                        $zupruefen[$i]=chr(37);
                        $zupruefen[$i+1]="2";
                        $zupruefen[$i+2]="0";
                    }
                }
            return umlaute($zupruefen);
            }
            ?>
            </table>
            </body>
            </html>

            Kommentar


            • #21
              die Aufgabe mit dem ersetzen von leerzeichen durch %20 war wohl zu schwierig für dich.
              Nimm nächstesmal die eingebaute Funktion. Den ganzen Rest hast Du wohl auch
              nicht selbst erstellt, es würde nicht zusammenpassen.

              Kommentar


              • #22
                Was meinst du damit das ich das ganze nicht selbst geschrieben hab ?
                Egal, ich brauch mich vor dir nicht zu rechtfertigen.

                Kommentar


                • #23
                  Original geschrieben von till.kaufmann
                  , ich brauch mich vor dir nicht zu rechtfertigen.
                  Dafür dass ich dir den sehr fehlerhaften Code instandgestellt habe (was sonst niemand tat), führst Du schon eine grosse Lippe.

                  Kommentar


                  • #24
                    Ich bin dir sehr dankbar das du meine Funktion richtig gestellt hast,
                    aber wenn du mich des Code Diebstahls beschuldigst
                    macht mich das schon sauer

                    Edit:
                    Ich habe an dem Skript weiterprogrammiert.
                    Hier das vorläufige Ergebniss
                    http://web414.terra-hosting.de/bildskript/index.php
                    Wenn ich das ganze auf meinem Rechner test werden die Bilder
                    mit %20 oder %uuml; im Namen nicht im Firefox angezeigt,
                    im IE und Opera schon.
                    Online gehts auch mit dem Firefox.

                    Und hier der Quelltext, ich hab versucht den Variablen sinnvolle Namen
                    zu geben.
                    PHP-Code:
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                    <html>
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                    <title>Unbenanntes Dokument</title>
                    </head>

                    <body>
                    <table>
                    <?
                    //Wenn $Ordner und !$Bild da sind dann werden die im Ordner befindlichen Bilder angezeigt.
                    if (isset($_GET['folder']) & !isset($_GET['bild'])){
                    showdata(getcwd()."/".$_GET['folder'],'picture');
                    echo ("\n<br>\n<a href='index.php'>zurück</a>\n");
                    }
                    //Wenn $Ordner und $Bild da sind dann wird ein einzelnes Bild angezeigt.
                    elseif (isset($_GET['folder']) & isset($_GET['bild']) ){
                    echo ("<a href='index.php?folder=".$_GET['folder']."'>zurück</a>\n<br>");
                    echo ("<img src='".space("".$_GET['folder']."/".$_GET['bild']."")."' border='0' width='640' height='480'>\n<br>");
                    echo ("<a href='index.php?folder=".$_GET['folder']."&bild=".nextpic($_GET['folder'],$_GET['bild'])."'> nächstes Bild </a>\n<br>");
                    echo ("<a href='index.php?folder=".$_GET['folder']."&bild=".prevpic($_GET['folder'],$_GET['bild'])."'> voheriges Bild </a>\n<br>");
                    }
                    //Es werden die vorhandenen Ordner angezeigt
                    else{
                    showdata(getcwd(),'folder');
                    }

                    //Funktionen ------------------------

                    //Function zum überprüfen ob eine Datei ein Bild ist
                    function checkpic($pic){
                    if ($pic!="." & $pic!=".." & strlen($pic)>4){
                    $i=0;
                        while ($i < strlen($pic)-3){
                            if ($pic[$i]=="." & $pic[$i+1]=="j" & $pic[$i+2]=="p" & $pic[$i+3]=="g"){
                            return true;
                            $i++;
                            }
                            elseif ($pic[$i]=="." & $pic[$i+1]=="J" & $pic[$i+2]=="P" & $pic[$i+3]=="G"){
                            return true;
                            $i++;
                            }
                            else{
                            $i++;
                            }
                        }
                    return false;
                    }
                    }
                    //Funktion zum Ordner und Bilder anzeigen
                    function showdata($directory,$datatype){
                    $files = dirscan($directory);
                    foreach($files as $key => $value){
                        if (is_dir($value) & $key!=0 & $key!=1 & $datatype=='folder'){
                            echo ("<tr><td><a href='index.php?folder=".$value."'><img src='ordner.gif' border='0'></a></td><td><a href='index.php?folder=".$value."'>".$value."</a></td></tr>");
                            }
                        elseif (checkpic($value) & $key!=0 & $key!=1 & $datatype=='picture'){
                            echo ("<tr><td><a href='index.php?folder=".$_GET['folder']."&bild=".$value."'><img src='bild.gif' border='0'></a></td><td><a href='index.php?folder=".$_GET['folder']."&bild=".$value."'>".$value."</a></td></tr>");
                        }
                    }
                    }

                    function nextprevpic($folder,$thispic,$prevnext = 0){
                    $pics = countpics($folder);
                    //Wenn Link für nächstes Bild asugegeben werden soll
                    foreach($pics as $key => $value){
                        if ($prevnext == 1 & $pics[$key] == $thispic){
                        if ($pics[$key+1]==''){
                        return $pics[0];
                        }
                        else {
                        return $pics[$key+1]; 
                        }
                        }
                    //Wenn Link für voheriges Bils ausgegeben werden soll
                        elseif ($prevnext == 2 & $pics[$key] == $thispic){
                        if ($pics[$key-1]==''){
                        return $pics[count($pics)-1];
                        }
                        else {
                        return $pics[$key-1]; 
                        }
                        }
                    }
                    }

                    //Funktion um den Link "nächstes Bild" anzuzeigen
                    function nextpic($folder,$thispic){
                    return nextprevpic($folder,$thispic,1);
                    }

                    //Funktion um den Link "voheriges Bild" anzuzeigen
                    function prevpic($folder,$thispic){
                    return nextprevpic($folder,$thispic,2);
                    }

                    //Funktion die Bilder in einem Ordner zählt, und ein Array mit Namen der Bilder zurück gibt
                    function countpics($folder){
                    $pics=0;
                    $folderdata = dirscan($folder);
                    foreach($folderdata as $key => $value){
                    if (checkpic($value)==true){
                    $picslist[$pics]=$value;
                    ++$pics;
                    }
                    }
                    return $picslist;
                    }

                    //scandir Funktion für PHP Versionen < 5
                      function dirscan($dir = './', $sort = 0){
                      $dir_open = @ opendir($dir);
                      if (! $dir_open)
                               return false;
                       while (($dir_content = readdir($dir_open)) !== false)
                               $files[] = $dir_content;
                       if ($sort == 1)
                           rsort($files, SORT_STRING);
                       else
                           sort($files, SORT_STRING);
                       return $files;
                    }
                    //Wandelt Umlaute Browserkompatibel um
                    function umlaute($variable){
                        $search = array("ä","ö","ü");
                        $replace = array("&auml;","&ouml;","&uuml;");
                        for ($x = 0; $x < 3 ;$x++) {
                            $variable_result = str_replace($search[$x],$replace[$x],$variable);        
                    }
                    return $variable_result;
                    }

                    //Wandelt Leerzeichen in %20 um
                    function space($string){
                    for ($i=0;$i<strlen($string);$i++){
                        if ($string[$i] == chr(32)){
                            $j = strlen($string)-1;       
                                for ($j;$j>$i;$j--){
                                    $string[$j+2]=$string[$j];
                                }
                                $string[$i]=chr(37);
                                $string[$i+1]="2";
                                $string[$i+2]="0";
                            }
                        }
                    return umlaute($string);
                    }
                    ?>
                    </table>
                    </body>
                    </html>
                    Gruß
                    Till
                    Zuletzt geändert von till.kaufmann; 14.07.2006, 13:00.

                    Kommentar

                    Lädt...
                    X