Помогите с PHP скриптом

MC
На сайте с 29.07.2010
Offline
0
754

Я два дня рыл интернет, нашёл дофигища рабочих и не рабочих скриптов и собрал из них один свой, но мне захотелось чтоб скрипт умел отпровлять сообщения не только как текст, но и как HTML код...

Я это попытался сделать:


<html>
<head>
<title>Анонимная почта</title>
<link rel="icon" href="favicon.ico" />
<link type="text/css" rel="StyleSheet" href="/css.css">
<?php
set_time_limit(0);
ignore_user_abort(1);
$to = $_POST["to"];
$subj = $_POST["subj"];
$content = $_POST["content"];
$Name = $_POST["name"];
$type = $_POST["type"];
$ot = $_POST["ot"];
$headers =<<<AKAM
From: $Name <$ot>
MIME-Version: 1.0
Content-Type: text/$type;
charset="windows-1251"
Content-Transfer-Encoding: 8bit
AKAM;
if(isset($to) && isset($subj) && isset($content) && isset($headers))
$ok=mail($to, $subj, $content, $headers);
echo $ok?"<center><b>Сообщение успешно отправлено))</b></center>":"<center><b>Сообщение не отправлено((</b></center>";
?>
</head>
<body>
<center><img src="img/logo.png"></center>
<form method="post" >
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Кому</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="to" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>От (имя)</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="name" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>От (маил)</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="ot" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Тема письма</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="subj" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Тип письма</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="radio" checked="checked" name="type" value="html"> HTML код</center></td></tr>
<tr><td colspan="3" class="content"><center><input type="radio" checked="checked" name="type" value="plain"> Текст</center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="centerarea"><center>Текст</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="contentarea"><center><textarea name="content"rows='15' cols='60'></textarea></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td><center><input type="submit" value="Отправить" ></center></center></td></tr>
</table>
</form>
</body>
</html>

Но если я выберу "HTML код", то то что я написал просто приходит жирным и ссылки не работают, а если я выберу "Текст", то приходит сообщение в виде текста(хоть это радует)

Что мне в нём добавить или исправить чтоб когда я выбрал "HTML код", сообщение можно было писать как HTML код?

firefox19
На сайте с 05.11.2009
Offline
34
#1
if(isset($to) && isset($subj) && isset($content) && isset($headers))

ужос :)

попробуйте:


foreach ($_POST as $num => $val) if (!isset($_POST[$num])) $error=1;

Сам с этим столкнулся когда пришлось проверять стопицот параметров.

а из всего заголовка достаточно:


Content-type: text/html; charset=UTF-8\r\n
From: q@ya.ru\r\n

(копипаста)

Если не поможет - проверьте в приходящем письме строку "Content-Type:"

Ваши идеи - наша работа (http://yaweb.ru) Продам Сайт агентства недвижимости (/ru/forum/561489)
t0os
На сайте с 25.02.2008
Offline
64
#2
foreach ($_POST as $num => $val) if (!isset($_POST[$num])) $error=1;

Это как? Если циклом проходишь по массиву, значит у него этот ключ и так существует.

В isset можно передать несколько параметров за раз, не надо делать много && - http://ru.php.net/manual/en/function.isset.php.

firefox19
На сайте с 05.11.2009
Offline
34
#3

t0os, ну на самом деле я вообще все параметры передаю в ПОСТ массивом, а там уж... Полный код, если интересно:


$post = array();
foreach ($_POST as $num => $val) $post[$num] = s_form($val); // s_form - ф-ция очистки входящих параметров

$error=0
foreach ($post as $num => $val) if ($post[$num]=='') $error=1;
skAmZ
На сайте с 04.09.2009
Offline
122
#4

firefox19, необходимо проверить указаны ли ВСЕ параметры (к примеру браузер забыл про 1 ли 2 ;)), думаете ваш код поможет?)

firefox19
На сайте с 05.11.2009
Offline
34
#5
(к примеру браузер забыл про 1 ли 2 )

это как? Можно пример?

Для проверки на заполняемость ВСЕХ полей это и было написано.

Хотя никто ведь не мешает обязательные поля именовать одним массивом, а необязательные - другим. И обращаться к массивам параметров соотв.:

foreach ($_POST['field1'] as $num => $val)...

firefox19 добавил 29.07.2010 в 21:54

t0os, ясно, судя по минусу в мой адрес - не интересно...

Jekyll
На сайте с 04.05.2009
Offline
136
#6
skAmZ:
браузер забыл

И часто у вас браузер забывает передавать нужные данные?)

Mihanb)ch, Попробуйте сделать echo $content и посмотреть, с чем скрипт реально работает. Кавычки-то небось экранируюцца

skAmZ
На сайте с 04.09.2009
Offline
122
#7

firefox19, Jekyll, часто если в роли браузера выступает некто... Давайте страницу - завалю post запросами) Вы унылые какие-то совсем фантазия не работает)

Из тех кто "помогает" хотя бы кто-нибудь элементарно пытался код запустить?

Хотя бы увидели: "Parse error: syntax error, unexpected T_SL in ***.php on line 15"


<html>
<head>
<title>Анонимная почта</title>
<link rel="icon" href="favicon.ico" />
<link type="text/css" rel="StyleSheet" href="/css.css">
<?php
set_time_limit(0);
ignore_user_abort(1);
$to = $_POST["to"];
$subj = $_POST["subj"];
$content = $_POST["content"];
$Name = $_POST["name"];
$type = $_POST["type"];
$ot = $_POST["ot"];

$add_head = "Content-type: text/$type; charset=windows-1251 \n";
$add_head .= "From: ".$ot."\n";
$add_head .= "Return-Path:<".$ot.">\n";

$subject='=?windows-1251?b?'.base64_encode($subj)."?=";
$mail_content=$content;
if($type=='html') $mail_content='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8"><META content=3D"MSHTML 6.00.6001.18248" name=3DGENERATOR><STYLE></STYLE></HEAD>'.$mail_content.'</BODY></HTML>';

if(isset($to) && isset($subj) && isset($mail_content) && isset($add_head))
$ok=mail($to,$subject, $mail_content, $add_head);
echo $ok?"<center><b>Сообщение успешно отправлено))</b></center>":"<center><b>Сообщение не отправлено((</b></center>";
?>
</head>
<body>
<center><img src="img/logo.png"></center>
<form method="post" >
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Кому</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="to" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>От (имя)</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="name" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>От (маил)</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="ot" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Тема письма</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="text" name="subj" ></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="center"><center>Тип письма</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="content"><center><input type="radio" checked="checked" name="type" value="html"> HTML код</center></td></tr>
<tr><td colspan="3" class="content"><center><input type="radio" checked="checked" name="type" value="plain"> Текст</center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td class="left"></td><td class="centerarea"><center>Текст</center></td><td class="right"></td></tr>
<tr><td colspan="3" class="contentarea"><center><textarea name="content"rows='15' cols='60'></textarea></center></td></tr>
</table>
<table align="center" style="align:center;" cellpadding="0" cellspacing="0" class="all">
<tr><td><center><input type="submit" value="Отправить" ></center></center></td></tr>
</table>
</form>
</body>
</html>
firefox19
На сайте с 05.11.2009
Offline
34
#8
Давайте страницу - завалю post запросами)

вопрос безопасности скрипта тут не стоял.

$add_head = "Content-type: text/$type; charset=windows-1251 \n";

...

<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">

по-моему здесь ошибка, не?

skAmZ
На сайте с 04.09.2009
Offline
122
#9

firefox19, изначально у меня в utf-8 все было... Если бы оставил у TC как минимум ещё 2 вопроса бы возникло) И вообще как обычно даже не потрудились запустить)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий