Ergebnis 1 bis 9 von 9

Thema: php-Vergleich im Template

  1. #1
    Contao-Nutzer Avatar von DetlefT
    Registriert seit
    25.07.2014.
    Ort
    Bedburg
    Beiträge
    104

    Standard php-Vergleich im Template

    Hallo,

    ich verzweifele gerade an einem einfachen Vergleich zwischen einer Template-Variablen (mittels inputvar) und einem String:
    PHP-Code:
    <p class="byel">Variable Wert:      <?php echo $this->replaceInsertTags('{{post::seminar}}'); ?></p>
    <p class="bred">Variable Typ:       <?php echo gettype($this->replaceInsertTags('{{post::seminar}}')); ?></p>
    <p class="byel">Vergleich mit 'ja': <?php $yy = ($this->replaceInsertTags('{{post::seminar}}') == 'ja'); ?><?php echo '|'.$yy.'|'?></p>
    <p class="bred">var_dump von $yy:   <?php var_dump($yy); ?></p>
    Die Ausgabe:Unbenannt.JPG

    Ich sehe gerade den Wald vor lauter Bäumen nicht: Wo ist mein Denkfehler?
    Geändert von DetlefT (16.06.2017 um 16:35 Uhr)
    Viele Grüße, DetlefT

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.090
    Partner-ID
    10107

    Standard

    Du versuchst ein boolean auszugeben. Im Fall von false wird da wahrscheinlich ein leerer String ausgegeben.

  3. #3
    Contao-Nutzer Avatar von DetlefT
    Registriert seit
    25.07.2014.
    Ort
    Bedburg
    Beiträge
    104

    Standard

    Noch einmal leicht modifiziert - der Vergleich ergibt false, warum auch immer!

    PHP-Code:
    <p class="byel">Variable Wert:      <?php echo $this->replaceInsertTags('{{post::seminar}}'); ?></p>
    <p class="bred">Variable Typ:       <?php echo gettype($this->replaceInsertTags('{{post::seminar}}')); ?></p>
    <p class="byel">Vergleich mit 'ja': <?php if ($this->replaceInsertTags('{{post::seminar}}') == 'ja'): ?>ergibt true<?php else: ?>ergibt false<?php endif; ?></p>
    <p class="bred">var_dump von "$this->replaceInsertTags('{{post::seminar}}')": <?php var_dump($this->replaceInsertTags('{{post::seminar}}')); ?></p>
    Die Ausgabe: Unbenannt-2.JPG

    Wieso ist 'ja' nicht gleich 'ja'?
    Geändert von DetlefT (17.06.2017 um 20:25 Uhr)
    Viele Grüße, DetlefT

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dein "ja" ist 28 Zeichen lang. Das musst du mal näher untersuchen. Z.B. mit
    PHP-Code:
    (trim($this->replaceInsertTags('{{post::seminar}}')) == 'ja'
    Falls da Leerzeichen sein sollten.

    Oder mit einer entsprechenden String-Funktion.
    http://de1.php.net/manual/de/ref.strings.php
    Z.B. count_chars().
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  5. #5
    Contao-Nutzer Avatar von DetlefT
    Registriert seit
    25.07.2014.
    Ort
    Bedburg
    Beiträge
    104

    Standard

    Hallo Andreas,

    das kommt davon, wenn man ein Problem auf das (vermeintlich) Wesentliche reduziert, dabei aber dummerweise am Wesentlichen permanent vorbei guckt.

    Es wird eine post-Variable abgefragt, die natürlich nicht "ja" beinhaltet, sondern deren Wert lautet: "seminar=ja". Nach einem explode() funktioniert auch der Vergleich wie erwartet. Jetzt rätsele ich zwar noch, wieso ein
    PHP-Code:
    echo $this->replaceInsertTags('{{post::seminar}}'); 
    als Ergebnis 'ja' liefert und nicht ''seminar=ja", aber das Hauptproblem ist gelöst. Danke Andreas!

    PS: Die Länge "28" statt wie hier im Beispiel zu erwarten "10" rührt daher, dass "seminar" in realo länger ist.
    Geändert von DetlefT (18.06.2017 um 16:54 Uhr)
    Viele Grüße, DetlefT

  6. #6
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn der Key der POST-Variablen seminar ist, dann bringt dieser Inserttag natürlich nur den Wert der Variablen "seminar".

    Aber eigenlich holt man POST Variablen so.
    PHP-Code:
    echo \Input::post('seminar'); 
    Oder mit postHtml(), postRaw(), postUnsafeRaw().
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  7. #7
    Contao-Nutzer Avatar von DetlefT
    Registriert seit
    25.07.2014.
    Ort
    Bedburg
    Beiträge
    104

    Standard

    Wieder leicht modifiziert

    PHP-Code:
    <p class="byel">1. Zuweisung:        <?php $xx $this->replaceInsertTags('{{post::xxxx}}'); ?></p>
    <p class="byel">2. Variable Wert:    <?php echo $xx?></p>
    <p class="byel">3. Variable Typ:     <?php echo gettype($xx); ?></p>
    <p class="byel">4. var_dump von $xx: <?php var_dump($xx); ?></p>
    <p class="byel">5. count_chars()
        foreach (count_chars($xx, 1) as $i => $val) {
            echo "Es gibt $val Vorkommen von \"" , chr($i) , "\" in der Zeichenkette.\n";
        }
    </p>
    Die Ausgabe: Unbenannt-3.JPG

    Also ist der Value bei 2: "nein" => richtig!
    Der Value bei 4. ist ebenfalls "nein", aber die Länge ist 14 => ???
    Der Value bei 5. ist dann "{{post::xxxx}}". ???

    Deshalb meine schnelle, leider falsche, Vermutung im vorigen Post, dass es ein Array (also key + value) ist, aber da sagt 3. und entsprechende Versuche meinerseits was anderes.

    Vielleicht können die Cracks das ja aufklären - ich habe mir derweil mit $_POST['xxxx'] geholfen: das funktioniert ...

    Edit: Andreas: hatte nicht neu geladen, Deinen Post erst nach dem Schreiben gesehen, ebenso mein Edit in Post #5 erst jetzt gemacht.
    Wo ist der Vorteil von \Input:ost() gegenüber $_POST[]?
    Geändert von DetlefT (18.06.2017 um 16:53 Uhr)
    Viele Grüße, DetlefT

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.090
    Partner-ID
    10107

    Standard

    Wenn du nicht die Input Klasse verwendest, riskierst du potentiell code injections.

  9. #9
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Und $_POST ist ne Variable von PHP. "\Input::get()" ist die Methode get() der Klasse "Input" von Contao. Innerhalb von Contao sollte man wenn's geht immer die Contao-Klassen benutzen.

    Hier ist die Input https://github.com/contao/core/blob/...ntao/Input.php

    Am besten schaust du sie mit deinem Editor, welcher einen Code-Explorer hat, an. Ich kann keine phpdocs von der Contao-API online finden, wo man dann schnell die Funktionen mit ihrer Erklärung sehen könnte.

    Es sieht bei dir so aus, als würde in deiner PHP-Datei der Inserttag nicht aufgelöst, aber dann im FE schon. Deswegen steht in der Variable in deinem Script einfach der volle String im FE dann aber die Auflösung. \Input::get() ist aber sowieso die bessere und normale Lösung.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •