[VARIABLEN][GD] - Variablenübergabe PHP->PHP ohne GET

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

  • [VARIABLEN][GD] - Variablenübergabe PHP->PHP ohne GET

    Hallo!

    Nach einger Zeit des passiven Mitlesens habe ich mal eine Frage. Leider bin ich über die Suche auch nicht weitergekommen;
    fand entweder nichts passendes oder wurde von den Suchergebnissen erschlagen.

    Folgendes Thema:

    Ich habe mir eine kleine "Ehemaligen-Datenbank" gezimmert, in der sich jeder über ein Formular selbst eintragen kann.
    Das funktioniert so weit auch wunderbar. Nun kann man in diese Datenbank auch seine Mailadresse eintragen.
    Diese Mailadresse beim Anzeigen der Liste natürlich eine leichte Beute für Harvester, da sie ja plain in im ausgegebenen
    Quellcode steht. Nun kam mir der Gedanke, die Mailadresse einfach in grafischer Form anzuzeigen. Hierzu habe ich
    mir mal imageCreateTrueColor etwas genauer angesehen. Genauso wie hier möchte ich in einem zweiten Script eine
    übergebene Variable verwenden, und eine Grafik daraus basteln:


    PHP-Code:
    <?php

    header
    ("Content-type: image/png");
    $string $_GET['mailadresse'];
    $im    imagecreatefrompng("images/button1.png");
    $orange imagecolorallocate($im22021060);
    $px    = (imagesx($im) - 7.5 strlen($string)) / 2;
    imagestring($im3$px9$string$orange);
    imagepng($im);
    imagedestroy($im);

    ?>
    Diese Script zur Erzeugung der Grafik bekommt die Variable aus meinem Anzeige-Script. In diesem packe ich die
    Daten aus der Datenbank in ein array und gebe sie formatiert in einer Tabelle aus. An der Stelle, wo nun die
    Grafik mit der Mailadresse ausgegeben werden soll, rufe ich obiges coding auf und übergebe über die URL die
    entsprechende row des array (In meinem Fall $row[5])

    in diesem Fall hieße das: <img src="maildisplay.php?mail=$row[5]">

    Das funktioniert zwar, hat aber zwei gravierende Nachteile:

    - Statt "maildisplay.php?mail=$row[5]" steht im geparsten Quellcode natürlich dann wieder die richtige
    Mailadresse, ich hätte also mit Zitronen gehandelt und das alles wäre für den A....

    - extrem "un-performant", da der Aufruf ja Zeilenweise für jeden Eintrag erfolgt. Das kann dauern!

    - Was ich suche: Kann ich die Variable mit der Mailadresse auch "vesteckt" übergeben?

    - Kann ich die Erzeugung der Grafik vielleicht direkt in meinem Anzeige-Script erledigen?

    - Hat jemand vielleicht einen anderen Lösungsansatz oder eine Idee?

    Danke & schönen Gruß,
    Stefan

  • #2
    Re: [VARIABLEN][GD] - Variablenübergabe PHP-&gt;PHP ohne GET

    Original geschrieben von StefanTBB
    - Was ich suche: Kann ich die Variable mit der Mailadresse auch "vesteckt" übergeben?
    - Übergebe dem Bildscript nur eine User-ID, und lasse es dann mittels dieser die zugehörige Mailadresse selber aus der DB lesen.
    - nutze Sessions; trage dort alle Mailadressen unter einem eindeutigen Schlüssel (bspw. wieder die User-ID) ein, und lese sie im Bildscript über diesen Schlüssel wieder aus.
    - Kann ich die Erzeugung der Grafik vielleicht direkt in meinem Anzeige-Script erledigen?
    Nein.

    (Es gibt zwar Möglichkeiten, Bilder direkt im HTML-Datenstrom zu kodieren, aber die sind nicht browserübergreifend kompatibel.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Re: [VARIABLEN][GD] - Variablenübergabe PHP-&gt;PHP ohne GET

      Original geschrieben von wahsaga
      - Übergebe dem Bildscript nur eine User-ID, und lasse es dann mittels dieser die zugehörige Mailadresse selber aus der DB lesen.
      Ich wusste gar nicht das das geht? Bzw. gehen soll, ich habe es nämlich
      nicht hinbekommen... :-(

      Mein Script zur Anzeige der Grafik bekommt nun die id aus dem aufrufenden Script und sieht folgendermaßen aus:

      PHP-Code:
      <?php
        header
      ("Content-type: image/png");
        
      $zeile $_GET['id'];
        require_once(
      "config.php");
        
      $verbindung mysql_connect($host$user$passwort
      or die(
      "Es konnte keine Verbindung mit der Datenbank aufgebaut werden!");
        
      mysql_connect($host,$user,$passwort);
        
      mysql_select_db("$dbname");
        
      $result=MYSQL_QUERY"SELECT id,eMail FROM $tabelle where id = $zeile order by id");
        
      $row  =  mysql_fetch_array($result);
        
      $x 180;
        
      $y 16;
        
      $text $row[1];
        
      $img      imageCreateTrueColor($x$y);
        
      $php_back imageColorAllocate($img15014883);
        
      $weiss  imageColorAllocate($img000);
        
      imageFilledRectangle($img00$x$y$php_back);
        
      // Text in Grafik schreiben
        
      imageString($img242$text$weiss);
        
      // Grafik anzeigen und Speicher freigeben
        
      imagePng($img);
        
      imageDestroy($img);
        
      mysql_close($verbindung);
      ?>
      Allerdings liefert das leider nur eine "Müllausgabe" bzw.gar nüscht...

      Klick mich

      Hat noch jemand eine Idee an was es liegen könnte?

      Original geschrieben von wahsaga
      - nutze Sessions; trage dort alle Mailadressen unter einem eindeutigen Schlüssel (bspw. wieder die User-ID) ein, und lese sie im Bildscript über diesen Schlüssel wieder aus.
      [/B]
      Damit habe ich mich bisher noch nicht befasst, werde ich aber tun müsssen, wenn ich es so nicht hinbekomme...

      Danke und schönen Gruß,
      Stefan
      Zuletzt geändert von StefanTBB; 26.01.2006, 18:11.

      Kommentar


      • #4
        Hallo nochmal!

        Kann mir jemand sagen, warum dies funktioniert und das obige Codeschnipsel nicht?
        In dieser Variante übergebe ich die Mailadresse (so wie ich es hatte aber nicht möchte)

        PHP-Code:
        <?php
          header
        ("Content-type: image/png");
          
        $mail $_GET['mail'];
          
        $x 180;
          
        $y 16;
          
        $text $mail;
          
        $img      imageCreateTrueColor($x$y);
          
        $php_back imageColorAllocate($img15014883);
          
        $weiss  imageColorAllocate($img000);
          
        imageFilledRectangle($img00$x$y$php_back);
          
        // Text in Grafik schreiben
          
        imageString($img242$text$weiss);
          
        // Grafik anzeigen und Speicher freigeben
          
        imagePng($img);
          
        imageDestroy($img);
          
        mysql_close($verbindung);
        ?>
        Dabei kommt dann erwartungsgemäß folgendes heraus: Klick mich

        Etwas ratolos,
        Stefan

        Kommentar


        • #5
          Hast du im obigen (nicht funzenden Script) mal ein paar Debugging Ausgaben gemacht ? Es würde sich z.B. anbieten mal nachzusehen ob $row und $result die erwarteten Werte haben
          PHP-Code:
          //auf order by kannst du verzichten weil du nur einen Treffer haben wirst
          $result=MYSQL_QUERY"SELECT id,eMail FROM $tabelle where id ='$zeile'");
          var_dump($result);
          $row  =  mysql_fetch_array($result);
          var_dump($row); 
          Und wo wird die var $tabelle definiert ? Ist diese ev nicht gesetzt ?

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Original geschrieben von jahlives
            Hast du im obigen (nicht funzenden Script) mal ein paar Debugging Ausgaben gemacht ? Es würde sich z.B. anbieten mal nachzusehen ob $row und $result die erwarteten Werte haben

            Ja, habe ich getan! Ich hab mal mal folgendes probiert um zu testen ob das Lesen von der DB klappt:

            PHP-Code:
            <?php
              $zeile 
            $_GET['id'];
              echo 
            "<strong><font size='3'>Übernommene ID aus der URL =  $zeile</font></strong><BR>";
              require_once(
            "config.php");
              
            $verbindung mysql_connect($host$user$passwort
            or die(
            "Es konnte keine Verbindung mit der Datenbank aufgebaut werden!");
              
            mysql_connect($host,$user,$passwort);
              
            mysql_select_db("$dbname");
              
            $result=MYSQL_QUERY"SELECT id,eMail FROM $tabelle where id = $zeile order by id");
              
            $row  =  mysql_fetch_array($result);
              echo 
            "<strong><font size='3'>Row 0 =  $row[0]</font></strong><BR>";
              echo 
            "<strong><font size='3'>Row 1 =  $row[1]</font></strong><BR>";
              
            mysql_close($verbindung);
            ?>
            Hier kann man sich das funktionierende Ergebnis ansehen: Klick mich

            Original geschrieben von jahlives
            Und wo wird die var $tabelle definiert ? Ist diese ev nicht gesetzt ?
            [/B]
            Das wird in der config gemacht :
            PHP-Code:
            require_once("config.php"); 
            Wenn ich jetzt aus obigen script die echo-Ausgabe ausbaue und das wieder so zusammenbaue, gibts wieder nur "Müll":

            PHP-Code:
            <?php
              $zeile 
            $_GET['id'];
              require_once(
            "config.php");
              
            $verbindung mysql_connect($host$user$passwort
            or die(
            "Es konnte keine Verbindung mit der Datenbank aufgebaut werden!");
              
            mysql_connect($host,$user,$passwort);
              
            mysql_select_db("$dbname");
              
            $result=MYSQL_QUERY"SELECT id,eMail FROM $tabelle where id = $zeile order by id");
              
            $row  =  mysql_fetch_array($result);
              
            $x 180;
              
            $y 16;
              
            $text '$row[1]';
              
            $img      imageCreateTrueColor($x$y);
              
            $php_back imageColorAllocate($img15014883);
              
            $weiss  imageColorAllocate($img000);
              
            imageFilledRectangle($img00$x$y$php_back);
              
            // Text in Grafik schreiben
              
            imageString($img242$text$weiss);
              
            // Grafik anzeigen und Speicher freigeben
              
            imagePng($img);
              
            imageDestroy($img);
              
            mysql_close($verbindung);
            ?>
            Das kommt dabei raus: Klick mich


            Immer noch ratlos,
            Stefan
            Zuletzt geändert von StefanTBB; 26.01.2006, 18:46.

            Kommentar


            • #7
              *schieb* :-)

              Kommentar


              • #8
                kein Wunder, was soll denn auch das?
                PHP-Code:
                  $text '$row[1]'
                das heißt
                PHP-Code:
                $text $row[1]; 

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Äh..... *schäm*...

                  geändert, das war es aber leider auch nicht...

                  Kommentar


                  • #10
                    dann header raus, error_reporting(E_ALL) und alles ausgegeben was an Funktionen weiter gegeben wird! Wenn du hier nur dumm fragst und wir selbst nur im Kopf denken können, weil uns die andere Hälfte des Codes und die Datenbank fehlen, wirst du nie weiter kommen.

                    Debug-Ausgaben, solange bis du weißt wo der Fehler ist, ggf. auch Funktionsaufrufe auskommentieren und nur ein leeres Bild ausgeben, wenn das geht nächsten Funktionsaufruf wieder einkommentieren und erneut F5 drücken, gehts? wenn ja weiter, ansonsten gucken wo der Fehler liegen könnte!

                    Sowas nennt man Begrenzung eines Problemes ...

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar

                    Lädt...
                    X