Я новичок в php / mysql, так что полегче со мной :)

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

Теперь я пытаюсь сделать его динамическим, используя базу данных sql.

У меня есть форма, настроенная с использованием sql и php, но моя проблема заключается в отправке динамически сгенерированных данных.

У меня есть все переменные, доступные с помощью этой строки

extract($_POST['orderdetails'], EXTR_SKIP);

Переменные заканчиваются как $ vanilla00, $ vanilla06, $ vanilla11 и т. д.

Итак, теперь у меня есть этот код для создания таблицы с использованием этих переменных.

while($row = mysql_fetch_array($resultbline))

{$message   .="<tr><td>" 
. $row['prod_name'] 
. "</td><td>&nbsp;</td><td></td>
<td>$" . $row['prod_selectname'] . "0</td>
<td>$" . $row['prod_selectname'] . "6</td>
<td>$" . $row['prod_selectname'] . "11</td>
<td>$" . $row['prod_selectname'] . "18</td>
<td>$" . $row['prod_selectname'] . "t</td>
<td>$" . $row['prod_selectname'] . "24</td>
<td>$" . $row['prod_selectname'] . "36</td>" ;
} 

Prod_selectname берется из базы данных и в этом случае будет ванильным, поэтому итоговая таблица заканчивается чтением

while($row = mysql_fetch_array($resultbline))

{$message   .="<tr><td>" 
. $row['prod_name'] 
. "</td><td>&nbsp;</td><td></td>
<td>$vanilla0</td>
<td>$vanilla6</td>
<td>$vanilla11</td>
<td>$vanilla18</td>
<td>$vanillat</td>
<td>$vanilla24</td>
<td>$vanilla36</td>" ;
}

Проблема в том, что полученное электронное письмо показывает имя переменной (например, vanilla18) вместо того, чтобы рассматривать его как переменную.

Мне что-то не хватает. {([или другой код где-нибудь?

Извините за такую ​​тщательность, но я не знаю, как еще это объяснить.

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

2
MerseyRay 6 Авг 2014 в 16:54
Что должно быть выведено?
 – 
Jo Smo
6 Авг 2014 в 16:58
1
Это потому, что вы объединяете $row['prod_selectname'] как строку.
 – 
machineaddict
6 Авг 2014 в 16:58
Tastro: на выходе должно быть значение "$vanilla18" и т. д., но вместо значения выводится имя переменной. Если изменить код $" . $row['prod_selectname']. "18 на $vanilla18, тогда он работает, поэтому переменная есть. Но это нежизнеспособный вариант, поскольку есть сотни переменных, и я хочу, чтобы они были динамическими. machineaddict: Я не уверен, что это значит и как это решить. (я новичок в php) спасибо
 – 
MerseyRay
6 Авг 2014 в 17:01
Если $row['prod_selectname'] всегда «ванильное», просто сделайте: ' . $vanilla0 . ' вместо '$' . $row['prod_selectname'] . '0' или используйте ответ, предоставленный machineaddict. Это должно работать с $$.
 – 
Jo Smo
6 Авг 2014 в 17:19
Нет, prod_selectname является динамическим. Для этого существует более 100 различных значений. Только 1 из них ванильный
 – 
MerseyRay
6 Авг 2014 в 17:21

2 ответа

Лучший ответ

Это потому, что вы объединяете $row['prod_selectname'] как строку. Перед тем, как повторить эхо для каждой переменной, вам нужно дать ей динамическое имя, например:

$var_name = $row['prod_selectname'] . "0";

Когда вы откроете переменную, это будет примерно так:

"<td>" . echo $$var_name . "</td>";
2
machineaddict 6 Авг 2014 в 17:03
Но мой $var_name динамически создается из prod_selectname и числа после него?
 – 
MerseyRay
6 Авг 2014 в 17:08
Я не могу понять, куда идет этот код :( Если я помещу их один за другим, как указано выше, тогда будут выделены ошибки. Нужна ли мне ваша первая строка перед каждой из моих строк, которым нужна переменная?
 – 
MerseyRay
6 Авг 2014 в 17:26
Вы можете поместить его там, где я сказал, но сначала вам придется закрыть строку. Вот почему вы получаете ошибки.
 – 
machineaddict
6 Авг 2014 в 17:33
Спасибо. Эта часть моей задачи сейчас работает. Я пытался + повторение, но это не позволит мне, так как у меня меньше 15 повторений.
 – 
MerseyRay
6 Авг 2014 в 17:47

Попробуй это:

<?php



while ($row = mysql_fetch_array($resultbline))
{

    $var1 = $row['prod_selectname'] . "0";
    $var2 = $row['prod_selectname'] . "6";
    $var3 = $row['prod_selectname'] . "11";
    $var4 = $row['prod_selectname'] . "18";
    $var5 = $row['prod_selectname'] . "t";
    $var6 = $row['prod_selectname'] . "24";
    $var7 = $row['prod_selectname'] . "36";

    $message .="<tr><td>"
            . $row['prod_name']
            . "</td><td>&nbsp;</td><td></td>
            <td>" . $$var1 . "</td>
            <td>" . $$var2 . "</td>
            <td>" . $$var3 . "</td>
            <td>" . $$var4 . "</td>
            <td>" . $$var5 . "</td>
            <td>" . $$var6 . "</td>
            <td>" . $$var7 . "</td>
";
} 

Но machineaddict опубликовал это первым ... Так что отдайте ему должное. ;)

1
Jo Smo 6 Авг 2014 в 17:48
Круто .. между yoursef и machineaddict, похоже, теперь это работает :) Но vars в вашем посте мне пришлось переместить внутрь «цикла while», чтобы создавались значения каждой строки. большое спасибо вам обоим :)
 – 
MerseyRay
6 Авг 2014 в 17:45
Вы правы... Я просто быстро набирал код и не обратил на него внимания. Я обновил код в своем ответе. ;) Выберите ответ machineaddict в качестве своего решения, если это то, что решило ваш вопрос.
 – 
Jo Smo
6 Авг 2014 в 17:50