Hej
Jeg står med et mindre problem, som dog volder en del grå hår.
Jeg har et script der opretter min kunder i systemet og får at spare tid på at skulle sende tingene ud manuelt, så ville jeg automatisere dette, ved at indsætte et mail-script i brugeroprettelsen. Problemet opstår efter at den har gemt i databasen og den skal videre. Som I kan se har jeg flere steder indsat echo, for at konstatere hvornår den stopper med udførslen og jeg har fundet ud af at den stopper ved linje 99 efter at have skrevet "klar til mail", dvs. lige inden mailscriptet skal gå igang.
Scriptet ser i sin fulde længde således ud:
- include 'connect.php';
- session_start();
- function MakeRandPass($upper = 3, $lower = 3, $numeric = 3, $other = 2) {
- //we need these vars to create a password string
- $passOrder = Array();
- $passWord = '';
- //generate the contents of the password
- for ($i = 0; $i < $upper; $i++) {
- $passOrder[] = chr(rand(65, 90));
- }
- for ($i = 0; $i < $lower; $i++) {
- $passOrder[] = chr(rand(97, 122));
- }
- for ($i = 0; $i < $numeric; $i++) {
- $passOrder[] = chr(rand(48, 57));
- }
- for ($i = 0; $i < $other; $i++) {
- $passOrder[] = chr(rand(33, 47));
- }
- //randomize the order of characters
- shuffle($passOrder);
- //concatenate into a string
- foreach ($passOrder as $char) {
- $passWord .= $char;
- }
- //we're done
- return $passWord;
- }
- if(isset($_POST['opret'])) {
- if($stmt=$mysqli->prepare('SELECT `username` FROM `users` WHERE `username`=?')) {
- //Bind parametre
- $stmt->bind_param('s', $check_user);
- $check_user = $_POST['username'];
- //Udfør
- $stmt->execute();
- $stmt->bind_result($usercheck);
- $stmt->close();
- }
- if($usercheck != "") {
- echo 'Ups!<br />Dit brugernavn er allerede i brug. Udfyld formularen igen og forsøg med et
- andet brugernavn. Du kan udfylde formularen ved at trykke på <a href="#login" class="various">Kundelogin</a>.';
- }
- else {
- echo 'Brugernavnet er ledigt<br />';
- $pwd_gen = MakeRandPass();
- if($stmt=$mysqli->prepare('INSERT INTO `users`(username, password, navn , virksomhed, usergroup)VALUES(?,?,?,?,?)')) {
- //Bind parametre
- $stmt->bind_param('sssss', $username,$adgangskode,$name,$virksomhed,$gruppe);
- //Parameterværdier
- $username = $_POST['username'];
- $adgangskode = md5($pwd_gen);
- $name = $_POST['navn'];
- $virksomhed = $_POST['virksomhed'];
- $gruppe = "user";
- //Udfør
- $stmt->execute();
- $stmt->close();
- $status = 0;
- echo 'brugerkonto oprettet<br />';
- echo 'error 00<br />password is: ';
- echo $pwd_gen;
- }
- else {
- $status = 1;
- /* Der er opstået en fejl */
- echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
- }
- if($stmt=$mysqli->prepare('SELECT `id` FROM `users` WHERE `username` = ?')) {
- //Bind parametre
- $stmt->bind_param('s', $username);
- //udfør
- $stmt->execute();
- //Gem
- $stmt->bind_result($bruger_id);
- //Luk
- $stmt->close();
- echo '<br />bruger hentet<br />';
- }
- if($stmt=$mysqli->prepare('INSERT INTO `user_info`(`kontrol`,`user_id`, `om`, `kontakt`, `adresse`, `postby`, `tlf`, `epost`)VALUES(?,?,?,?,?,?,?,?)')) {
- //Bind parametre
- $stmt->bind_param('iissssss', $kontrol, $bruger_id, $bruger_om, $name, $bruger_adresse, $bruger_postby, $bruger_tlf, $username);
- //Parameterværdier
- $kontrol = 0;
- $bruger_om = "Example text";
- $bruger_adresse = "Din adresse";
- $bruger_postby = "0000 by";
- $bruger_tlf = "(+45)00000000";
- //Udfør
- $stmt->execute();
- $stmt->close();
- $status_info = 0;
- echo 'brugerinfo indsat<br />';
- }
- else {
- $status_info = 1;
- /* Der er opstået en fejl */
- echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
- }
- echo 'klar til mail<br />';
- if($status = 0 && $status_info = 0) {
- //$_SESSION['done'] = "Brugerkontoen og dertilhørende fyldtekst er nu indsat og klar til at blive brugt.<br />Giv venligst kunden nedenstående password:<br />".$adgangskode;
- include 'mail_utf8.php';
- echo 'mail script hentet<br />';
- $arrReplace = array(
- '%{EPOST}%' => $username,
- '%{PASSWORD}%' => $pwd_gen
- );
- echo 'array oprettet<br />';
- $templ = file_get_contents('create_user.txt');
- $besked = strtr($templ, $arrReplace);
- echo 'besked klar<br />';
- $success = mail_utf8($username, '(Servicemeddelse) Din brugerkonto er oprettet', $besked, 'service@khansen-it.dk', '', '');
- //header ('Location: ../index.php');
- echo 'mail afsendt';
- if($success) {
- echo 'Brugerkontoen er oprettet og loginoplysninger er udsendt.';
- }
- }
- elseif($status = 0 && $status_info = 1) {
- //$_SESSION['fail'] = "Brugerkontoen er blevet oprettet og har fået følgende kodeord".$adgangskode."<br />Dog blev der ikke gemt oplysninger omkring brugeren i systemet.<br />FEJL: ".$mysqli->error;
- //header ('Location: index.php');
- echo 'Brugerkontoen er blevet oprettet og har fået følgende kodeord'.$adgangskode.'<br />Dog blev der ikke gemt oplysninger omkring brugeren i systemet.<br />FEJL: '.$mysqli->error;
- }
-
- }
- }
Filen mail_utf8.php er blot selve funktionen der skal udsende mailen og den ser således ud:
- function escapeAddr($addr) {
- $check = preg_match('/(.*)<(.*)>/', $addr, $a);
- if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
- return $addr;
- }
- //Send e-mail funktion
- function mail_utf8($to, $subject='', $message='', $from='', $cc='', $bcc='') {
- $from = escapeAddr($from);
- $header = 'From: '.$from.PHP_EOL
- . 'Return-Path: '.$from.PHP_EOL
- . 'Reply-To: '.$from.PHP_EOL
- . 'MIME-Version: 1.0'.PHP_EOL
- . 'Content-type: text/html; charset=UTF-8'.PHP_EOL
- . 'X-Mailer: PHP/'.phpversion().PHP_EOL
- . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
- if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
- if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
- $header .= PHP_EOL;
- return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
- }
Jeg anvender samme funktion i min kontaktformular. som virker upåklageligt.
Men hvor ligger problemet?
Indlæg senest redigeret d. 18.10.2012 18:15 af Bruger #17072