SQL Where In Array

CoverUnder

Mitglied
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:
$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
 
Wieso machst du in deinem Script einige Sachen doppelt?
Das str_replace() könntest du weglassen und gleich auf den "\n" exploden.
PHP:
$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:
implode("','",$array)

kommt mir auch ein bissl suspekt vor, warum du dort double und single-Quotes verwendest.
 
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?
 
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
 
Lass dir mal den Kompletten Query ausgeben:
PHP:
$sql = "SELECT id from mails WHERE mail IN ('" . implode("','",$array) . "')"; 
echo $query;

Dann wirste sehen das die Quotes nicht richtig sind.
 
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:
   $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...
 
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
 
Zurück