2016-05-14 7 views
-2

Я использую PHP по электронной почте данные, введенные через HTML контактную форму, используя код ниже:Включите MySql значение DB в PHP форме электронной почты тела

HTML

<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="post" name="form" id="form"> 
    <input type="text" id="name" name="name"/> 
    <input type="text" id="email" name="email"/> 
    <input name="submit" type="submit" title="Submit" value="Submit"/> 
</form> 

PHP

<?php 
    require 'connect.php'; 
    $id = $_GET['id']; 
    $id = mysql_real_escape_string($id); 
    $query = "SELECT * FROM `items` WHERE `item_id`='" . $id . "'"; 
    $result = mysql_query($query); 
    while ($fetch = mysql_fetch_assoc($result)) { 
     $item_id = $fetch['item_id']; 
     $item_name = $fetch['item_name']; 
    } 
    if (isset($_POST['submit'])) { 
     $to = "[email protected]"; 
     $name = $_REQUEST['name']; 
     $email = $_REQUEST['email']; 
     $item_name = $_REQUEST['item_name']; 
     $subject = "New Message"; 
     $body = "Name: $name \n\n Email Address: $email \n\n Item Name: $item_name \n\n"; 
     $sent = mail($to, $subject, $body); 
     echo 'Sent'; 
     die; 
    } 
?> 

Письмо отправляется правильно и содержит значения, введенные в поля формы ввода «Имя» и «Электронная почта», но переменная $ item_name пуста? Единственный способ заставить его работать - это отбросить переменную $ item_name в скрытое поле ввода, а затем включить это в тело сообщения электронной почты. Есть ли более простой способ?

<input type="hidden" id="item_name" name="item_name" value="<?php echo $item_name; ?>"/> 

EDIT:

Я удалил:

$item_name = $_REQUEST['item_name']; 

в, если заявление, но переменная $ item_name еще ничего не отображает, когда электронная почта отправляется с помощью PHP?

+4

'mysql_ *' функции устарели с PHP 5.5 и удалены в PHP 7, вместо этого используйте функции mysqli_ * или PDO. – Panda

+0

Попробуйте использовать var_dump ($ item_name), если есть возврат данных – Fil

+0

var_dump ($ item_name) отображает правильное значение –

ответ

0

Закрыть - вы смотрите прямо на него. Обратите внимание, что вы запрашиваете параметр REQUEST, а не выбранный вами параметр:

Первоначально я предлагал это, не видя леса для деревьев (он очищает избыточную и ошибку (XSS INJECTION!), Но все же терпит неудачу:

<?php 
require 'connect.php'; 
$id = $_GET['id']; 
$id = mysql_real_escape_string($id); 
$query = "SELECT * FROM `items` WHERE `item_id`='" . $id . "'"; 
$result = mysql_query($query); 
while($fetch = mysql_fetch_assoc($result)){ 
    //these variables only exist in this scope 
    $item_id = $fetch['item_id']; 
    $item_name = $fetch['item_name']; 
    //assuming you've found what you're looking for, terminate the loop, conditionally 
    if ($item_id != null && $item_name != null) 
    { 
    break; 
    } 

} 
if(isset($_POST['submit'])) 
{ 
    $to="[email protected]"; 
    $name=$_REQUEST['name']; 
    $email=$_REQUEST['email']; 
    //$item_name=$_REQUEST['item_name']; 
    $subject="New Message"; 
    $body="Name: $name \n\n Email Address: $email \n\n Item Name: $item_name \n\n"; 
    $sent=mail($to, $subject, $body); 
    echo 'Sent'; die; 
} 

вместо этого, основной причиной ваших проблем, которые обзорного, попробуйте сделать следующее:

<?php 
require 'connect.php'; 
$id = $_GET['id']; 
$id = mysql_real_escape_string($id); 
$query = "SELECT * FROM `items` WHERE `item_id`='" . $id . "'"; 
$result = mysql_query($query); 
// placeholder variables in the scope you are interested in! 
$item_id = null; 
$item_name = null; 
while($fetch = mysql_fetch_assoc($result)){ 
    // now these reference a different (parent) scope 
    $item_id = $fetch['item_id']; 
    $item_name = $fetch['item_name']; 
    //assuming you've found what you're looking for, terminate the loop, conditionally 
    if ($item_id != null && $item_name != null) 
    { 
    break; 
    } 

} 
if(isset($_POST['submit'])) 
{ 
    $to="[email protected]"; 
    $name=$_REQUEST['name']; 
    $email=$_REQUEST['email']; 
    //$item_name=$_REQUEST['item_name']; 
    $subject="New Message"; 
    $body="Name: $name \n\n Email Address: $email \n\n Item Name: $item_name \n\n"; 
    $sent=mail($to, $subject, $body); 
    echo 'Sent'; die; 
} 

в основном то, что происходит это $item_[id|name] только существовали в вашем время цикла, когда вы просили. их в другом месте, и они доступны? У меня нет ответа на это, потому что это не доступно нам в этом вопросе spec.

TL: DR ~ ваши $item_[id|name] переменные, где область видимости в пределах каждой итерации цикла в то время, для этого примера

установить более высокий переменный уровень, и он будет ссылаться и установить значение.

также - Вы изначально были переписывание переменной $item_name в вашей, если заявление

EDIT # 3billion: документация немного сухой (как в: стерео инструкции по установке), но как-то, что развивается с более 20 различных языков на 15 лет --- узнать любить модульные тесты

phpunit - довольно приличный набор. theres руководство и theres кривая обучения, но это сделает вас лучшим программистом (если это ваша цель - я абсолютно не хочу звучать снисходительно - много времени люди «программируют», чтобы заполнить конкретное требование и сэкономить деньги своей компании - никакого вреда не фол!)

модульные тесты делают меня лучше каждый день.

https://phpunit.de/

+0

Я удалил $ item_name = $ _ REQUEST ['item_name']; но переменная $ item_name внутри тела электронной почты по-прежнему не отображается в отправленном письме? Если я повторяю $ item_name в другом месте страницы, отображается правильное значение из БД? –

+0

ahhh, поэтому я не знаю ваших данных БД - но что может произойти, вы получаете, а затем перезаписываете переменные в своем цикле while. Вы должны прервать цикл после того, как значения были установлены - я обновил свой пример, иначе вы рискуете итерации/прошлым/переменными и сбросите их до нуля. –

+0

Я использовал 'return' вместо' break' - слишком много языков этих дней. используйте 'break' - обновленный пример с этим –

0

Dont использовать $item_name=$_REQUEST['item_name']; внутри функцию IsSet, то вы получите реальный $ ITEM_NAME от оператора выбора.

0

У вас есть 2 $item_name объявления в вашем коде:

$item_name = $fetch['item_name']; 

И

$item_name = $_REQUEST['item_name']; 

Таким образом, второй один будет перезаписывать первый. Таким образом, если нет <input> для $_REQUEST['item_name'], он будет пустым.

Чтобы решить эту проблему, удалите второе объявление, так что $item_name сохранит значение, извлеченное из базы данных.


Примечание:

mysql_* функции устарели, так как PHP 5.5 и удалены в PHP 7, использовать mysqli_* функции или PDO вместо этого.

+0

@MikeE Помогает ли вам любой из этих ответов? Примите самое лучшее, спасибо :) – Panda

Смежные вопросы