Я думаю, что это должно сделать трюк. Я просто добавил if(isset
и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;
if (isset($_POST['submit']))
{
if (mail ($to, $subject, $body, $from))
{
echo '<p>Your message has been sent!</p>';
}
else
{
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Использование привязки параметров - определенно путь сюда. Это не только очень быстро писать (просто добавьте [Parameter(Mandatory=$true)]
над вашими обязательными параметрами), но это также единственный вариант, который вы не будете ненавидеть позже.
Подробнее ниже:
[Console]::ReadLine
явно запрещен правилами FxCop для PowerShell. Зачем? Поскольку он работает только в PowerShell.exe, а не в PowerShell ISE , PowerGUI и т. Д.
Read-Host довольно просто, плохая форма. Read-Host неконтролируемо останавливает сценарий для запроса пользователя, а это значит, что у вас никогда не будет другого скрипта, который включает скрипт, который использует Read-Host.
Вы пытаетесь задать параметры.
Вы должны использовать атрибут [Parameter(Mandatory=$true)]
и правильную настройку, чтобы запросить параметры.
Если вы используете это на [SecureString]
, оно предложит ввести поле пароля. Если вы используете это в типе Credential, ([Management.Automation.PSCredential]
), откроется диалоговое окно учетных данных, если параметр отсутствует. Строка станет просто старым текстовым полем. Если вы добавите HelpMessage в атрибут параметра (то есть [Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]
), он станет справочным текстом для подсказки.
Поместите это в начало своего скрипта. Это заставит скрипт запросить у пользователя пароль. Полученный пароль можно затем использовать в другом месте вашего скрипта через $ pw .
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
[SecureString]$password
)
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
Если вы хотите отлаживать и видеть значение пароля, которое вы только что прочитали, используйте:
write-host $pw
В качестве альтернативы вы можете добавить его как параметр сценария для ввода как часть выполнения скрипта
param(
[Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value1,
[Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value2
)
Read-Host
как «плохая форма», не применяются. Более того,.ShouldProcess()
имеет ограничения, которыеRead-Host
не имеет, например, ограничивается несколькими ответами. Однако я согласен с тем, что.ShouldProcess()
лучше, когда это применимо. – LarsH 19 February 2016 в 12:40