objednavkovy formular

Programovacie jazyky, rady, poradňa...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Nefunguje to znamená čo? Čo si skúšal a čo to (ne)robí?

A k tomu druhému. Použi nejakú knižnicu na odosielanie emailov (napr. phpMailer). Vkladanie prílohy do emailu nie je jednoduché, takže knižnica bude rýchlejšie riešenie (ak sa teda nenájde niekto, kto ti to urobí aj bez tej knižnice, ale o tom dosť pochybujem).
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:Nefunguje to znamená čo? Čo si skúšal a čo to (ne)robí?
Nobrazuje v tom e-maily stale vsetky polozky.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Kód: Vybrať všetko

if (isset($_POST['nieco']) && trim($_POST['nieco']) != "") $sprava .= "\nNieco: ".$_POST['nieco'];
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:

Kód: Vybrať všetko

if (isset($_POST['nieco']) && trim($_POST['nieco']) != "") $sprava .= "\nNieco: ".$_POST['nieco'];
No neviem, nefunguje to. Stale mi zobrazuje vsetky polozky.
Isto robim nieco zle.
Mozes mi, prosim ta priamo v tom celom kode urobit zmeny, bo uz neviem, co mam napisat do tych poloziek kde je ['nieco'], hlavne pri tom POSTe.

Dik
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Vôbec netuším, ktoré položky sa ti môžu, ale nemusia zobrazovať a taktiež neviem, ako si tie prvky v tom formulári nazval.

Ak by ale bolo nepovinné napr. telefónne číslo, tak by si zmenil:

Kód: Vybrať všetko

$sprava .= "\nTelefón: ".$_POST['telefon'];
na

Kód: Vybrať všetko

if (isset($_POST['telefon']) && trim($_POST['telefon']) != "") $sprava .= "\nTelefón: ".$_POST['telefon'];
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:Vôbec netuším, ktoré položky sa ti môžu, ale nemusia zobrazovať a taktiež neviem, ako si tie prvky v tom formulári nazval.

Ak by ale bolo nepovinné napr. telefónne číslo, tak by si zmenil:

Kód: Vybrať všetko

$sprava .= "\nTelefón: ".$_POST['telefon'];
na

Kód: Vybrať všetko

if (isset($_POST['telefon']) && trim($_POST['telefon']) != "") $sprava .= "\nTelefón: ".$_POST['telefon'];
Eňo ňuňo.

Dik si borec. Teraz to funguje ako hodinky :)
Zle som to cele zadaval, preto to neslo. Menil som ten POST hned na zaciatku php kodu.
Este raz dik za snahu a cas.

PS: este by si ma potesil, keby si vymyslel daco s tou prilohou. Skusal som aj ten emailovy modul, ale z neho som bol este vacsi pako. Netusim ako to sklbit s tym kodom :?
jurko.info
Medium Expert
Medium Expert
Príspevky: 108
Registrovaný: 22 nov 2006, 0:16
Kontaktovať používateľa:

PHPmailer

Príspevok od používateľa jurko.info »

Ako bolo vyššie napísané, skús to s PHPmailerom, je to jednoduché a máš po problémoch (osobne som s tým nadmieru spokojný)

Tu je krátky návod:
http://www.linuxsoft.cz/article.php?id_article=444

Tu je link na download/tutoriál a pod.:
http://phpmailer.codeworxtech.com/
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

Najde sa tu daky php programator, ktory mi implantuje do tohoto kodu

Kód: Vybrať všetko

<?
if(isset($_POST['Submit'])){

$predmet = "Objednávka";
$sprava = "Objednávací kód: ".$_POST['objednavaci-kod'];
$sprava .= "\nPočet kusov: ".$_POST['pocet-kusov'];
$sprava .= "\nRozmer: ".$_POST['rozmer_1'];
$sprava .= "\nPapier: ".$_POST['papier_1'];
$sprava .= "\nMeno a priezvisko objednávateľa: ".$_POST['meno-a-priezvisko-objednavatela'];
$sprava .= "\nTelefón: ".$_POST['telefon'];
$sprava .= "\nKontaktný e-mail: ".$_POST['e-mail'];
$sprava .= "\nPoznámka: ".$_POST['poznamka'];

echo $sprava;

if ( Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail']) )
  echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
  else echo "Vašu objednávku sa nepodarilo spracovať.";
}
?> 
funkcie na odosielanie e-mailov s prilohami z tohto kodu

Kód: Vybrať všetko

<html>
<head>
<title>E-mail with Attachment</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
   if ($_SERVER['REQUEST_METHOD']=="POST"){

   // we'll begin by assigning the To address and message subject
   $to="[email protected]";

   $subject="E-mail with attachment";

   // get the sender's name and email address
   // we'll just plug them a variable to be used later
   $from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">";

   // generate a random string to be used as the boundary marker
   $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

   // store the file information to variables for easier access
   $tmp_name = $_FILES['filename']['tmp_name'];
   $type = $_FILES['filename']['type'];
   $name = $_FILES['filename']['name'];
   $size = $_FILES['filename']['size'];

   // here we'll hard code a text message
   // again, in reality, you'll normally get this from the form submission
   $message = "Here is your file: $name";

   // if the upload succeded, the file will exist
   if (file_exists($tmp_name)){

      // check to make sure that it is an uploaded file and not a system file
      if(is_uploaded_file($tmp_name)){

         // open the file for a binary read
         $file = fopen($tmp_name,'rb');

         // read the file content into a variable
         $data = fread($file,filesize($tmp_name));

         // close the file
         fclose($file);

         // now we encode it and split it into acceptable length lines
         $data = chunk_split(base64_encode($data));
     }

      // now we'll build the message headers
      $headers = "From: $from\r\n" .
         "MIME-Version: 1.0\r\n" .
         "Content-Type: multipart/mixed;\r\n" .
         " boundary=\"{$mime_boundary}\"";

      // next, we'll build the message body
      // note that we insert two dashes in front of the
      // MIME boundary when we use it
      $message = "This is a multi-part message in MIME format.\n\n" .
         "--{$mime_boundary}\n" .
         "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
         "Content-Transfer-Encoding: 7bit\n\n" .
         $message . "\n\n";

      // now we'll insert a boundary to indicate we're starting the attachment
      // we have to specify the content type, file name, and disposition as
      // an attachment, then add the file content and set another boundary to
      // indicate that the end of the file has been reached
      $message .= "--{$mime_boundary}\n" .
         "Content-Type: {$type};\n" .
         " name=\"{$name}\"\n" .
         //"Content-Disposition: attachment;\n" .
         //" filename=\"{$fileatt_name}\"\n" .
         "Content-Transfer-Encoding: base64\n\n" .
         $data . "\n\n" .
         "--{$mime_boundary}--\n";

      // now we just send the message
      if (@mail($to, $subject, $message, $headers))
         echo "Message Sent";
      else
         echo "Failed to send";
   }
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
   enctype="multipart/form-data" name="form1">
   <p>From name: <input type="text" name="fromname"></p>
   <p>From e-mail: <input type="text" name="fromemail"></p>
   <p>File: <input type="file" name="filename"></p>
   <p><input type="submit" name="Submit" value="Submit"></p>
</form>
<?php } ?>
</body>
</html>
Tento kod funguje perfektne a pride aj priloha, ale potrebujem to dostat do kodu hore, aby to bolo v tom formulari. Nic ine tam netreba menit, len doplnit odosielanie priloh.

Daco som skusal, ale vzdy mi vyhodilo toto:
Parse error: syntax error, unexpected $end .....
Programovat v php neviem.

Najde sa tu dobra dusicka, co mi to spravi? Surne to potrebujem.

Thx
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Nebolo by jednoduchšie použiť tú knižnicu phpMailer? V tom odkaze, čo ti poslal jurko.info je aj takmer kompletný návod (akurát sa ako príloha nebude posielať reťazec, ale súbor, takže sa zmení $mail->AddStringAttachment ($data, "zakaznik.txt", "base64", "text/plain"); na niečo takéto $mail->AddAttachment ($tmp_name, $name, "base64", $type); ).

PS: To, že to potrebuješ súrne je, podľa mňa, dosť malá motivácia na to, aby ti to niekto urobil.
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

ThunderBoy napísal:

Kód: Vybrať všetko

<?
if(isset($_POST['Submit'])){

$predmet = "Objednávka";
$sprava = "Objednávací kód: ".$_POST['objednavaci-kod'];
$sprava .= "\nPočet kusov: ".$_POST['pocet-kusov'];
$sprava .= "\nRozmer: ".$_POST['rozmer_1'];
$sprava .= "\nPapier: ".$_POST['papier_1'];
$sprava .= "\nMeno a priezvisko objednávateľa: ".$_POST['meno-a-priezvisko-objednavatela'];
$sprava .= "\nTelefón: ".$_POST['telefon'];
$sprava .= "\nKontaktný e-mail: ".$_POST['e-mail'];
$sprava .= "\nPoznámka: ".$_POST['poznamka'];

echo $sprava;

if ( Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail']) )
  echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
  else echo "Vašu objednávku sa nepodarilo spracovať.";
}
?>
Este sa vraciam k tomuto kodu.
Viete niekto tento kod upravit tak, aby kopiu vytvorenej spravy odoslalo aj objednavatelovi, teda tomu, co objednavku poslal. Skratka na e-mail, ktory sa zadal do polozky: Kontaktný e-mail.
Takze odosle dva e-maily. Jeden na xxxxxx@ gmail.com a druhy na e-mail ktory bol zadany v polozke Kontaktný e-mail.

Dik za radu 8)
killergage
Amateur
Amateur
Príspevky: 11
Registrovaný: 18 nov 2005, 22:23

pomoc

Príspevok od používateľa killergage »

a dalo by sa to nastavit aby to odosielalo na dva emaily sucastne ???
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

ano

Kód: Vybrať všetko

if ( Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail']) )
  echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
  else echo "Vašu objednávku sa nepodarilo spracovať.";
} 
toto hore uprav takto

Kód: Vybrať všetko

if ( Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail'])  && Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail']))
  echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
  else echo "Vašu objednávku sa nepodarilo spracovať.";
} 
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tie dva maily môže hodiť aj do jednej funkcie mail oddelené čiarkou (ak príjemca nemá toho druhého vidieť, tak to hodí do bcc, ale aj tak netreba volať mail() dvakrát)
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

caesar1987 napísal:

Kód: Vybrať všetko

if ( Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail'])  && Mail("[email protected]", $predmet, $sprava, "From: " . $_POST['e-mail']))
  echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
  else echo "Vašu objednávku sa nepodarilo spracovať.";
} 
No toto je to iste, co bolo predtym, len na dva e-maily, ktorych adresy viem.
Ale ja ich potrebujem naraz poslat nielen na e-mail [email protected] alebo [email protected], ale aj na e-mail, ktory ziska odtialto $_POST['e-mail']), a tu adresu ja neviem. Ta bude ziskana z formulara.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Urobíš to presne tak, ako ti písal audiotrack. A teda pošleš ten email na nejakú adresu a ostatné adresy pridáš do BCC (asi by bolo rozumné, keby si použil nejakú knižnicu, ktorá sa postará o vytvorenie potrebných hlavičiek, takže môžeš vyskúšať napr. phpMailer).

//audiotrack: ty máš asi velmi rád toho phpMailera :) už si ho odporučil asi každému okrem mňa :P

// chrono: Ani nie, ale pri pohľade na všetko to odosielanie emailov pomocou funkcie mail sa nič iné odporučiť nedá (málo kto odošle aspoň základné hlavičky, takže taký email skončí zvyčajne ako spam a takisto takmer nikoho netrápi kódovanie znakov...). :D

Je ale pravda, že CC a BCC funguje pravdepodobne len vtedy, keď sa to posiela cez SMTP, takže ak nie je dostupné SMTP, bude treba ten email odoslať dva krát.
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

jaj, zas ten phpMailer :?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

ThunderBoy napísal:jaj, zas ten phpMailer :?
Čo máš proti tej knižnici? :P Používa sa jednoducho a veľa práce urobí automaticky. ;)

Kód: Vybrať všetko

<?php

include_once('class.phpmailer.php');

function posliEmail($to, $message, $subject, $from)
{
	if (is_array($to)) {
		$adresy = $to;
	} else {
		$adresy = array($to);
	}
	
	foreach ($adresy as $adresa) {
		$mail = new PHPMailer();
		$mail->CharSet    = "utf-8";
		$mail->Body       = $message;
		$mail->From       = $from;
//		$mail->FromName   = $from_name; // toto nie je pouzite (neviem, ci tam mas aj meno odosielatela)
		$mail->Subject    = $message;
		$mail->AddAddress($adresa);
		if (!$mail->Send()) return false;
	}
	return true;
}

$sprava = "pokusna sprava";
$predmet = "test";
$_POST['e-mail'] = "[email protected]";

if (posliEmail(array("[email protected]", "xxxxx.example.com"), $sprava, $predmet, $_POST['e-mail'])) {
	echo "Vaša objednávka bola úspešne spracovaná a odoslaná.";
} else {
	echo "Vašu objednávku sa nepodarilo spracovať.";
}

?>
Ako som už písal, funkcia mail() (pravdepodobne) nevie odoslať email na viac adries, takže ich treba poslať viac krát. Pridal som tam funkciu, ktorá môže mať ako prvý parameter buď pole, alebo len jeden reťazec (podľa toho, či sa to má odoslať na viac emailových adries).

Inak práve teraz mi napadlo, že ak ten email pošleš aj tomu, čo si niečo objednáva, tak nie je rozumné mu poslať email, v ktorom je ako adresa odosielateľa jeho email (mal by tam byť tvoj).

PS: Ošetriť by si mal aj $_POST['e-mail'].
PPS: Ten objekt $mail sa dá v tej funkcii "recyklovať". Stačí vymazať adresátov a nastaviť ich znova (netreba ten objekt vytvárať pri každom emaily).
PPPS: Skús porovnať email, ktorý vygeneruješ pomocou tej funkcie mail() s tým, ktorý vygeneruje PHPMailer. ;)
Napísať odpoveď