Hilfe! Wie $wert aus $output[x] von Tabelle?

cschirmbeck

cschirmbeck

Aktives Mitglied
Thread Starter
Dabei seit
07.02.2004
Beiträge
978
Reaktionspunkte
0
Ich stehe vor einem Problem:

Aus zwei Datenbanken sollen Daten ausgelesen werden und dann per E-Mail verschickt werden.
Das Verschicken funktioniert problemlos, wenn man die Daten von einem Formular über POST einfügt, denn dann definiert man ja z.B.

$wert = $HTTP_POST_VARS["wert"];

und setzt dann einfach $wert in den zu verschickenden Mailtext ein.

Wenn ich nun aber von einer Tabelle auslese, dann sieht die Abfrage ja so aus:

$abfrage = "SELECT * FROM tabelle WHERE wert1 = 'wert2' ";
und dann
$ergebnis = mysql_query($abfrage);
und dann
$output=mysql_fetch_array($ergebnis)
und dann einfach
$output[0]...$output[1]...$output[2] usw...

Aber wenn man $output[x] in die Mail einsetzt funktioniert es nicht. Wenn man jedoch über printf $output[x] einsetzt, wird alles korrekt angezeigt.
Wie kriege ich jetzt von der Tabelle die Werte als $wert ausgelesen?

Ich müsste das Projekt bestenfalls noch heute abend fertigstellen, es geht nur noch um den Mailversand. Das komplexe Shopsystem steht schon.

Danke! :)
 
Zuletzt bearbeitet:
Keiner eine Idee? :(
 
Also vereinfacht formuliert: es geht darum Daten aus einer Tabelle in eine Mail zu bekommen.
Ich würde mich über jeden Tipp sehr freuen, dann könnte ich das Projekt abschließen... :confused:
 
$output=mysql_fetch_array($ergebnis)

Heisst es nicht

$output=mysql_fetch_row($ergebnis)
 
Zeig mal wie du den mail() befehl aufrufst.
 
ich verstehe nicht ganz dein Problem.
verstehe ich das richtig?
- Du hast eine datei die dir werte per POST übergibt($wert).
- mit diesen werten möchtest du eine DBAnfrage machen?
das Ergebnis der Abfrage soll dann in eine Mail geschrieben werden und dir zugeschickt werden?

falls ja:

$text = "$output[0]\n$output[1] \n"; evnt. auch $text = $output[0].", ".$output[]2;
//jetzt sollte er dir einen string gebaut haben
$empfanger = "deine@email.de";
mail($empfanger, "BLABLA", $text, "From: dbanfrage" );

edit: tippfehler
 
Zuletzt bearbeitet:
Also, die Mail an sich wird folgendermaßen verschickt:

mail("$empfaenger", "$betreff", "$mailtext", "From: $email");

Das Problem ist nun, dass ich den $mailtext ja definiere. Also z.B.

$mailtext = "
Vielen Dank für Ihre Bestellung!
...

Nun werden aus einer Produktdatenbank mittels der Bestell-ID die Produkte ausgesucht, welche bestellt wurden. Die Augabe funktioniert perfekt, wenn ich das ganze als HTML ausgebe. Das sieht dann so aus:


$abfrage = "SELECT * FROM bestellungen WHERE name = '$kundenid' ";

$ergebnis = mysql_query($abfrage);

// AUSGABE

while($output=mysql_fetch_array($ergebnis))
{
printf("

$output[0] $output[1] $output[2]

");
}

Aber wie bekomme ich die Daten aus der Tabelle, die mit printf und $output[x]
so toll ausgelesen werden, in $mailtext?!?!
 
Hallo,

ich versuch's mal, vielleicht so in die Richtung ....

$abfrage = "SELECT * FROM tabelle WHERE wert1 = 'wert2' ";
$ergebnis = mysql_query($abfrage);
$nummer = mysql_numrows($ergebnis);

$i = 0;
while ($i < $nummer) {
$wert = mysql_fetch_array($ergebnis);
$name = $wert["name"];
... = $wert["ende"]);
... Jetzt kannst Du mit print-Anweisungen arbeiten ...
$i++;
}
mysql_close();

Verwendest Du PHP3? Seit PHP 4.x heißt es nämlich $wert = $_POST["wert"];

Viele Grüße
Michael
 
k33k schrieb:
ich verstehe nicht ganz dein Problem.
verstehe ich das richtig?
- Du hast eine datei die dir werte per POST übergibt($wert).
- mit diesen werten möchtest du eine DBAnfrage machen?
das Ergebnis der Abfrage soll dann in eine Mail geschrieben werden und dir zugeschickt werden?

Genau richtig!

k33k schrieb:
$text = "$output[0]\n$output[1] \n"; evnt. auch $text = $output[0].", ".$output[]2;
//jetzt sollte er dir einen string gebaut haben

So hatte ich es eigentlich probiert, nur ohne \n für die Umbrüche. Ich hatte die $output[x] einfach in einen Text integriert (so nach dem Motto: Telefon:$output[4] usw - kann es daran liegen?
Und: was meinst Du mit String? Wo liegt der Unterschied zwischen beiden Methoden?

Folgende Schwierigkeit liegt noch vor: mittels der Kunden-ID sollen aus einer Bestellungen-Tabelle die Bestellungen dieses Kunden herausgesucht werden, d.h. es gibt mehrere Einträge. Wie bekomme ich es hin, dass diese in der Mail untereinander nach dem gleichen Muster ausgegeben werden, wie ich es mit der printf-Methode geschafft habe?

Vielen Dank für eure Mühe! :)
 
mikne21 schrieb:
Hallo,

ich versuch's mal, vielleicht so in die Richtung ....

$abfrage = "SELECT * FROM tabelle WHERE wert1 = 'wert2' ";
$ergebnis = mysql_query($abfrage);
$nummer = mysql_numrows($ergebnis);

$i = 0;
while ($i < $nummer) {
$wert = mysql_fetch_array($ergebnis);
$name = $wert["name"];
... = $wert["ende"]);
... Jetzt kannst Du mit print-Anweisungen arbeiten ...
$i++;
}
mysql_close();

Also besonders den letzten Teil verstehe ich gar nicht... hast Du vielleicht ein paar Tipps, wie ich das anpassen könnte?

Nochmals danke.
 
$hilfstring = "";
while($output=mysql_fetch_array($ergebni s))
{
$hilfstring = sprintf("$output[0] $output[1] $output[2]");
}

dadurrch bekommst du auf jeden fall einen String zurück.
 
Okay, sieht alles klasse aus, nur: wie setze ich jetzt diese Puzzlestücke zusammen? ;)
 
Hallo,

Du suchst nach bestimmten Datensätzen aus der Datenbank, jedoch weißt Du nicht wieviele Datensätze als Anzahl zurückkommen. Daher mußt Du zuerst diese Anzahl der Datensätze ermitteln.
Im nächsten Schritt liest Du diese Datensätze in ein Array ein solange bis alle eingelesen sind und dazu wird eine Schleife verwendet ($i = 0 ... while ... $i++) und in dieser Schleife kannst Du z.B. dann mit den Print-Anweisungen schreiben
...
$name = $wert["name"];
print "Hallo Frau/Herr $name";
...

Ich hatte den Eindruck mit output[n] weist Du jedem Element des Arrays die Werte einzeln von Hand zu obwohl vielleicht es nicht sinnvoller wäre auch schon bei der Eingabe die Daten in ein Array einzulesen.

Viele Grüße
Michael
 
$abfrage = "SELECT * FROM bestellungen WHERE name = '$kundenid' ";

while($row[]=mysql_fetch_assoc($abfrage));
array_pop($row); //is ein bug der Funktion, man muss das erste element rausschmeissen
for($i=0; $i<count($row); $i++){
 
$abfrage = "SELECT * FROM bestellungen WHERE name = '$kundenid' ";

while($row[]=mysql_fetch_assoc($abfrage));
array_pop($row); //is ein bug der Funktion, man muss das erste element rausschmeissen
for($i=0; $i<count($row); $i++){
$mailtext = "".$mailtext.$row[$i]["name"]."\n";
}
 
k33k schrieb:
$hilfstring = "";
while($output=mysql_fetch_array($ergebni s))
{
$hilfstring = sprintf("$output[0] $output[1] $output[2]");
}

dadurrch bekommst du auf jeden fall einen String zurück.

Wow, ich mache mit eurer Hilfe Fortschritte!
mittels:

$hilfstring = "";
while($output=mysql_fetch_array($ergebnis))
{
$hilfstring = sprintf("$output[3] $output[4] $output[5]");
}

funktoniert die Abfrage, denn wenn ich $hilfstring in den Mailtext einsetze, erscheint tatsächlich ein Produkt! Aber leider eben nur EINS, es sind eigentlich zwei.
Woran kann das jetzt liegen?
 
probier mal:

$hilfstring = "";
while($output=mysql_fetch_array($ergebni s))
{
$hilfstring = sprintf("$output[3] $output[4] $output[5]");
$text = $text.$hilfstring;
}

dann setzt du $text in deine Mail ein.
 
k33k schrieb:
$abfrage = "SELECT * FROM bestellungen WHERE name = '$kundenid' ";

while($row[]=mysql_fetch_assoc($abfrage));
array_pop($row); //is ein bug der Funktion, man muss das erste element rausschmeissen
for($i=0; $i<count($row); $i++){
$mailtext = "".$mailtext.$row[$i]["name"]."\n";
}


Also... da die hier ausgelesenen Daten in einen größeren Text müssen, habe ich probiert, $mailtext mit $producttext zu ersetzen, und habe dann einfach $producttext in $mailtext eingesetzt -- das führte aber zu gar keinem Ergebnis. Die eben gepostete Variante brachte immerhin schon mal eins... ?!
 
hast du es so ausprobiert wie ich in Post 17 geschrieben habe?
 
k33k schrieb:
probier mal:

$hilfstring = "";
while($output=mysql_fetch_array($ergebni s))
{
$hilfstring = sprintf("$output[3] $output[4] $output[5]");
$text = $text.$hilfstring;
}

dann setzt du $text in deine Mail ein.

GENIAL! :D

Es funktioniert!

Vielen vielen vielen vielen dank!
 
Zurück
Oben Unten