[PHP + MYSQL] Daten in Array speichern

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

  • [PHP + MYSQL] Daten in Array speichern

    Hallo,

    ich bin noch PHP Anfänger und habe folgendes Problem:
    Ich habe eine Datenbank angelegt und möchte die gespeicherten Daten bei der Abfrage in ein Array speichern, da alle Daten Email Adressen sind, an die hinterher eine "Sammel Email" geschickt werden soll, quasi ein Newsletter Script.
    Das ist mein bisheriger Stand:
    PHP-Code:
    <?php
    /* mysql Daten*/
    $dbhost 'xxx';
    $dbuser 'xxx';
    $dbpass 'xxx';
    $dbname 'xxx';
    $db_connect = @mysql_connect($dbhost$dbuser$dbpass) OR die(mysql_error());
                  @
    mysql_select_db($dbname) OR die(mysql_error());
    /* mysql Daten Ende*/
    $mails = array();
    $sql =  "SELECT
              (email)
            FROM
              newsletter
            ORDER BY
              email DESC;"
    ;
    $result mysql_query($sql) or die(mysql_error());

    while (
    $row mysql_fetch_assoc($result)) {
    $mails[] = $row['email'];
    var_dump($mails);
      }
    ?>
    Leider kommt da als Ausgabe:

    PHP-Code:
    array(1) {
      [
    0]=>
      
    string(13"test1@test.de"
    }
    array(
    2) {
      [
    0]=>
      
    string(13"test1@test.de"
      
    [1]=>
      
    string(13"test2@test.de"

    Wie kann ich es hinbekommen, dass alle auf einmal angezeigt werden und wie bekomme ich das array dann so formatiert, dass ich bequem an alle gleichzeitig mit mail(); eine Mail schicken kann ?

    Bin für jede Hilfe dankbar!

    Gruss, aKuT
    Nene, soviel Sand und keine Förmchen!

  • #2
    na Du hast das doch schon korrekt gemacht. nach der while() schleife hast Du ein array $mails das alle emails enthält. Du hast das var_dump innerhalb der schleife...

    das array kannst Du zB mit implode verarbeiten
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Wieviele bzw. wieviele unterschiedliche Mailadressen stehen denn in der DB?

      Im Moment sortierst du die Abfrage ja nach Emailadressen.

      Kommentar


      • #4
        Original geschrieben von MelloPie
        na Du hast das doch schon korrekt gemacht. nach der while() schleife hast Du ein array $mails das alle emails enthält. Du hast das var_dump innerhalb der schleife...

        das array kannst Du zB mit implode verarbeiten
        Das Problem ist, dass ich 2 Arrays da habe, bzw. es wird zweimal ausgegeben.
        In der Datenbank sollen "unendlich" viele Emails drin stehen können, da sich die User dort eintragen können (das Script steht schon).
        implode(); verbindet ja die einzelnen Elemente im Array zu einem String. Könnte man dann einfach
        PHP-Code:
        implode (","$mails);
        mail($mails"Empfänger""Text"); 
        machen ? Wäre das so einfach ? ;-).

        Aber wie gesagt, ist das OK, dass die Arrays so ausgegeben werden ?

        Gruss

        // edit: Das mit der Ausgabe hab ich, war ja dumm, das var_dump mit in die While Schleife zu packen ..
        Zuletzt geändert von aKuT; 20.05.2005, 14:21.
        Nene, soviel Sand und keine Förmchen!

        Kommentar


        • #5
          Lies nochmal genau was MelloPie geschrieben hat.

          Dein Array ist schon in Ordnung so, die doppelte Ausgabe kommt daher, weil var_dump($mails) in deiner Schleife steht.

          Setz das var_dump() mal nach der Schleife ein, und du siehst dass das Array $mails in Ordnung ist.

          Mit implode() würd ich da nicht arbeiten bzw. kann man IMHO gar nicht arbeiten für das was du willst, ein Ansatz für dich wäre:

          PHP-Code:
          foreach($mails as $mail)
          {
              
          mail($mail"Betreff""Text");

          Aber ehrlich gesagt versteh ich gar nicht warum du erst in ein Array zwischenspeicherst und dann erst die Mails verschicken willst, dass könntest gleich in der while ($row = mysql_fetch_assoc($result))-Schleife erledigen.

          Gruss
          Quetschi
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            Hi,

            naja, man muss erstmal ein "Gefühl" dafür bekommen, was jetzt am günstigsten ist, ich komm nicht immer gleich auf so Sachen ;-).

            Ich habs in der Zwischenzeit jetzt auch so angedacht:
            PHP-Code:
            while ($row mysql_fetch_assoc($result)) {
              foreach(
            $row['email'] as $mail) {
                
            mail($mail"Betreff""Inhalt");
              }

            // Edit:
            Hm, das kann ja auch wieder nicht gehen, jetzt benötige ich das Array ja wieder für die foreach Schleife.
            Zuletzt geändert von aKuT; 20.05.2005, 14:47.
            Nene, soviel Sand und keine Förmchen!

            Kommentar


            • #7
              PHP-Code:
              while ($row mysql_fetch_assoc($result)) {
                foreach(
              $row['email'] as $mail) {
                  
              mail($mail"Betreff""Inhalt");
                }

              sollte dir IMHO eine Fehlermeldung liefern.

              Du denkst etwas zu kompliziert.

              $row['email'] ist ein Element des Arrays $row. Dieses Element ist selbst kein Array, sondern dürfte ein String sein in dem bereits die eMail-adresse steht.
              also:
              PHP-Code:
              mail($row['email'], "Betreff""Inhalt"); 
              die foreach()-Schleife musst natürlich weglassen.
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                Ich denke wirklich zu kompliziert ;-). PAssiert mir öfter mal.

                So siehts jetzt aus:

                PHP-Code:
                while ($row mysql_fetch_assoc($result)) {
                    
                mail($row['email'], "Betreff""Inhalt");
                  }

                Und es funktioniert.
                Ist es jetzt weiterhin sinnvoll irgendwelche Sicherheitsvorkehrungen zu treffen o.ä. ? Da habe ich noch keine (kaum) Erfahrung drin.
                Nene, soviel Sand und keine Förmchen!

                Kommentar


                • #9
                  Auf den ersten Blick:

                  Die Verbindung zur DB würd ich in eine externe Datei auslagern und in einen Passwortgeschützten-Ordner legen. Von dort aus dann in deinen jeweiligen Scripten includen.

                  Prinzipiell sollte auch so das Passwort zur DB nie zu sehen sein, weil das ganze ja immer durch den PHP-Parser laufen sollte, aber falls der Apache mal aus irgendnem Grund meinen sollte er müsse die Datei nicht durch den Parser schicken (passierte mir bei nem früheren Provider in regelmäßigen Abständen) dann wären die Zugangsdaten zu sehen.

                  Hat auch den Vorteil dass du sie von dort aus öfter verwenden kannst, und falls sich mal die Zugangsdaten zur DB ändern musst du die Daten nur einmal anpassen.
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Ja das habe ich eh, habe das nur als Testscript extra in die PHP Datei geschrieben. Sonst habe ich mysql Daten + Connect in der vars.php, die im ordner "inc" liegt. Sollte ich den noch per Passwort schützen? Oder wäre das nicht ratsam, da meine anderen Scripte auch in dem Ordner liegen, z.B. contact.php, die dann per index.php?section=contact aufgerufen wird...
                    Sonst denke ich wars das ..
                    Danke schön .

                    Gruss
                    Nene, soviel Sand und keine Förmchen!

                    Kommentar


                    • #11
                      Ist dieser 'inc'-Ordner übers deine Domain erreichbar?

                      Also z.b. via http://www.deine-domain.de/inc/

                      Dann solltest den schon schützen, wenn da deine DB-daten drinliegen.

                      Und wie sieht das mit deiner index.php aus? Wie werden den deine Dateien da eingebunden? Kannst das mal kurz posten?

                      Gab da nämlich gestern so nen Fall hier im Forum
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar


                      • #12
                        Das Listing oder wie sich das nennt ist deaktiviert. Das heisst, man kann den Inhalt vom Ordner http://www.domain.de/page/inc nicht einsehen.

                        Includen tu ich so:

                        PHP-Code:
                        /* index.php */

                        switch ($section) {
                           case 
                        "contact":  include("inc/contact.php");
                           break;
                           case 
                        "guests":  include("inc/guests.php");
                           break;
                           
                        // usw...

                        Aufgerufen wird dann halt über:
                        PHP-Code:
                        echo "<a href=\"index.php?section=contact\">Contact</a>"
                        So mache ich es eigentlich immer, hoffe das ist i.O.

                        Gruss
                        Nene, soviel Sand und keine Förmchen!

                        Kommentar


                        • #13
                          Den Inhalt des Ordners kann man nicht einsehen aber

                          http://www.domain.de/page/inc/vars.php

                          lässt sich trotzdem aufrufen. Wenn in dem Ordner nur Dateien sind die nie direkt aufgerufen werden, dann mach nen Passwortschutz drauf, sicher ist sicher. Die DB-Daten sollten unbedingt in einen PW-geschützten Ordner.

                          Verwende $_GET['section'] anstelle von $section, der Rest ist IMHO in Ordnung. Da aber ich auch nicht alles über Sicherheit weiß, sind alle anderen eingeladen mich zu korrigieren falls ich was übersehen hab
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            Alles klar, dann hau ich da noch nen PW Schutz drauf ... .

                            Das mit dem $_GET['Section'] kann ich ja immer noch mal umändern. Bin schon froh das das Newsletter Script funzt, befriedigt irgendwie sowas .. .

                            Danke

                            Gruss
                            Nene, soviel Sand und keine Förmchen!

                            Kommentar


                            • #15
                              Hi,

                              noch ne Idee, wie du den Include eleganter machen kannst.

                              PHP-Code:
                              /* index.php */

                              // old one
                              /*
                                 switch ($section) {
                                 case "contact":  include("inc/contact.php");
                                 break;
                                 case "guests":  include("inc/guests.php");
                                 break;
                                 // usw...
                              */

                              // new idea
                                //Gültige Werte für $_GET['section']
                                
                              $content_files = array("contact""guests");

                                if(
                              in_array($_GET['section'], $content_files)){
                                  
                              //Alles ok, also inkludieren wir den Content
                                  
                              include(CONTENT_PATH.$_GET['section'].CONTENT_EXT);
                                }else{
                                  
                              //Der Wert der in $_GET['section'] übergeben wurde ist nicht gültig
                                  
                              echo $_GET['section']." ist kein gültiger Content!";
                                }
                               

                              /* vars.php */
                              define (CONTENT_PATH"inc/");
                              define (CONTENT_EXT".php"); 
                              Mit define() wird eine Konstante definiert. Nimmt man für Variablen die während der Laufzeit des Scriptes nicht verändert werden. Und das wird das Contet-Dir nicht.

                              Man kann sich jetzt überlegen ob Sache mit dem Array, der prüft ob der Content zugelassen ist, komfortabler ist als für jeden Content eine neue Switch-Anweisung zu erstellen.
                              Wenn man allerdings den Wert für $_GET['section'] mit den Dateinamen übereinstimmend hat geht das ganz gut, finde ich.

                              Alles in allem glaub ich aber, ist das Geschmackssache

                              so long, der-p
                              Zuletzt geändert von prego; 20.05.2005, 16:40.

                              Kommentar

                              Lädt...
                              X