PHP implode() will nicht mitspielen

te one

Lt. Commander
Dabei seit
Apr. 2009
Beiträge
1.241
Hi,
zu meinem vorhaben (ist eigentlich fast fertig bis auf dieses problem):
ich hab eine datenbank in der benutzer mit e-mailadresse gespeichert sind.
nun lese ich die mail-adressen und den username aus und füg se in ne tabelle ein damit man sieht an wen es alles versendet wird.
nun kommt da problem:

ich möchte an alle mail-adressen eine mail versenden! also hab ich ein formular gemacht für "Betreff", "Text",....
Allerdings muss ich für mail() ja alle mail-adressen durch ein , getrennt haben.
Jetz wollt ichs mit implode machen, funzt abba i-wie net!

Hier mein code (is jetz nur immer was mit den variablen passiert, die hierfür ne rolle spielen)

PHP:
//...
$result = mysql_query($sql);
$empfaenger = mysql_fetch_array($result);
$menge = mysql_num_rows ($result);

//Hier ist eine Tabelle mit allen Benutzern und Mail-adressen die durch $sql ausgegeben werden
//...

$empfaenger2 = implode(", ",$empfaenger['email']);
echo $empfaenger2 ;
//zum testen benutze ich hier echo, um mir den string ausgeben zu lassen

Die Seite sagt mir dann:
"Warning: implode() [function.implode]: Invalid arguments passed in /.../mail.php on line 47"

line 47 ist die mit $empfaenger2=...

was mach ich falsch???

mfg
Michi

Ps: Die Namen der Felder in der DB sind "email" und "username"
 
Hast du dir mal das Array selbst ausgeben lassen? Vielleicht stmimt da schon was nicht.
 
Hallo,

du uebergibst dem implode() einen 2-Dimensionalen Array, den er zusammenfuegen soll, geht aber nur mit 1D-Arrays.
$empfaenger['email'] ist in der ersten Dimension, doch macht mysql_fetch_array($result) einen 2-Dimensionalen.

du koenntest das mit einer while schleife loesen:
Code:
$empfaenger = array();
while($row = mysql_fetch_array($result)) {
$empfaenger[] = $row['email'];
}
$empfaenger2 = implode(", ",$empfaenger2);

mfg
 
Zuletzt bearbeitet:
ah ja!
werd ich morgen mal ausproberen, weil ich leider jetz weg muss.

ähm wegen array selbst: i-wie gibt er mir bei solche sachen oft des ganze doppelt an!

bedeutet also zB:

michi, michi, 123@gmx.de, 123@gmx.de


ging mir schon öfter so dass es i-wie doppelt war.
 
mysql_fetch_object = rückgabe von objekten
:D

und aus
PHP:
//...
$result = mysql_query($sql);
$empfaenger = mysql_fetch_array($result);
$menge = mysql_num_rows ($result);

//Hier ist eine Tabelle mit allen Benutzern und Mail-adressen die durch $sql ausgegeben werden
//...

$empfaenger2 = implode(", ",$empfaenger['email']);
echo $empfaenger2 ;
//zum testen benutze ich hier echo, um mir den string ausgeben zu lassen

machen wir

PHP:
// leeres Array damit das Implode immer ein Array bekommt
$empfaenger = array();

// Query
$q = mysql_query("SELECT name,email FROM >Tabelle<");
while($row = mysql_fetch_assoc($q)){
$empfaenger[] = $row['email'];
}

$empfaenger2 = implde(", ",$empfaenger);

Na allgemeine Anmerkung zum Stil - Deutsche Variablen = doof :-)
 
@scor:
deines funzt leider nicht! habe jezt folgendes gemacht:

PHP:
//Daten werden aus DB geholt
$sql = "SELECT username, email FROM bb1_users WHERE groupid=1 OR groupid=2 OR groupid=3 OR groupid=6 OR groupid=7";
$result = mysql_query($sql);

//Array wird erzeugt und Daten sollten eingefügt werden
$empfaenger = array();
while($row = mysql_fetch_assoc($result)){
$empfaenger[] = $row['email'];
}

$empfaenger2 = implode(", ",$empfaenger);  

//Ausgabe der Daten durch Komma getrennt
echo $empfaenger2 ;
wenn ich es wie hier mach bringt er mir einfach garnix!
hab ich i-wo nen fehler drin?? weil ich hab jetz eig nix gfunden.


jop werde mir englische angewöhnen.

edit: funktioniert des mit mehreren empfängern überhaupt richtig, wenn die nur durch ein komma getrennt werden??? weil danach kommt ja wieder durch ein komma getrennt schon der betreff etc. dann weiß er ja nicht was was ist oder?



so ich nochmal:
ich lass oben ja ne tabelle mit username und e-mail ausgeben! jetz hab ich gedacht mach ich einfach jedes mal einen wert in $empfaenger (array) und mach dann durch implode des ganze durch kommas zusammen!
jetz gibt er mir aber immer nurnoch den letzten wert aus (als nur die mailadresse des letzten users)
siehe hier:
PHP:
for ( $x = 0; $x < mysql_num_rows ( $result ); $x++ )
{
  $str_1 = mysql_result ( $result, $x );

  echo '
  <table border="1">
  <colgroup>
  <col width="150">
  <col width="400">
  </colgroup><th>
  ' . $str_1 . '</th>';

  $str_2 = mysql_result ( $result, $x, 1 );
//Mail-adresse in array schreiben
  $empfaenger = array();
  $empfaenger[$x] = $str_2;
//Ende des Schreibens in Array
  echo '<th>' . $str_2 . '</th></table>';
}

echo '<br/><br/>';
//Testausgabe
$empfaenger2 = implode(", ",$empfaenger);  

echo $empfaenger2 ;
 
Zuletzt bearbeitet:
der schreibfehler war bei dem implode von dir drinnen!

und da ich mir ja nicht die lösung einfach hier rauskopier und hohl reineinfüge, guck ichs mir vorher an!

hab das schon zu implode() anstatt imlde() geändert! (siehe letzter post von mir)
funktioniert trotzdem nicth! oder is noch ein schreibfehler in der zeile drin, und du meinst des fehlende o gar net!
 
wenn du in der schleife jedesmal das array leerst, dann kann dir der Implode auch nur das ausgeben was als letztes drin stand ;)

PHP:
$empfaenger=array();
	if(mysql_num_rows ($result) > 0)
	{
		while($db_array=mysql_fetch_array($result))
		{
                   echo $db_array['username'];
                   echo $db_array['email'];
                  
                   $empfaenger[]=$db_array['email'];

                }
	}
echo implode("," , $empfaenger)

Hier mal nen lösungsanstz, das mit der Forschleife und deinen 3 Result auswertungen is eigentlich unnötig. In die Whileschleife dann halt deine Tabellenausgabe.
 
Zuletzt bearbeitet:
ach verdammt du hast recht!

ich definiere $empfaenger in der for-schleife als array^^ somit wirds natürlich wieder leer!

werds mal anders probieren und hoffen dass es geht! ich meld mich dann nochmal.


edit:
so des ganze funktioniert jetzt! aber wenn ich mehrer empfänger eingebe, wird die mail nicht versendet!!!
woran liegt dies?? (daten werden in formulat eingegeben, value (voreingabe) zB von Empfänger sind die mailadressen durch komma und leerzeichen getrennt)
diese daten werden dann per "Knopf", durch folgendes script abgesendet(sollten sie eben zumindest):

PHP:
<?php 
mail($_POST['empfaenger'],
$_POST['betreff'],
$_POST['nachricht'],
"From: ".$_POST['absender']." <>");
echo 'Die Mail wurde versendet!';
echo '<br/><br/><html><a href="http://***/mail.php">ZURÜCK</a></html>';
?>
mit einer adresse gehts! abba mit mehreren bekommt niemand die mail
wenn des dann klappt, werd ichs auch so machen, dass "Die Mail wurde versendet" nur angezeigt wird wenns wirklich klappt, und ansonst halt "Error" oda so! (weil mail liefert ja irgendeinen wert zurück, odda?)


selbst selfphp meint ja man solle sie einfach mit eine komma trennen
gucksdu hier: http://www.selfphp.de/funktionsreferenz/mail_funktionen/mail.php
abba wenn ja jetz zB in meiner nachricht ein komma ist, würde ja die nachricht beendet werden?!
 
Zuletzt bearbeitet:
zwischen den mails oder zwischen den befehlen in der mail()-funktion (also zw. empfänger, betreff,...) oder überall semikolons??
 
*möp*
funktioniert nicht!

sagt mal kann es sein dass vllt sogar funpic einfach keine mails an mehrere empfänger durchlässt??

weil dann müsst ich halt ne schleife einbauen die es jedem einzeln schickt *schnauf* :(
 
wie sieht denn dein formular aus wo du mehrere empfänger eingeben kannst?
 
sieht wie folgt aus:

PHP:
    <title>E-Mail versenden</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
  </head>
  <body>
    <form action="mail2.php" method="post">
    <fieldset>
        <legend>Bitte Daten eingeben<br/></legend>
          <table border="0" cellpadding="0" cellspacing="4">
          <tr>
      <td align="right">Absendername:</td>
      <td><label><input type="text" name="absender" size="90" value="Test" /></label></td>
          </tr>
          <tr>
      <td align="right">Empfänger:</td>
      <td><label><input type="text" name="empfaenger"  size="90" value="'.$empfaenger2.'" /></label></td>
          </tr>
          <tr>
      <td align="right">Betreff:</td>
      <td><label><input type="text" name="betreff" size="90" value="Rundmail" /></label></td>
          </tr>
          <tr>
      <td align="right">Nachricht:</td>
      <td><label><textarea name="nachricht" cols="110" rows="30" wrap="off">

//Hier kommt ne ewig lange value die ich mal rausgenommen hab(stellt nur das ende meiner mail dar)

      </textarea></label></td>
          </tr>
          <tr>
        <td align="right"></td>
        <td><br/><input type="submit" name="formaction" value="Absenden" /></td>
          </tr>
          </table>
    </fieldset>
</form>

dann drück ich auf absenden und werde auf folgende seite geleitet:

PHP:
mail($_POST['empfaenger'],
$_POST['betreff'],
$_POST['nachricht'],
"From: ".$_POST['absender']." <>");
echo 'Die Mail wurde versendet!';
echo '<br/><br/><html><a href="http://***mail.php">ZURÜCK</a></html>';

mit einem empfänger gehts! mit mehreren einfach nicht.
 
Zuletzt bearbeitet:
jop hab unter selfphp gelesen dass es einfach reicht die durch kommas zu trennen!

print_r gibt mir folgendes aus:
(hab in formular als absender "Mein Absendername" als Empfänger einfach nur "web@web.de,web@gmx.de" eingegeben,...)

Code:
Array ( [absender] => Mein Absendername [empfaenger] => web@web.de,web@gmx.de [betreff] => Mein Betreff [nachricht] => Testnachricht [formaction] => Absenden )

also erkennt er ja eigentlich des ganze zeugs schon richtig!
mein gott ich weiß echt nixmehr weiter
 
Zuletzt bearbeitet:
hm, muss nich zwischen dem , und der 2. mail adresse nich ein leerzeichen sein?

also

Falsch: web@web.de,web@web.de
Richtig: web@web.de, web@web.de

is aber nur ne vermutung.

und mach mal bitte zur fehlerüberprüfung:

PHP:
$send = mail(.......);

if($send==true)
{
 echo 'abgeschickt';
}
else
{
 echo 'nö';
}
 
Zurück
Top