Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Автоподстановка в поле темы????


Автор: sokpet 6.12.2009, 19:58
Добрый день.

Помогите плиз.

Имеется форма обратной связи (сontact.html) и обработчик (contact.php) на который ссылается форма. (Код ниже)

Все работает. 
Теперь появилась новая задача: существует 2 страницы с продукцией (product.html и product_2.html), рядом с каждым продуктом стоит check box и ссылка для запроса доп. информации

Вопрос: как сделать чтобы посетитель отметив необходимый артикул (один или несколько, на одной страницы или на двух) при нажатии ссылки переходил бы на страницу формы обратной связи на которой уже автоматичеки было бы заполнено поле Тема $fields["Subject"] = "Subject"; (в зависимости от выбранных артикулов) и сообщение отправлялось бы на другой почтовый ящик. (т.е. если посетитель входит на форму обр. связи на прямую = посылаем на почт. ящик1 и тему вводит сам, И если входит на форму через страницы с продукцией = посылаем на почт. ящик 2 и тема вставляется автоматически).


В данном коде все письма идут только на второй ящик. А в REFERER всегда попадает только contact.html даже если пришел со страницы product.html. КАК ИСПРАВИТЬ?????

Код


<?php 

if($_SERVER['HTTP_REFERER'] == "http://www.XXX/product.html" || $_SERVER['HTTP_REFERER'] == "http://www.XXX/product_2.html")
{$to = "[email protected]";}
else
{$to = "[email protected]";}


$from = $_POST['Email'] ; 
$name = $_POST['Nombre'] ; 
$headers = "De: $from"; 
$subject = "Contact via WEB"; 

$fields = array(); 
$fields["Company_name"] = "Company_name"; 
$fields["Name"] = "Name"; 
$fields["Email"] = "Email"; 
$fields["Subject"] = "Subject"; 
$fields["Message"] = "Message"; 

$body = "We have received the following message:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_POST[$a]); } 

$headers2 = "De: [email protected]"; 
$subject2 = "Thanks for contacting us"; 
$autoreply = "Thanks for contacting us. We will responde you within 24 hours";

$send = mail($to, $subject, $body, $headers); 
$send2 = mail($from, $subject2, $autoreply, $headers2);
if($send) 
{header( "Location: http://www.XXX/thankyou.html" );} 
else 
{print "We could not send your mail"; } 

?>


Если эта тема уже обсуждалась то дайте пожалуйста линк.

Заранее спасибо

Автор: Pitlord 6.12.2009, 20:04
Просто пользуйся дополнительным GET-параметром.

Автор: sokpet 6.12.2009, 21:02
а подробнее  про доп. GET можно?

Автор: Pitlord 6.12.2009, 21:11
Для этого страница с HTML-формой должна динамически формироваться, конечно. На страницах с продуктами необходимо формировать ссылку на страницу с формой с дополнительным GET-параметром. Например:
Код

<form action="contact_form.php?from=product" method="post">


В contact_form.php в завимости от него составлять необходимую форму.

Автор: sokpet 6.12.2009, 22:30
в том то и дело, что там только статика. Других вариантов нет?

Автор: Simpliest 6.12.2009, 22:38
куки и яваскрипт.
При условии что формы у тебя не на разных доменах.

Автор: sokpet 7.12.2009, 01:10
а с кукисами где что добавлять нужно? На яве не желательно т-к- у многих она выключена. Формы на одном домене.
 Т.е. если я правильно рассуждаю то должны быть формы в product.html + product_2.html (там где клиент будет выбирать продукцию в чекбоксах) и contact.html (cама форма обр- связи) 

Заранее спасибо

Автор: Pitlord 7.12.2009, 01:22
Цитата(sokpet @  6.12.2009,  22:30 Найти цитируемый пост)
в том то и дело, что там только статика

Что мешает это исправить?

Автор: sokpet 7.12.2009, 01:33
к сожалению с динамикой не силен. 

Автор: Simpliest 7.12.2009, 06:54
Цитата(sokpet @  7.12.2009,  00:33 Найти цитируемый пост)
к сожалению с динамикой не силен

тогда у тебя нет вариантов для решения этой задачи.

Добавлено через 1 минуту и 16 секунд
Цитата(sokpet @  7.12.2009,  00:10 Найти цитируемый пост)
а с кукисами где что добавлять нужно?

В них и нужно добавлять то значение, которое тебе нужно подставлять на другой форме.
В одном месте сохранил в куки, в другом месте взял из кук и вставил в html.

Автор: Ипатьев 7.12.2009, 07:32
Для начала я бы решал эту задачу для одной формы...

Автор: sokpet 7.12.2009, 17:22
я через одну форму и пытаюсь решить. Там 60 страниц и все статика (в XHTML и CSS рублю) только формуляр через РНР (вот тут сложнее)  и захотели чуть-чуть усложнитить задачу. К сожалению РНР за пару дней не выучить (если только под гипнозом!) 

Может хелпните (желательно без общих фраз)

Автор: Ипатьев 7.12.2009, 17:33
Ну да, конечно. форму никто не видел, как она работает никто не знает, но отвечать надо без общих фраз.

Форма с чекбоксами есть? 
Выбранные параметры из нее в страницу с формой обратной связи передаются? В адресной строке они видны?

Автор: sokpet 7.12.2009, 17:39
сейчас все выложу.

Автор: Ипатьев 7.12.2009, 17:41
выкладывать ничего не надо.
надо ответить на вопросы, которые я задал

Автор: sokpet 7.12.2009, 17:52
Это форма ofertas.html

Код

     <form action="" method="post">
  <div id="oferta_container">
   
<div class="oferta_sub_cont"> 
<div class="checkbox_link">
<div class="mas_info"><a href="contactos.html">Mas info</a></div>
 <input type="checkbox" name="art[]" class="free" value="oferta1"/>
</div>
<div class="oferta"><a href="styles/fotos/ofertas_large.jpg" rel="lightbox[roadtrip]"><img src="styles/fotos/ofertas_mini.jpg" title="Pulse el imagen de oferta para verla en la pantalla completa" alt="Pulse el imagen de oferta para verla en la pantalla completa"/></a></div>
</div>



<div class="oferta_sub_cont"> 
<div class="checkbox_link">
    <div class="mas_info"><a href="contactos.html">Mas info</a></div>

     <input type="checkbox" name="art[]" class="free" value="oferta2"/>

 </div>
<div class="oferta"><a href="styles/fotos/ofertas_mini_empty_large.jpg" rel="lightbox[roadtrip]"><img src="styles/fotos/ofertas_mini_empty.jpg" title="Pulse el imagen de oferta para verla en la pantalla completa" alt="Pulse el imagen de oferta para verla en la pantalla completa" /></a></div>
</div>

<div class="oferta_sub_cont"> 
<div class="checkbox_link">
    <div class="mas_info"><a href="contactos.html">Mas info</a></div>
      <input type="checkbox" name="art[]" class="free" value="oferta3"/>
 </div>
<div class="oferta"><a href="styles/fotos/ofertas_mini_empty_large.jpg" rel="lightbox[roadtrip]"><img src="styles/fotos/ofertas_mini_empty.jpg" title="Pulse el imagen de oferta para verla en la pantalla completa" alt="Pulse el imagen de oferta para verla en la pantalla completa" /></a></div>
</div>

<div class="oferta_sub_cont"> 
<div class="checkbox_link">
   <div class="mas_info"><a href="contactos.html">Mas info</a></div> 
<input type="checkbox" name="art[]" class="free" value="oferta4"/>
  </div>
<div class="oferta"><a href="styles/fotos/ofertas_mini_empty_large.jpg" rel="lightbox[roadtrip]"><img src="styles/fotos/ofertas_mini_empty.jpg" title="Pulse el imagen de oferta para verla en la pantalla completa" alt="Pulse el imagen de oferta para verla en la pantalla completa"/></a></div>
</div></div>
<input type="submit">
     </form>



Это форма из contactos.html

Код

  <form action="contact.php" method="post" id="formulario" title="Formulario de contactos" dir="ltr" xml:lang="es" lang="es">
   <table class="formulario" width="500" border="0" cellpadding="3">
  <tr>
    <td width="231">NOMBRE DE LA EMPRESA:</td>
    <td width="267"><input type="text" name="Nombre_empresa" class="formularioright" id="Nombre_empresa"/>
</td>
  </tr>
  <tr>
    <td>NOMBRE:</td>
    <td><input name="Nombre" type="text" class="formularioright" id="Nombre"/></td>
  </tr>
  <tr>
    <td>CORREO ELECTRONICO:</td>
    <td><input name="Email" type="text" class="formularioright" id="Correo_Electronico"/></td>
  </tr>
  <tr>
    <td>ASUNTO:</td>
    <td>

      <input name="Asunto" type="text" class="formularioright" id="Asunto" /> 

  </td>
  </tr>
    <tr>
    <td colspan="2">MENSAJE:
    </td>
    </tr>
        <tr>
    <td colspan="2"><textarea name="Mensaje" cols="99" rows="14" class="formularioright1" id="Mensaje"></textarea></td>
    </tr>
      <tr>
          <td colspan="2"><input name="submit" type="submit" class="enviar" onclick="MM_validateForm('Nombre_empresa','','R','Nombre','','R','Correo_Electronico','','RisEmail','Asunto','','R','Mensaje','','R');return document.MM_returnValue" value="ENVIAR"/>
 </td>
    </tr>
</table>

  </form>


Код

<?php 
if($_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas.html" || $_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas_2.html")
{
$send = "[email protected]";}
else
{$send2 = "[email protected]"; }

$from = $_POST['Email'] ; 
$name = $_POST['Nombre'] ; 
$headers = "De: $from"; 
$subject = "Web Datos de Contacto"; 

$fields = array(); 
$fields{"Nombre_empresa"} = "Nombre_empresa"; 
$fields{"Nombre"} = "Nombre"; 
$fields{"Email"} = "Email"; 
$fields{"Asunto"} = "Asunto"; 
$fields{"Mensaje"} = "Mensaje"; 

$body = "Hemos recibido la seguiente informacion:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_POST[$a]); } 

$headers2 = "De: [email protected]"; 
$subject2 = "Gracias por contactar con nosotros"; 
$autoreply = "Gracias por contactar con nosotros. Nos pondremos en contacto con usted en 24 horas. Si tiene una pregunta, visite nuestro sitio web  www.xxx.com";

$send = mail($subject, $body, $headers); 
$send2 = mail($from, $subject2, $autoreply, $headers2); 
if($send) 
{header( "Location: http://www.xxx/gracias.html" );} 
else 
{print "No hemos podido enviar su mensaje, por favor avise [email protected]"; } 

?>



Ну а задача излагалась выше...

Заранее спасибо за помощь

Автор: Ипатьев 7.12.2009, 18:23
Задачу излагает преподаватель на экзамене.
А здесь вы делаете свою работу, за которую вам платят деньги, и спрашиваете совета, как лучше сделать.
Как я это понимаю.

Начнем с того, что пока файл contactos будет иметь расширение html, никакие операции на РНР в нем не будут возможны.
следовательно, надо переименовать в contactos.php
Далее. В ofertas убрать  method="post", а в action наоборот прописать contactos.php

В итоге после выбора в ofertas, у нас должен открыться contactos.php с выбранными параметрами в адресной строке.
А в теле файла если написать 
Код

<pre><?PHP print_r($_GET['art']) ?></pre>

то будут выведены выбранные чекбоксы.
Когда это заработает, перейдем к следующему этапу
 



Автор: sokpet 9.12.2009, 15:57
Спасибо, переделал как ты сказал,

только <pre><?PHP print_r($_GET['art']) ?></pre>

поставил в 

Код

<input name="Asunto" type="text" class="formularioright" id="Asunto" value="<pre><?PHP print_r($_GET['art']) ?></pre>

"/>


так как мне нужно чтобы именно в этом поле все заполнялось. Теперь заполняет, только почему то пишет следующим образом: <pre>Array(    [0] => oferta2    [1] => oferta3)</pre>
как убрать, чтобы писалось только oferta2, oferta3  ???

и теперь не работает contact.php (т.е. обработчик отправки почты). Где что исправить???

 Спасибо

Автор: Ипатьев 9.12.2009, 16:00
Цитата(sokpet @  9.12.2009,  15:57 Найти цитируемый пост)
чтобы писалось только oferta2, oferta3 

<?PHP echo implode(",",$_GET['art']) ?>


Цитата(sokpet @  9.12.2009,  15:57 Найти цитируемый пост)
Где что исправить???

для этого надо знать, что именно не работает

Автор: sokpet 9.12.2009, 16:19
Спасибо теперь пишет как надо, только если ничего не выбираешь и нажимаешь submit то в 
contactos.php вылезает 
<br /><b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>/homepages/12/d310437503/htdocs/contactos.php</b> on line <b>21</b><br />

Как сделать чтобы в таком случае просто вылезало: Ofertas General

И когда нажимаешь отправить в contactos.php срабатывает contact.php и выдает ошибку на линии 33 (закрывающий тег php). Хотя когда contactos.php был html почта отправлялась. Может здесь тоже metod убрать? 

Автор: bars80080 9.12.2009, 18:23
Цитата(sokpet @  9.12.2009,  15:19 Найти цитируемый пост)
вылезает 
<br /><b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>/homepages/12/d310437503/htdocs/contactos.php</b> on line <b>21</b><br />

проблемы в функции implode на строке 21. почему бы не посмотреть, что там не соответствует синтаксису?


Цитата(sokpet @  9.12.2009,  15:19 Найти цитируемый пост)
И когда нажимаешь отправить в contactos.php срабатывает contact.php и выдает ошибку на линии 33 (закрывающий тег php)

и какую же ошибку?
/скорее всего какой-то скобки не хватает/

Автор: sokpet 10.12.2009, 02:33
С частью вопроса разобрался, в итоге получилось следующее:

Код

<input name="Asunto" type="text" class="formularioright" id="Asunto" value="<?PHP if($_GET['art'] ==  '') 
           { echo $_GET['art'] = "Ofertas General"; }
           else  
           { echo "Oferta: ", implode(", ",$_GET['art']);} ?>"/>


А как теперь правильно привинтить contact.php (обработчик почты). Если он указан как action то не срабатывает условие REFERER, так как последнюю страницу, которую он видит это contactos.php. и шлет все на второй ящик, а если я вставляю все в один файл contactos.php , и в action пишу '<?=echo $_server['PHP_self']?>' то файл срабатывает даже не показав форму для заполения.
Подскажите как лучше сделать? 

код обработчика:

Код

<?php 
if($_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas.html" || $_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas_2.html")
{
$to = "[email protected]";}
else
{$to = "[email protected]"; }

$from = $_REQUEST['Email'] ; 
$name = $_REQUEST['Nombre'] ; 
$headers = "De: $from"; 
$subject = "Web Datos de Contacto"; 

$fields = array(); 
$fields["Nombre_empresa"] = "Nombre_empresa"; 
$fields["Nombre"] = "Nombre"; 
$fields["Email"] = "Email"; 
$fields["Asunto"] = "Asunto"; 
$fields["Mensaje"] = "Mensaje"; 

$body = "Hemos recibido la seguiente informacion:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 

$headers2 = "De: [email protected]"; 
$subject2 = "Gracias por contactar con nosotros"; 
$autoreply = "Gracias por contactar con nosotros. Nos pondremos en contacto con usted en 24 horas. Si tiene una pregunta, visite nuestro sitio web  www.xxx.com";

$send = mail($to, $subject, $body, $headers); 
$send2 = mail($from, $subject2, $autoreply, $headers2); 
if($send) 
{header( "Location: http://www.xxx/gracias.html" );} 
else 
{print "No hemos podido enviar su mensaje, por favor avise [email protected]"; } 

?>


Заранее спасибо

Автор: bars80080 10.12.2009, 11:13
Цитата(sokpet @  10.12.2009,  01:33 Найти цитируемый пост)
<input name="Asunto" type="text" class="formularioright" id="Asunto" value="<?PHP if($_GET['art'] ==  '') 
           { echo $_GET['art'] = "Ofertas General"; }
           else  
           { echo "Oferta: ", implode(", ",$_GET['art']);} ?>"/>

это какой-то страх божий. такое ощущение, что вы целенаправленно пытаетесь сделать код максимально не читаемым.
почему было не написать так:

Код

<?php
if(empty($_GET['art'])) { $val = "Ofertas General"; }
elseif(is_array($_GET['art'])) { $val = implode(", ",$_GET['art']); }
else { $val = $_GET['art']; }
?>
<input name="Asunto" type="text" class="formularioright" id="Asunto" value="<?php echo $val; ?>" />

что имелось в виду в echo $_GET['art'] = "Ofertas General"; - не знаю, поэтому убрал


Цитата(sokpet @  10.12.2009,  01:33 Найти цитируемый пост)
 '<?=echo $_server['PHP_self']?>' 

так оно не работает. либо <?php echo $some; ?> , либо <?=$some?> , а не винегретом

Автор: sokpet 14.12.2009, 15:52
Спасибо, поправил.

Не совсем понял что делать с

Код

<?php echo $some; ?>


Мне нужно чтобы выполнялось вот это условие, но если в action (contactos.php) стоит contact.php то условие не работает т.е. все уходит на второй ящик. А если вставляю все в один файл то вообще ничего не работает 

if($_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas.html" || $_SERVER['HTTP_REFERER'] == "http://www.xxx/ofertas_2.html")
{
$to = "[email protected]";}
else
{$to = "[email protected]"; }

Как это правильно привинтить?

Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)