tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
17
ZUGRIFFE
589
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Hallo,

    ich sitze gerade vor folgendem Problem: Ich habe ein Formular, das eine Liste von eMail Adressen an ein PHP Script überträgt. Die Adressen sind jeweils durch einen Zeilenumbruch getrennt. Nun möchte ich aus der Datenbank alle IDs auslesen, die zu den eMail Adressen gehören...

    Das Problem ist nur, dass immer nur jeweils die ID der zuletzt eingegebenen, also untersten, eMail Adresse ausgegeben wird.

    Mein Code:

    PHP-Code:
    $adressen $_POST['mails'];
       
    $adressenbr str_replace("\n","<br />",$adressen);
       
       
    $array explode("<br />",$adressenbr);
       


      
    $sql "SELECT id from mails WHERE mail IN ('" implode("','",$array) . "')";
      
    $res mysql_db_query($mysqldb$sql$mysql);
        while (
    $row mysql_fetch_assoc($res)) {
        
          
    $id $row['id'];
          echo 
    $id."<br>";
          
          } 
    Übertrage ich mit Hilfe des Formulars nun beispielsweise die Adressen
    max@mustermann.de
    mustermann@max.de

    müsste die Ausgabe

    5
    9

    lauten. Stattdessen kommt nur eine "9". Sprich: Nur die ID der letzten eMail - mustermann@max.de

    Über einen Tipp wäre ich sehr dankbar!
    CoverUnder
     

  2. #2
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Wieso machst du in deinem Script einige Sachen doppelt?
    Das str_replace() könntest du weglassen und gleich auf den "\n" exploden.
    PHP-Code:
    $id $row['id'];
          echo 
    $id."<br>"

    // warum nicht gleich:
    echo $row['id'] . "<br>"
    Lass dir doch vorher mal den implode ausgeben bevor du ihn den Query packst.
    PHP-Code:
    implode("','",$array
    kommt mir auch ein bissl suspekt vor, warum du dort double und single-Quotes verwendest.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  3. #3
    Avatar von vandamp
    vandamp vandamp ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Wien
    Beiträge
    155
    Hallo,

    hast du dir den Teil implode("','",$array) schon mal ausgeben lassen?
     
    m.f.g
    b. zimmel

  4. #4
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Hallo Maniac, das stimmt - ich hab mittlerweile einfach schon recht viel herum probiert und habe alte Sachen dabei einfach stehen lassen, anstatt es neu & sauber zu schreiben. Im implode() verwende double und single Quotes, da nur so zumindest ein Wert ausgegeben wird - verwende ich nur einfache Anführungszeichen oder nur normale Anführungszeichen, wird nicht mal mehr die ID der letzten eMail ausgegeben...


    Hallo vandamp - hier die Ausgabe des implode-Teils:

    max@mustermann.de ','mustermann@max.de ','mustermax@mann.de
    Müsste doch stimmen, oder?
     

  5. #5
    franz007 franz007 ist offline Mitglied Platin
    Registriert seit
    Sep 2004
    Beiträge
    600
    Zitat Zitat von CoverUnder Beitrag anzeigen
    [...]n@max.de ','m[...]
    Könnte es an den Lehrzeichen nach der mailadresse liegen? Ich denke du hast sie in der DB ohne Lehrzeichen am Schluss gespeichert.
     

  6. #6
    Avatar von vandamp
    vandamp vandamp ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Wien
    Beiträge
    155
    Hallo,

    also ich sehe da ein paar unnötige Leerzeichen, oder sind in deiner DB die Email Adressen wirklich genau so enthalten? str_replace könnte helfen
     
    m.f.g
    b. zimmel

  7. #7
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Lass dir mal den Kompletten Query ausgeben:
    PHP-Code:
    $sql "SELECT id from mails WHERE mail IN ('" implode("','",$array) . "')"
    echo 
    $query
    Dann wirste sehen das die Quotes nicht richtig sind.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  8. #8
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Danke für die vielen Antworten!
    Die Leerzeichen habe ich gar nicht gesehen - stimmt! Daran muss es liegen!

    Habe es nun wie folgt geändert:

    PHP-Code:
       $adressen $_POST['mails'];
       
    $adressen str_replace("\n",",",$adressen);
       
    $test3 str_replace(" ","",$adressen);
       

      
    $sql "SELECT id from mails WHERE mail IN ($test3)";
      
    $res mysql_db_query($mysqldb$sql$mysql);
        while (
    $row mysql_fetch_assoc($res)) {
        
          echo 
    $row['id'] . "<br>";  
          
          } 
    Nun sieht es so aus:
    max@mustermann.de ,mustermann@max.de ,maxmuster@mann.de
    Die Lehrzeichen zwischen eMail und Komma wollen aber auch trotz des str_replace() nicht weg... Laut Google soll es da auch einen Unterschied machen, ob man beim str_replace einfache oder normale Anführungszeichen verwendet, aber bei mir funktioniert es in beiden Fällen nicht...
     

  9. #9
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Wie wäre es mit trim() ?
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  10. #10
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    trim() entfernt aber soweit ich weiß nur Leerzeichen jeweils am Anfang und am Ende - diese sind ja mitten drin, von daher wird das wohl, denke ich, auch nicht funktionieren
     

  11. #11
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    hmm,
    also wenn ich:
    PHP-Code:
    $string "max@mustermann.de , mustermann@max.de , moritz@max.de ";
    $string str_replace(" ","",$string);

    echo 
    $string
    mache, erhalte ich folgende Ausgabe:
    max@mustermann.de,mustermann@max.de,moritz@max.de
    Was passiert wenn du im Query noch um die Variable $test3 single-Quotes machst?
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  12. #12
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Ich habe es jetzt so versucht

    PHP-Code:
    $adressen $_POST['mails'];
       
    $adressen str_replace("\n",",",$adressen);
       
    $adressen str_replace(" ","",$adressen);
       
    $test3 str_replace(' ','',$adressen);
       
       echo 
    $test3;
       
       
    $string "max@mustermann.de ,mustermann@max.de ,maxmuster@mann.de";
       
    $string str_replace(" ","",$string);
       
    $string str_replace(' ','',$string);
       
       echo 
    "<p>".$string
    Und das seltsame an der Sache ist, dass ich da zwei verschiedene Ausgaben bekomme.

    max@mustermann.de ,mustermann@max.de ,maxmuster@mann.de

    max@mustermann.de,mustermann@max.de,maxmuster@mann.de
    Das Problem mit dem Leerzeichen habe ich also nur bei dem String, der über die Textarea und das POST reinkommt


    edit:
    Nun habe ich den String ohne Lehrzeichen in der Abfrage verwendet und ich bekomme nach wie vor keinen Wert zurück - nun nicht einmal mehr die ID der letzten eMail, sondern gar nichts mehr. Also liegt da noch irgendwo der Hund begraben, die Leerzeichen alleine können es nicht sein
    Geändert von CoverUnder (13.07.11 um 11:25 Uhr)
     

  13. #13
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Vielleicht haste auch noch den "\r" im String.
    Möglich wäre:
    "\r\n",
    "\r",
    "\n"
    CoverUnder bedankt sich. 
    Die Schweine von heute sind unsere Schnitzel von morgen!

  14. #14
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Heißer Tipp, vielen Dank! Das Leerzeichenproblem wäre hiermit gelöst, aber die SQL Abfrage funktioniert leider nach wie vor nicht.


    Sieht jetzt wie folgt aus:

    PHP-Code:
       $adressen $_POST['mails'];
       
    $test3 str_replace("\r\n",",",$adressen);
     
       
       echo 
    $test3;


      
    $sql "SELECT id from mails WHERE mail IN ($test3)";
      
    $res mysql_db_query($mysqldb$sql$mysql);
        while (
    $row mysql_fetch_assoc($res)) {
        
           echo 
    $row['id'] . "<br>"
          
          } 

    Der String $test3 sieht nun so aus:

    max@mustermann.de,mustermann@max.de,maxmuster@mann.de
     

  15. #15
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    PHP-Code:
    $res mysql_db_query($mysqldb$sql$mysql) or die(mysql_error()); 
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 02.11.09, 17:18
  2. [perl] Vorhandes Array [Name;Vorname/n] in zweidimensionales Array splitten
    Von FlockY im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 3
    Letzter Beitrag: 31.08.09, 18:53
  3. Antworten: 10
    Letzter Beitrag: 17.12.08, 13:53
  4. Je nach Array-eintrag neues array erstellen
    Von ElGrAnDiOs im Forum PHP
    Antworten: 2
    Letzter Beitrag: 25.11.05, 12:17
  5. Antworten: 8
    Letzter Beitrag: 01.08.04, 11:23

Stichworte