我有一个表格,我想使用帖子将输入表格的详细信息发送到uri。我只是不确定该怎么做。
我会:
编号: 拨打:
我想生成http://domian.co.nz/page.php?login=xxxx&password=xxxx&number=12345&call678910等
我将有登录和pw预设,但我如何将表格中的数据传递给动作?
这是一个我想出的概念,但仍然不是100%:
Code is here因为它不喜欢堆栈系统
答案 0 :(得分:1)
您的URI仅适用于GET请求。
发布请求不会将参数放在URI中,而是放在请求正文中。
服务器期望POST请求的主体采用多部分/表单数据格式,如http://www.w3.org/TR/html401/interact/forms.html#form-data-set
中所定义最简单的方法是使用表单并让HTML在multipart中发送元素。
通常你会让用户填写两个字段的登录名和密码才能登录:
<FORM METHOD=POST ACTION="yoururl.php">
<input type=text name=login>
<input type=password name=password>
<input type=submit value="login">
</FORM>
用户只需单击“登录”按钮即可发送请求。
但如果您不希望字段显示在您的页面中,您可以使用隐藏的输入:
<FORM METHOD=POST ACTION="yoururl.php">
<input type=hidden name=login>
<input type=hidden name=password>
</FORM>
假设你正在使用javascript,你可以这样做:
var form = document.forms[0];
form.login = "mylogin";
form.password = "mypassword";
form.submit();
答案 1 :(得分:1)
不要混淆POST请求和GET请求。
假设我们有:
inputOne = valueOne inputTwo = valueTwo inputThree = valueThree
在GET请求中,您应该做的就是在所需的URI上传递这些:
协议://域/页面?inputOne=valueOne&inputTwo=valueTwo&inputThree=valueThree
在GET中,所有参数都通过URI传递得更好我会说但是在POST中,参数通过HTTP请求传播。像这样的东西:
POST /mysite/page HTTP/1.1 Host: localhost:80 Connection: keep-alive Content-Length: 416 Cache-Control: max-age=0 Origin: http://localhost:80 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Referer: http://localhost:8080/mysite/signup/form.html Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8,hr;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 inputOne:valueOne inputTwo:valueTwo inputThree:valueThree
现在取决于你的情况:
如果您在客户端:
获取:强>
发表:强>
如果您在服务器端:
获取:强>
发表:强>
旁注:还有其他选项,但这些是最常见的选项。
答案 2 :(得分:1)
以下是电子邮件表单的示例!
表格:
<form method="post" action="my.php">
<input name="vv[Name]" class="textfield" type="text" />
<input name="vv[Email]" class="textfield" type="text" />
<input name="Reset" value="Reset" class="input" type="reset" />
<input name="Submit" value="Submit" class="input" type="submit" />
my.php
<?
$to = mail@domain.com";
$subject = "Contact form ";
$from = $_POST['vv']['Email'];
$valid=1;
$message ='';
foreach ($_POST['vv'] as $k=>$v){
if (trim($v)=='')$valid=0;
$k = str_replace('_',' ',$k);
$message .="$k : $v<br>";
}
$message .="<hr />IP: {$_SERVER['REMOTE_ADDR']}";
function sndmail($from,$to,$subject,$message){
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From:".$from ."\r\n";
mail($to, $subject, $message, $headers);
}
if ($valid=='1') {
sndmail($from,$to,$subject,$message);
header( 'Location: correct.html' ) ;
}
else header( 'Location: error.html' ) ;
?>
希望这会对你有所帮助
[编辑]现在我仔细阅读了这个问题,看到我的答案不适合你的问题。对此抱歉!
答案 3 :(得分:0)
要在提交时将表单字段放入网址,您需要使用“GET”作为表单method
,而不是POST
。
虽然在您的示例中您传递了密码。我不认为在URL中显示它是个好主意。
答案 4 :(得分:0)
除了Dystroy的答案,这里还有一种通过javascript动态创建表单来动态发布数据的动态方法:
纯javascript:
var dynForm = document.createElement('form');
dynForm.setAttribute('method','POST');
dynForm.setAttribute('action','');
dynForm.setAttribute('id','dynForm');
dynForm.innerHTML = '';
dynForm.innerHTML += '<input type="hidden" name="login" value="xxxx" />';
dynForm.innerHTML += '<input type="hidden" name="password" value="xxxx" />';
dynForm.innerHTML += '<input type="hidden" name="number" value="12345" />';
dynForm.innerHTML += '<input type="hidden" name="call" value="678910" />';
document.body.appendChild(dynForm);
document.getElementById('dynForm').submit();
的 jQuery的:强> 的
$("body").append('<form id="dynForm" action="" method="POST">');
$("#dynForm").append('<input type="hidden" name="login" value="xxxx" />');
$("#dynForm").append('<input type="hidden" name="password" value="xxxx" />');
$("#dynForm").append('<input type="hidden" name="number" value="12345" />');
$("#dynForm").append('<input type="hidden" name="call" value="678910" />');
$("body").append('</form>');
$("#dynForm").submit();
<小时/> 这是使用AJAX进行POST的技术:
纯javascript:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","Desired_URI",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send("login=xxxx&password=xxxx&number=12345&call=678910");
的 jQuery的:强> 的
$.post({
url: 'Desired_URI',
data: {
login:'xxxx',
password:'xxxx',
number:'12345',
call:'78910'
}
});
答案 5 :(得分:0)
你去(基于你的要点):
<?php
$login = '1236567';
$password = '10152930';
$officeNumber = array('0212177899','027899899','09111');
?>
<html>
<head>
<script type="text/javascript">
//I assume that the first entry of $officeNumber is the default number
//I'm saving base URL for further uses
var baseActionURI = "https://live.domain.co.nz/call.php?login=<?php echo $login; ?>&password=<?php echo $password; ?>";
function changeAction()
{
var oForm = document.forms[0];
oForm.setAttribute('action',baseActionURI + "&aparty=" + oForm.elements["officeNumbers"].value + "&bparty=" + oForm.elements["officeNumbers"].value)
}
</script>
</head>
<body>
<form onsubmit="" method="POST" action="https://live.domain.co.nz/call.php?login=<?php echo $login; ?>&password=<?php echo $password; ?>&aparty=<?php echo $officeNumber[0]; ?>phone&bparty=<?php echo $officeNumber[0];?>">
<label for="officeNumbers">Office Number:</label>
<select onchange="javascript:changeAction()" name="officeNumbers" id="officeNumbers">
<?php
foreach($officeNumber as $number)
{
echo '<option value="'.$number.'">'.$number.'</option>';
}
echo '</select>';
?>
<label for="callTo">Call:</label>
<input type="text" name="callTo" id="callTo" />
<input type="submit" value="Call" />
</form>
</body>
</html>