Mehr oder minder schwieriges Problem mit PHP und MySQL
tech-x
- php
0 kapitain kork0 srob0 Ilja
Hallo, ich habe ein Problem und komme alleine nicht weiter:
ich habe Webspace mit allem drum und dran, MySQL und Newsletter-System hab ich alles schon fertig hingetüftelt, aber einwas fehlt noch zur Vollendung:
Ich habe eine Art Admin Seite, mit der ich verschiedene Sachen an der
Database verändern kann(Telnet dauert mir zu lang), unter anderem
auch einen Bereich "Send Newsletter" und hier liegt das Problem:
Thema und Text geht wunderbar, aber die EMPFÄNGER streiken, ich weiss
absolut nicht wie man aus der MySQL ausgabe zB:
email1@bla.de
email2@bla.de
email3@bla.de
diese ausgabe macht:
email1@bla.de, email2@bla.de, email3@bla.de
um sie für die Bcc-Empfänger von Mail() zu benutzen!
Ich brauche die Hilfe eines Profis, der sich gut mit
MySQL Befehlen auskennt...
Ich DANKE dem der mir hilft SEHR!
weiß absolut nicht wie man aus der MySQL ausgabe zB:
email1@bla.de
email2@bla.de
email3@bla.dediese ausgabe macht:
email1@bla.de, email2@bla.de, email3@bla.deum sie für die Bcc-Empfänger von Mail() zu benutzen!
$a=email1@bla.de;
$b=email2@bla.de;
$c=email3@bla.de;
$resmail=$a.", ".$b.", ".$c;
Oi,
diese ausgabe macht:
email1@bla.de, email2@bla.de, email3@bla.de
wenn Du mit "Ausgabe" die Rückgabe einer Query an PHP in Form eines Arrays meinst, solltest Du Dir die Funktion implode() (http://de.php.net/manual/en/function.implode.php)einmal näher ansehen.
HTH Robert
Genau das meine ich, aber ich verstehe die Funktion nicht so richtig, könnte die mal jemand für mich "geradebiegen"?
Oi,
aber ich verstehe die Funktion nicht so richtig,
was genau verstehst Du daran nicht? Was hast Du schon probiert? Die Funktion verfügt über zwei Parameter: Separator und Array, das sollte nicht allzu schwer sein...
könnte die mal jemand für mich "geradebiegen"?
Es gehört zu den Grundlagen dieses Forum, nicht fertige Quelltexte abzuliefern, sondern Hilfe zur Selbsthilfe. Du schaffst es!
HTH Robert
Nein, leider nicht :,( habs schon probiert :(
ich weiss nur wie man in PHP den inhalt des bekommenen ausgibt:
$query = "SELECT * FROM emails";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
/* Printing results in HTML */
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
/* Free resultset */
mysql_free_result($result);
Und den Quelltext hab ich mir wo kopiert, da weiss ich nich genau wie der funktioniert. :,,(
ich hab´s teilweise:
$result = mysql_query("SELECT * FROM emails;");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("%s, ", $row["adress"]);
}
nur wie kann ich das in eine Variable speichern? geht das dann mit implode()?
Oi,
$result = mysql_query("SELECT * FROM emails;");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("%s, ", $row["adress"]);
}
zum Lernen machst Du es Dir vielleicht erst mal ein wenig einfacher, indem Du nur ein eindimensionales Array aus der Datenbank ziehst:
$result = mysql_query("SELECT adress FROM emails;");
Du erhälst ein eindimensionales Array $result, Deinen Separator für die Liste kennst Du auch - voilà, schon sind beide Parameter für implode() vorhanden. Wenn das klappt, beschäftigst Du Dich noch mit Arrays in PHP, und verstehst, wie das mit mehrdimensionalen Arrays als implode()-Parameter geht (falls das Abrufen mehrerer Spalten aus der Tabelle "emails" überhaupt nötig ist).
HTH Robert
Hi,
zum Lernen machst Du es Dir vielleicht erst mal ein wenig einfacher, indem Du nur ein eindimensionales Array aus der Datenbank ziehst:
$result = mysql_query("SELECT adress FROM emails;");Du erhälst ein eindimensionales Array $result
ähm... also jetzt aber...
auf die Art erhält er erstmal nichts was er mit implode verwerten könnte...
entweder
$result = mysql_query("SELECT adress FROM emails;");
while($list = mysql_fetch_assoc($result)) {
$adress .= $list['adress'].',';
}
oder
$result = mysql_query("SELECT adress FROM emails;");
while($list = mysql_fetch_assoc($result)) {
$adress[] = $list['adress'];
}
und anschließend die weiterverarbeitung mit implode.
Gruß,
small-step
Hi,
ähm... also jetzt aber...
auf die Art erhält er erstmal nichts was er mit implode verwerten könnte...
oh - sorry, ich wollte nicht verwirren. Natürlich muß man über den ressource identifier erst mal ein verwertbares Array aufbauen. Da hab' ich zwei Schritte ausgelassen und Unsinn verzapft... Ich schiebe das mal auf meinen benebelten Grippe-Kopf.
Robert
Naja vielleciht nicht das eleganteste aber das leichteste;
So hab ichs gelöst:
Recipients: <input type="text" name="recipients" value="webmaster@tech-x.de<?php $result = mysql_query("SELECT * FROM newsletterrcpts;"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { printf (", %s", $row["adress"]); } ?>">
:p :p :p :p :p :p :p :p
Das einzig doofe iss das ich meine eigene Email davor pflanzen muss weil sonst ", email1@bla.de, email2....." rasukommen würd'
aber trotzdem die einfachste methode :p ausserdem kann ich so noch die empfänger vorher bearbeiten :)
Hallo,
tut mir leid, daß ich Dich mit dem von mir verzapften Unsinn in eine völlig falsche Richtung gelenkt habe. So eine Art Fieberdelirium... Ich bleibe heute besser im Bett!
Das einzig doofe iss das ich meine eigene Email davor pflanzen muss weil sonst ", email1@bla.de, email2....." rasukommen würd'
Das mußt Du nicht. Entweder verhinderst Du, daß das erste Komma überhaupt gesetzt wird:
$i = 0;
while(...)
{ printf("%s%s",($i++ > 0) ? ', ' : '',$row['adress']); }
oder Du entfernst es hinterher:
$lcRcpts = '';
while(...)
{ $lcRcpts .= sprintf(", %s",$row['adress']); }
$lcRcpts = substr($lcRcpts,1);
print($lcRcpts);
HTH Robert
Hello,
zum Lernen machst Du es Dir vielleicht erst mal ein wenig einfacher, indem Du nur ein eindimensionales Array aus der Datenbank ziehst:
$result = mysql_query("SELECT adress FROM emails;");
Das ergibt ein Resultset, in dessen Zeilen nur ein Wert steht. Es ist aber kein Array, sondern eher eine "Datei". Man erhält ein Ressource Handle auf das Ergebnis, mit dem man sinngemäß so verfahren muss, wie mit einem Dateihandle.
Diese "Datei" muss man erst in ein Array umkopieren. Das geht SWIW nur in einer Schleife, Zeile für Zeile, also Satz für Satz.
Du erhälst ein eindimensionales Array $result, Deinen Separator für die Liste kennst Du auch - voilà, schon sind beide Parameter für implode() vorhanden. Wenn das klappt, beschäftigst Du Dich noch mit Arrays in PHP, und verstehst, wie das mit mehrdimensionalen Arrays als implode()-Parameter geht (falls das Abrufen mehrerer Spalten aus der Tabelle "emails" überhaupt nötig ist).
Grüße
Tom
Hi Tom,
Das ergibt ein Resultset, in dessen Zeilen nur ein Wert steht. Es ist aber kein Array, sondern eher eine "Datei". Man erhält ein Ressource Handle auf das Ergebnis, mit dem man sinngemäß so verfahren muss, wie mit einem Dateihandle.
das weiß ich, da ich sowas beinahe täglich codiere (meine soeben unvorteilhaft dargestellten Fähigkeiten diesbezüglich reichen sogar zum Erwerb meines Lebensunterhaltes aus). Ich war wohl nicht in der Lage, das ordentlich durchdacht auszuformulieren (siehe Antwort an small-step).
Robert
Hello,
das sieht doch schon sehr gut aus!
$con = mysql_connect("Hostname","Userneme","Password");
$db = mysql_select_db("database",$con);
$result = mysql_query("SELECT email FROM emails for email not NULL and email !='' ", $con);
Das Resultset (Ergebnistabelle) auslesen
$bcc = Array();
while ($row = mysql_fetch_aaasoc($result))
{
## Array mit Ergebnissen aufbauen
$bcc[] = $row["email"];
## Zur Kontrolle ausgeben
echo "<br />".$row["email"];
}
Aus dem Array einen CSV-String machen. Zusätzlich Zeilenumbrüche
$bcc = implode(",\n",$bcc);
So müsste es klappen. Kann sein, dass die Zeilenumbrüche nicht erlaubt sind, allerdings darf die Zeilenlänge auch nicht beliebig werden (76 Zeichen sind Standard ?? )
Grüße
Tom
hi,
muss es den mysql sein, was diese umwamdlung vornimmt oder aber reicht es dir, wenn die daten aus der datenbank ausgelesen werden und dann durch php in die benötigte form gebracht werden ?
Ilja