我有联系表格,使用Javascript和PHP。
我的问题是javascript没有将其变量传递给PHP脚本。我发现了以下内容:
变量确实在javascript中设置,因为它通过javascript中的变量检查并使用显示变量的警报。
当它转到PHP脚本时,变量不再存在。我试图在PHP脚本中注释掉检查,然后成功发送邮件,但除了PHP脚本中的静态内容之外,邮件是空的。
我尝试了各种不同的方法,包括直接从http.send()函数传递变量。
以下是相关代码(这些是Web服务器上的3个不同文件):
HTML:
div class="contact_form">
<h4>Get in touch</h4>
<form method="post">
<input type="text" name="Name" id="name" value="Name" onfocus="this.value = this.value=='Name'?'':this.value;" onblur="this.value = this.value==''?'Name':this.value;" />
<input type="text" name="Email" id="email" value="Email" onfocus="this.value = this.value=='Email'?'':this.value;" onblur="this.value = this.value==''?'Email':this.value;" />
<input type="text" value="Subject (Hosting, Requests, Appeal, Report, etc.)" id="subject" onfocus="this.value = this.value=='Subject (Hosting, Requests, Appeal, Report, etc.)'?'':this.value;" onblur="this.value = this.value==''?'Subject (Hosting, Requests, Appeal, Report, etc.)':this.value;" />
<textarea name="Message" id="body" onfocus="this.value = this.value=='Message'?'':this.value;" onblur="this.value = this.value==''?'Message':this.value;">Message</textarea>
<input type="submit" name="submit" id="submit" value="send" class="submit-button" onClick="return check_values();" />
</form>
<div id="confirmation" style="display:none; position: relative; z-index: 600; font-family: 'Open Sans', sans-serif; font-weight: 300; font-size: 16px; color: #4e4e4e;"></div>
</div> <!-- end .contact_form -->
使用Javascript:
var http = createRequestObject();
var areal = Math.random() + "";
var real = areal.substring(2,6);
function createRequestObject() {
var xmlhttp;
try { xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); }
catch(e) {
try { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch(f) { xmlhttp=null; }
}
if(!xmlhttp&&typeof XMLHttpRequest!="undefined") {
xmlhttp=new XMLHttpRequest();
}
return xmlhttp;
}
function sendRequest() {
var rnd = Math.random();
var name = escape(document.getElementById("name").value);
var email = escape(document.getElementById("email").value);
var subject = escape(document.getElementById("subject").value);
var body = escape(document.getElementById("body").value);
try{
http.open('POST','pform.php');
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.send('name='+name+'&email='+email+'&subject='+subject+'&body='+body+'&rnd='+rnd);
http.onreadystatechange = handleResponse;
}
catch(e){}
finally{}
}
function check_values() {
var valid = '';
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;
var subject = document.getElementById("subject").value;
var body = document.getElementById("body").value;
if(trim(name) == "" ||
trim(email) == "" ||
trim(subject) == "" ||
trim(body) == "") {
alert("Please complete all fields");
} else {
if(isEmail(email)) {
document.getElementById("submit").disabled=true;
document.getElementById("submit").value='Please Wait..';
sendRequest();
} else {
alert("Email appears to be invalid\nPlease check and try again");
document.getElementById("email").focus();
document.getElementById("email").select();
}
}
}
function handleResponse() {
try{
if((http.readyState == 4)&&(http.status == 200)){
var response = http.responseText;
document.getElementById("confirmation").innerHTML = response;
document.getElementById("confirmation").style.display ="";
}
}
catch(e){}
finally{}
}
function isUndefined(a) {
return typeof a == 'undefined';
}
function trim(a) {
return a.replace(/^s*(S*(s+S+)*)s*$/, "$1");
}
function isEmail(a) {
return (a.indexOf(".") > 0) && (a.indexOf("@") > 0);
}
PHP:
<?php
error_reporting(0);
$page_title = "Contact Us Form";
$email_it_to = "email@example.com";
$error_message = "Please complete the form first";
$confirmation = "Thank you, your message has been successfully sent.";
if(!isset($rnd) || !isset($name) || !isset($email) || !isset($subject) || !isset($body)) {
echo $error_message;
die();
}
$email_from = $email;
$email_subject = "Contact Form: ".stripslashes($subject);
$email_message = "Please find below a message submitted by '".stripslashes($name);
$email_message .="' on ".date("d/m/Y")." at ".date("H:i")."\n\n";
$email_message .= stripslashes($body);
$headers = 'From: '.$email_from."\r\n" .
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($email_it_to, $email_subject, $email_message, $headers);
echo "<b>$confirmation</b>";
die();
?>
答案 0 :(得分:1)
您没有使用$_POST
变量来抓取任何内容 - 您正在使用未设置的变量。
更改所有通话以使用$_POST
:
if(!isset($rnd) || !isset($name) || !isset($email) || !isset($subject) || !isset($body))
更改为:
if(!isset($_POST['rnd']) || !isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['body']))
你需要在使用未定义变量的任何地方进行更改。
或者,您可以这样做:
$rnd = mysql_real_escape_string($_POST['rnd']);
$name = mysql_real_escape_string($_POST['name']);
... and so on
答案 1 :(得分:0)
试试这个:
try{
http.open('POST','pform.php?name='+name+'&email='+email+'&subject='+subject+'&body='+body+'&rnd='+rnd);
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.onreadystatechange = handleResponse;
}
答案 2 :(得分:0)
使用$ _POST访问POST变量:
if (!isset($_POST["my_post_variable"]) {
die('No post arguments passed.');
}
答案 3 :(得分:0)
因为Javascript是客户端脚本语言,PHP是服务器端。所以不能通过PHP直接访问javascript的变量。
您可以访问HTML表单发布的值
<?php
$var_name = $_POST['name_of_the_variable_to_access'];
//then access these variables in your code.
?>
您也可以在php脚本的开头尝试这一行代码,但是您需要确保不在PHP代码中重新分配变量值。
<?
extract($_POST);
//your code here.
?>
使用上面的代码,您将获得变量中的HTML页面值 - $ Name,$ Email,$ Message。
而且,你需要给Message字段命名。以小写字母编写名称是一个好习惯