Можно ли каким-либо образом перенаправить данные формы в файл PHP внутри той же папки при использовании узла & Экспресс.
HTML
<form action="contact.php" method="post" role="form">
<div class="form-group">
<input type="text" class="form-control input-lg" id="nameinput" placeholder="Subject" name="contact-subject">
</div>
<div class="form-group">
<input type="email" class="form-control input-lg" id="emailinput" placeholder="Email" name="contact-email">
</div>
<div class="form-group">
<textarea class="form-control" rows="6" name="contact-message"></textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-outline-white btn-big">Submit</button>
</div>
</form>
Когда я нажимаю «Отправить», появляется сообщение «Cannot POST /contact.php». Я знаю, что это как-то связано со мной, используя Express & Bodyparser.
Server.js
var express = require('express');
var path = require('path');
var app = express();
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded());
app.use(express.static(path.join(__dirname, './client')));
app.listen(8000, function() {
console.log('cool stuff on: 8000 check if right server');
});
Я попытался удалить «app.use (bodyParser.urlencoded ())», но все равно выдает ту же ошибку.
Заменили кнопку отправки в форме на якорь и изменив действие формы на «»
<a href="contact.php" class="btn btn-outline-white btn-big">Submit</a>
он просто загружает файл contact.php при нажатии кнопки «Отправить».
Это файл PHP, к которому я пытаюсь получить доступ.
<?php
// get posted data into local variables
$EmailTo = "ENTER EMAIL";
$Subject = "Message via Portfolio";
$Name = Trim(stripslashes($_POST['contact-name']));
$EmailFrom = Trim(stripslashes($_POST['contact-email']));
$Message = Trim(stripslashes($_POST['contact-message']));
// validation
$validationOK=true;
if (Trim($EmailFrom)=="") $validationOK=false;
if (!$validationOK) {
print "<h2>There was an error. Please try to send the message again. </h2>";
exit;
}
// prepare email body text
$Body = "You've got this email from your website:";
$Body .= "\r\n";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\r\n";
$Body .= "Email: ";
$Body .= $EmailFrom;
$Body .= "\r\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\r\n";
// send email
$success = mail( $EmailTo, $Subject, $Body );
//redirect to success page
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=index.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=index.html\">";
}
?>
Есть ли способ сделать это вместо использования app.post & переписать весь php в javascript? , Спасибо.
Вы можете сделать следующее, чтобы запустить php (убедитесь, что у вас есть сервер, поддерживающий PHP).
Server.js
создать каталог под названием php
contact.php
в php
каталогServer.js
установить директорию php как статическую app.use(express.static(__dirname + 'php'));
Надеюсь это поможет.
Но пока вы находитесь на узле, используйте экспресс для обработки данных формы с помощью route.post.
Других решений пока нет …