If-Abfragen Problem

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

  • If-Abfragen Problem

    Hallo,

    hab mein BB-Code mal ein wenig ergänzt, und nun hab ich ein problem.

    Angenommen der User gibt ein:

    [schild=4]Text[/schild]

    das is ja noch okay, da die "4" das "schildhalter-image" auswält. Sprich schildhalter4.gif, weil es schildhalter1.gif bis schildhalter7.gif gibt!
    Aber wenn der user jetzt;

    [schild=8]Text[/schild]

    eingibt, passier nichts, weil es das image "schildhalter8.gif" nicht gibt.

    Nun, eigentlich recht einfach nur das funktioniert nicht wie ich das habe....


    PHP-Code:
    function makeSchild($halter,$text,$path=false) {
        
    $out '<table border="0" cellpadding="0" cellspacing="0"><tr>' "\n";
        
    $out .= '<td class="schild" align="center">'.$text.'</td>' "\n";
        
    /* Debug */
        
    $out .= '<td>\$halter - Type: 'gettype($halter) . ' - Wert: '.$halter.'</td>';
        
    $out .= '<td>\$text - Type: 'gettype($text) . ' - Wert: '.$text.'</td>';
        
    $out .= '<td>\$path - Type: 'gettype($path) . ' - Wert: '.$path.'</td>';

        
    $out .= '</tr><tr>' "\n";
        if (
    $halter<=7) {
            
    $out .= '<td align="center"><img
            src="'
    .$path.'img/smilies/schildhalter'.$halter.'.gif" alt=""         
            border="0"></td>'
    ;
        } elseif(
    $halter>=8) {
            
    $out .= '<td align="center"><img 
            src="'
    .$path.'img/smilies/schildhalter1.gif" alt="" 
            border="0" /></td>'
    ;
        }
        
    $out .= '</tr></table>' "\n";
        return 
    $out;

    Habe eine andere Möglichkeit auch ausprobiert:

    PHP-Code:
    function makeSchild($halter,$text,$path=false) {
        
    $out '<table border="0" cellpadding="0" cellspacing="0"><tr>' "\n";
        
    $out .= '<td class="schild" align="center">'.$text.'</td>' "\n";
        
    /* Debug */
        
    $out .= '<td>\$halter - Type: 'gettype($halter) . ' - Wert: '.$halter.'</td>';
        
    $out .= '<td>\$text - Type: 'gettype($text) . ' - Wert: '.$text.'</td>';
        
    $out .= '<td>\$path - Type: 'gettype($path) . ' - Wert: '.$path.'</td>';

        
    $out .= '</tr><tr>' "\n";
        if (
    file_exists($path.'img/smilies/schildhalter'.$halter.'.gif')) {
            
    $out .= '<td align="center"><img 
            src="'
    .$path.'img/smilies/schildhalter'.$halter.'.gif" alt=""
            border="0"></td>'
    ;
        } else {
            
    $out .= '<td align="center"><img 
            src="'
    .$path.'img/smilies/schildhalter1.gif" alt="" 
            border="0" /></td>'
    ;
        }
        
    $out .= '</tr></table>' "\n";
        return 
    $out;

    Funtioniert aber auch nicht.


    Debug:
    • $halter -> type STRING
    • $text -> type STRING
    • $path -> type BOOLEAN / STRING -> Relevant für Popups und der gleichen.


    Ausgabe mit der debug Zeile:
    • bbcode:
    • [schild=5]text[/schild]

    Code:
    <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
    	<td class="schild" align="center">text</td>
    	<td>$halter - Type: string - Wert: 5</td>
    	<td>$text - Type: string - Wert: text</td>
    	<td>$path - Type: boolean - Wert: </td>
    </tr><tr>
    	<td align="center"><img src="img/smilies/schildhalter1.gif" alt="" border="0" /></td>
    </tr></tbody></table>

    Wieso checkt der nicht, das es das image gibt !?
    Zuletzt geändert von Skaschy; 14.05.2005, 07:46.

  • #2
    Debuge mal lediglich die Rückgabewerte von file_exists(); und die ihm zugewiesenen Urls

    Wenn dies absolut korrekt ist. Gibst du ein chmod 755

    Dann sollte es zu 99% auch klappen
    [color=blue]MfG Payne_of_Death[/color]

    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
    [color=red]Merke:[/color]
    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

    Murphy`s Importanst LAWS
    Jede Lösung bringt nur neue Probleme
    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

    Kommentar


    • #3
      So langsam wirds Lustig:

      man beachte:


      Eingabe:
      • CODE
      • [schild=1]Schild-Halter 1[/schild]


      Ausgabe:
      Code:
      file_exists debug -> File img/smilies/schildhalter1.gif existiert nicht
      <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
      <td class="schild" align="center">Schild-Halter 1</td>
      <td>$halter - Type: string - Wert: 1</td>
      <td>$text - Type: string - Wert: Schild-Halter 1</td>
      <td>$path - Type: boolean - Wert: </td>
      </tr><tr>
      <td align="center"><img src="img/smilies/schildhalter1.gif" alt="" border="0"></td>
      </tr></tbody></table>

      und


      Eingabe:
      • CODE
      • [schild]Schild-Halter 1[/schild]


      Ausgabe:
      Code:
      File img/smilies/schildhalter1.gif existiert
      <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
      <td class="schild" align="center">kommt sofort</td>
      <td>$halter - Type: string - Wert: 1</td>
      <td>$text - Type: string - Wert: kommt sofort</td>
      <td>$path - Type: boolean - Wert: </td>
      </tr><tr>
      <td align="center"><img src="img/smilies/schildhalter1.gif" alt="" border="0"></td>
      </tr></tbody></table>
      Code bisher

      PHP-Code:
      function makeSchild($halter,$text,$path=false) {
          
      $out '<table border="0" cellpadding="0" cellspacing="0"><tr>' "\n";
          
      $out .= '<td class="schild" align="center">'.$text.'</td>' "\n";
          
      /* Debug */
          
      $out .= '<td>\$halter - Type: 'gettype($halter) . ' - Wert: '.$halter.'</td>';
          
      $out .= '<td>\$text - Type: 'gettype($text) . ' - Wert: '.$text.'</td>';
          
      $out .= '<td>\$path - Type: 'gettype($path) . ' - Wert: '.$path.'</td>';

          
      $out .= '</tr><tr>' "\n";
          if (
      file_exists($path.'img/smilies/schildhalter'.$halter.'.gif')) {
              
      $out .= "File ".$path.'img/smilies/schildhalter'.$halter.'.gif existiert';
              
      $out .= '<td align="center">
              <img src="'
      .$path.'img/smilies/schildhalter'.$halter.'.gif" alt="" border="0"></td>';
          } else {
              
      $out .= "File ".$path.'img/smilies/schildhalter'.$halter.'.gif existiert nicht';
              
      $out .= '<td align="center">
              <img src="'
      .$path.'img/smilies/schildhalter1.gif" alt="" border="0" /></td>';
          }
          
      $out .= '</tr></table>' "\n";
          return 
      $out;


      der RegEx:

      PHP-Code:
              $searcharray[]="/\[schild=(['\"]?)([^\"']*)\\1](.*)\[\/schild\]/siU";
      $replacearray[]=$this->makeSchild("\\2","\\3",$path); 
      $searcharray[]="/\[schild]([^\"]*)\[\/schild\]/siU";    
      $replacearray[]=$this->makeSchild("1","\\1",$path); 

      Kommentar


      • #4
        Wenn das jetzt ein Debugging ist fress ich einen Besen mit samt einer Putzfrau.....

        Wenn file_exists(); entsprechend reagiert dann aufgrund der Tatsache das irgendwer ihm einen dementsprechenden Parameter liefert der ihm dazu bringt:

        [] das er wie gewünscht alles richtig zurückgibt
        [] das er abhängig von seinem Parameter entsprechend zurückgibt


        Der Threadersteller möchte die Url nicht ausgeben und auch nicht auf Beiträge entsprechend eingehen, daher
        [] möchte er keine Hilfe mehr haben
        [] wird er auf Hilfe hoffen müssen
        [] erwartet er noch immer Hilfe
        [color=blue]MfG Payne_of_Death[/color]

        [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
        [color=red]Merke:[/color]
        [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

        Murphy`s Importanst LAWS
        Jede Lösung bringt nur neue Probleme
        Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
        In jedem kleinen Problem steckt ein großes, das gern raus moechte.

        Kommentar


        • #5
          Original geschrieben von Payne_of_Death
          Wenn file_exists(); entsprechend reagiert dann aufgrund der Tatsache das irgendwer ihm einen dementsprechenden Parameter liefert der ihm dazu bringt:
          Wat fürn ding?

          Original geschrieben von Payne_of_Death
          Der Threadersteller möchte die Url nicht ausgeben und auch nicht auf Beiträge entsprechend eingehen, daher
          URL !?
          http://2k5.mtk-party.de/?guestbook oder was meinst du?

          Chmod 755 ?! Auf die files / script ?


          Kommentar


          • #6
            es fängt schon mit der Zeile an:

            PHP-Code:
            $path.'img/smilies/schildhalter'.$halter.'.gif'
            kein Mensch hier kann auch nur entfernt wissen wie das nachdem x Durchlauf aussieht ? Man müsste raten und da man das hier gänzlich nicht tut stösst dein Thread auch wohl auf die entsprechende Ressonanz.

            Selbst in der PHP Referenz stehen minimum 2 Hinweise auf mögliche Fehlerursachen:

            If you use open_basedir in php.ini and use file_exists for file outside open_basedir path, you will not be warned at log and file_exists returns false even if file really exists.
            file_exists will have trouble finding your file if the file permissions are not read enabled for 'other' when not owned by your php user. I thought I was having trouble with a directory name having a space in it (/users/andrew/Pictures/iPhoto Library/AlbumData.xml) but the reality was that there weren't read permissions on Pictures, iPhoto Library or AlbumData.xml. Once I fixed that, file_exists worked.
            Die gänzliche Frage ist ob es am Parameter liegt weil er sich vll. durch irgendwas verändert oder ob es einen Fehler in der Klasse allgemein gibt.
            [color=blue]MfG Payne_of_Death[/color]

            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
            [color=red]Merke:[/color]
            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

            Murphy`s Importanst LAWS
            Jede Lösung bringt nur neue Probleme
            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

            Kommentar


            • #7
              If you use open_basedir in php.ini and use file_exists for file outside open_basedir path, you will not be warned at log and file_exists returns false even if file really exists.
              open_basedir is nicht gesettet.. hat ich damit nichts zu tun, weil die images im webroot verzeichniss vom user liegen also

              http://2k5.mtk-party.de/img/smilies/schildhalter1.gif
              ...
              http://2k5.mtk-party.de/img/smilies/schildhalter7.gif


              PHP-Code:
              $path.'img/smilies/schildhalter'.$halter.'.gif'
              was ist daran so schwer zu verstehen?

              $path ist eine optionale Variable, die nur "../../" beinhaltet wenn ein popup zbs aus

              http://2k5.mtk-party.de/module/globa...escription.php

              geöffnet wird, das die bilder angezeigt werden.

              $halter dürfte klar sein oder?

              Kommentar


              • #8
                Original geschrieben von Skaschy
                open_basedir is nicht gesettet.. hat ich damit nichts zu tun, weil die images im webroot verzeichniss vom user liegen also

                was ist daran so schwer zu verstehen?

                $path ist eine optionale Variable, die nur "../../" beinhaltet wenn ein popup zbs aus

                http://2k5.mtk-party.de/module/globa...escription.php

                geöffnet wird, das die bilder angezeigt werden.

                $halter dürfte klar sein oder?
                hab ich dich nach dem Sinn der Variabel gefragt oder nur entfernt angedeutet das ich etwas nicht verstehe?

                Was wollte ich? Debugging

                Zum hundersten Mal die Zeichenkette die sich aus Variabeln zusammensetzt sind variabel.

                und auf die Situation bezogen:
                [schild=1]Schild-Halter 1[/schild]
                [schild]Schild-Halter 1[/schild]
                Woher soll man wissen ob die Funktion bzw. die Parameter mit dem exakt gleichen Parameter aufgerufen wird????

                Und daher wollte ich das du diesen "verdammten" String immer ausgibst so schwer zu verstehen?

                Am sinnvollsten ist es mehrere Beispiele mitreinzunehmen um irgendwo eine Konstellation zu erkennen die zu dem Error führt.
                [color=blue]MfG Payne_of_Death[/color]

                [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                [color=red]Merke:[/color]
                [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                Murphy`s Importanst LAWS
                Jede Lösung bringt nur neue Probleme
                Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                Kommentar


                • #9
                  In wie fern meinst du Debugging, habe doch schon ausgeben, getestet oder versteh ich debugging total falsch?


                  Andere-Sache:

                  PHP-Code:
                  function makeSchild($halter,$text,$path=false) {
                      
                  $out .= '<table border="0" cellpadding="0" cellspacing="0"><tr>' "\n";
                      
                  $out .= '<td class="schild" align="center">'.$text.'</td>' "\n";
                      
                  $out .= '</tr><tr>' "\n";
                      if (
                  $halter<=7) {
                          
                  $out .= '<td align="center"><img 
                          src="'
                  .$path.'img/smilies/schildhalter'.$halter.'.gif" alt="" 
                          border="0"></td>' 
                  "\n";
                      } else {
                          
                  $out .= '<td align="center"><img 
                          src="'
                  .$path.'img/smilies/schildhalter1.gif" alt="" 
                          border="0"></td>' 
                  "\n";
                      }
                      
                  $out .= '</tr></table>' "\n";
                      return 
                  $out;

                  Selbst das Funktioniert nicht!
                  wird immer nur der Teil aus der else-anweisung ausgeführt.
                  egal ob $halter 1,2,3,4,5,6 oder 7 ist!
                  Zuletzt geändert von Skaschy; 15.05.2005, 15:11.

                  Kommentar


                  • #10
                    Original geschrieben von Skaschy
                    Selbst das Funktioniert nicht!
                    wird immer nur der Teil aus der else-anweisung ausgeführt.
                    egal ob $halter 1,2,3,4,5,6 oder 7 ist!
                    Ich widerspreche !

                    erzeugter HTML-Code:
                    <table border="0" cellpadding="0" cellspacing="0"><tr>
                    <td class="schild" align="center">bla</td>
                    </tr><tr>
                    <td align="center"><img
                    src="img/smilies/schildhalter1.gif" alt="if"
                    border="0"></td>
                    </tr></table>
                    <table border="0" cellpadding="0" cellspacing="0"><tr>
                    <td class="schild" align="center">bla</td>
                    </tr><tr>
                    <td align="center"><img
                    src="img/smilies/schildhalter1.gif" alt="else"
                    border="0"></td>
                    </tr></table>
                    <table border="0" cellpadding="0" cellspacing="0"><tr>
                    <td class="schild" align="center">bla</td>
                    </tr><tr>
                    <td align="center"><img
                    src="img/smilies/schildhalter5.gif" alt="if"
                    border="0"></td>
                    </tr></table>
                    PHP-Code:
                    Code:
                    function 
                    makeSchild($halter,$text,$path=false) {
                        
                    $out .= '<table border="0" cellpadding="0" cellspacing="0"><tr>' "\n";
                        
                    $out .= '<td class="schild" align="center">'.$text.'</td>' "\n";
                        
                    $out .= '</tr><tr>' "\n";
                        if (
                    $halter<=7) {
                            
                    $out .= '<td align="center"><img 
                            src="'
                    .$path.'img/smilies/schildhalter'.$halter.'.gif" alt="if" 
                            border="0"></td>' 
                    "\n";
                        } else {
                            
                    $out .= '<td align="center"><img 
                            src="'
                    .$path.'img/smilies/schildhalter1.gif" alt="else" 
                            border="0"></td>' 
                    "\n";
                        }
                        
                    $out .= '</tr></table>' "\n";
                        return 
                    $out;
                    }
                    echo 
                    makeSchild(1,'bla');
                    echo 
                    makeSchild(10,'bla');
                    echo 
                    makeSchild(5,'bla'); 
                    Man sieht exakt das beim zweiten Funktionsaufruf der Interpreter in die Else Verzweigung springt wie vor gesehen
                    [color=blue]MfG Payne_of_Death[/color]

                    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                    [color=red]Merke:[/color]
                    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                    Murphy`s Importanst LAWS
                    Jede Lösung bringt nur neue Probleme
                    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                    Kommentar

                    Lädt...
                    X