biitlu: String-Variable

Hallo,

ich habe folgendes Probelem:

Mittels eines Formulares werden Formulareingaben an einen externen Formmailer gesendet. Dieser sendet die die Daten an ein E-Mail und leitet den Benützer des Formulares auf eine Antwortseite, auf der die Formulardaten wieder ausgegeben werden können. Dies geht zum Beispiel so:

<blockquote>
<p><b>Ihre Zahl:</b> [eine_zahl]<br>
</p>
</blockquote>

Die Variable resp. der Name des Formularfeldes(hier "eine_zahl") wird in html also in eckigen Klammern geschrieben und dann auch brav ausgegeben.

Nun möchte ich die Formulareingabe aber in eine PHP-Variable speichern. Folgendes habe ich versucht:

<?php
 $nr = "[eine_zahl]";
 echo $nr;
?>

Auch hier gibt das Script brav die eingegebene Zahl aus. Wenn ich nun aber mit der Zahl rechnen will, erhalte ich immer 0. Ist auch nicht erstaunlich, da PHP die Zahl als String-Variable speichert(["eine_zahl"]=> string(8) "200010"). Den Typ von String auf Integer zu ändern, ergibt 0 als Ausgabe.

Hat jemand einen Tipp?

Danke für die Hilfe,
Biitlu

  1. <blockquote>
    <p><b>Ihre Zahl:</b> [eine_zahl]<br>
    </p>
    </blockquote>

    ein <p /> darf afaik nicht in einem blockquote vorkommen zudem ist <b /> deprecated und sollte nicht verwendet werden - man kann blockquote alleine auch schön stylen - zudem bezweifle ich, dass du <blockquote /> richtig verwendest - das element ist für zitate gedacht und nicht um die grade eingegebene zahl im formular zu zitieren :D

    Die Variable resp. der Name des Formularfeldes(hier "eine_zahl") wird in html also in eckigen Klammern geschrieben und dann auch brav ausgegeben.

    Nun möchte ich die Formulareingabe aber in eine PHP-Variable speichern. Folgendes habe ich versucht:

    <?php
    $nr = "[eine_zahl]";
    echo $nr;
    ?>

    Auch hier gibt das Script brav die eingegebene Zahl aus. Wenn ich nun aber mit der Zahl rechnen will, erhalte ich immer 0. Ist auch nicht erstaunlich, da PHP die Zahl als String-Variable speichert(["eine_zahl"]=> string(8) "200010"). Den Typ von String auf Integer zu ändern, ergibt 0 als Ausgabe.

    Hat jemand einen Tipp?

    du hast den typ auf integer geändert - integer ist das englische wort für ganzzahl - wie wir aus der grundschule wissen, setzen sich ganzzahlen in einem dezimalen zahlensystem aus den ziffern 0 bis 9 zusammen - keine nachkommastellen (weil ja ganzzahl) und keine sonderzeichen

    für mich sieht eine eckige klammer auf [ und eine eckige klammer zu ] nicht aus wie eine der ziffern von 0 bis 9 - darum dürfte schätzungsweise auch php probleme haben, den wert [123] in eine zahl zu konvertieren

    auch wenn php bei den datentypen vergleichsweise locker ist, sollte man diese gutmütigkeit nicht zu weit ausreizen - besonders bei verzweigungen ist das teilweise recht gefährlich

      
    $blah = 0;  
    // $blah = 1;  
      
    if ($blah == true) {  
     echo 'dieses';  
    } else {  
     echo 'jenes';  
    }  
    
    

    na was meinst du kommt dabei raus wenn man 0 und 1 versucht für $blah? 1x dieses, 1x jenes? oder doch nicht - wer weiss das schon genau wenn man datentypen nicht definiert ;) und keine typenvergleiche (identical-operator) durchfürht und einfach so vergleicht (equal-operator)

    1. Hi,

      ein <p /> darf afaik nicht in einem blockquote vorkommen

      Streiche zuerst "nicht", und dann kann anschliessend auch noch das "afaik" aus der Aussage entfallen :-)

      MfG ChrisB

      1. Hi,

        ein <p /> darf afaik nicht in einem blockquote vorkommen

        Streiche zuerst "nicht", und dann kann anschliessend auch noch das "afaik" aus der Aussage entfallen :-)

        Und in einer Strict-Variante *darf* blockquote sogar gar keine inline-Elemente als Kinder haben.

        MfG ChrisB

    2. Moin,

      vorest danke ich für die Antworten. Nun, der html-Code mit dem blockquote ist im Moment nicht so das Problem. Auch stammt er nicht von mir, sondern von der Anleitungsseite des Formmailbetreibers. Im Prinzip ist wichtig, zu wissen, dass die Formulareingabe in html-Code ausgeben wird, wenn man den Feldnamen in eckigen Klammern schreibt.

      Nun habe ich dank dem Hinweis von suit festgestellt, dass die PHP-Variable $nr tatsächlich nicht die eigentliche Zahl von [eine_zahl] übernimmt, sondern die ganze Variable als String in der Form [eine_zahl] (ist eigentlich völlig logisch, ich weiss). Dies wird deutlich wenn ich einzelne Teile daraus auslese:

      <?php
      $nr = "[eine_zahl]";
      $ziffer = substr($nr,1,7);
      echo $ziffer;
      ?>

      Ausgabe: eine_za

      <?php
      $nr = "[eine_zahl]";
      $ziffer = substr($nr,0,10);
      echo $ziffer;
      ?>

      Ausgabe: 200010

      Gibt es einen Weg, wie ich der $nr den Inhalt von [eine_zahl] zuweisen kann?

      Gruss
      Biitlu

      1. Hi,

        Gibt es einen Weg, wie ich der $nr den Inhalt von [eine_zahl] zuweisen kann?

        Hast du denn *ueberhaupt* die Moeglichkeit, dort eigenen PHP-Code zur Ausfuehrung zu bringen? Das bezweifle ich irgendwie ...

        Es klingt so, als ob dir eldiglich eine Art kleines Templatesystem zur Verfuegung stuende, in dem du bestimmte per Formular uebermittelte Werte ausgeben lassen kannst. Alles weitere, also insb. irgendeine Art von eigener Scriptlogik, duerfte dir aber verwehrt sein - es waere zumindest unklug, wenn jemand dich als Fremden auf seinem Server beliebig PHP-Code ausfuehren lassen wuerde.

        MfG ChrisB

        1. Hallo ChrisB,

          eigentlich wollte ich als PHP-Neuling darauf verzichten, die Daten "selbst" zu versenden, deshalb der wohl etwas anfängerhafte Lösungsversuch. Sorry, aber irgendwie muss es jeder einmal zuerst lernen. Und ja du hast recht, bei der Antwortseite, die in PHP geschrieben werden darf, handelt es sich um eine Templatesystem. Hier einmal noch meine Scripts.
          Formularseite(www.egenda.ch/cgi-bin/versuche.php):

          <html>

          <head>
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          <title>Kontaktformular</title>
          </head>

          <body>
          <form action="http://www.dw-formmailer.de/cgi-bin/dwmailer/dwmailer.pl" method="POST" enctype="multipart/form-data">
          <input type="hidden" name="pflicht" value="absender_mail">
          <input type="hidden" name="empfaenger_mail" value="belud@gmx.ch">
          <input type="hidden" name="betreff" value="Anfrage Kontaktseite">
          <input type="hidden" name="language" value="de">
          <table border="0" cellpadding="3" cellspacing="0">
          <tr>
          <td width="100%" bgcolor="#EFEFEF"><b>Kontaktformular</b></td>
          </tr>
          <tr>
          <td width="100%">Gib zwei Zahlen ein!
          <table border="0" cellspacing="3" width="400">
          <tr>
          <td bgcolor="#ECECEC"><b>Nummer</b></td>
          <td><input type="text" name="nummer" size="20"></td>
          </tr>
          <tr>
          <td bgcolor="#ECECEC"><b>Code</b></td>
          <td><input type="text" name="code" size="20"></td>
          </tr>
          <tr>
          <td bgcolor="#ECECEC"><b>E-Mail</b></td>
          <td><input type="text" name="absender_mail" size="20"></td>
          </tr>
          <tr>
          <input type="submit" value="Abschicken"> <input type="reset" value="Zurücksetzen"></td>
          </tr>
          </table>
          </td>
          </tr>
          </table>
          <input type="hidden" name="html_template_url" value="http://www.egenda.ch/cgi-bin/antwort.php">
          </form>

          </body>
          </html>

          Antwortseite:

          <html>
          <head>
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          <title>Bestätigungsseite</title>
          </head>

          <body>
          <?php
           $nr = "[nummer]";
           echo $nr;
          ?>
          </body>

          </html>

          Voila. Aber wahrscheinlich läuft es darauf hinaus, dass ich PHP besser erlerne und die Formulardaten nicht mehr per externem Formmailer versende.

          Gruss
          Biitlu

          1. hi $name,

            eigentlich wollte ich als PHP-Neuling darauf verzichten, die Daten "selbst" zu versenden, deshalb der wohl etwas anfängerhafte Lösungsversuch. Sorry, aber irgendwie muss es jeder einmal zuerst lernen. Und ja du hast recht, bei der Antwortseite, die in PHP geschrieben werden darf, handelt es sich um eine Templatesystem. Hier einmal noch meine Scripts.
            Formularseite(www.egenda.ch/cgi-bin/versuche.php):

            was hat eigentlich das script im cgi-bin verloren?

            äh, validiere mal deine seite. z.b. fehlt die DTD. und warum ist das eine .php datei? sie enthählt doch keinen php code, oder?

            <input type="hidden" name="empfaenger_mail" value="belud@gmx.ch">

            uh, übel, jeder harvester freut sich über deine mail addy, falls du das formular benutzt um spam zu vermeiden, zu spät.....(die harvester mögen das self-forum) außerdem würden sie ja auf deiner site direkt deine addy finden.

            <?php
            $nr = "[nummer]";
            echo $nr;
            ?>

            ich bin auch noch php anfänger, aber müßten die daten nicht im array POST stehen? laß es dir doch mal ausgeben.
            <?php
               echo "<pre>\n";
               print_r($_POST);
               echo "</pre>\n";
            ?>

            Voila. Aber wahrscheinlich läuft es darauf hinaus, dass ich PHP besser erlerne und die Formulardaten nicht mehr per externem Formmailer versende.

            ja, das ist immer besser, aber für die zwischenzeit such dir einen formmailer den du bei dir installieren kannst, dann hast du mehr kontrolle darüber. übrigens der formmailer selbst ist in PERL geschrieben.

            gruss
            shadow

            p.s. http://magline.de auf der seite gibt es einen formulargenerator und das komplette paket kann man am ende downloaden und bei sich installieren.

            --
            Programmers don´t die, they GOSUB without RETURN.
            Quelle: unbekannt