我有一个表格,我想使用 post 将输入到表格中的详细信息发送到 uri 中。我只是不知道该怎么做。
我会有:
号码: 致电:
我想生成http://domian.co.nz/page.php?login=xxxx&password=xxxx&number=12345&call678910等
我将预设登录名和密码,但是如何将表单中的数据传递到操作中?
这是我提出的一个概念想法,但仍然不是 100%:
- 下拉菜单不会将数据发布到 uri
- 我将如何发布通话数据?
代码在这里,因为它不喜欢堆栈系统
您的 URI 仅适用于 GET 请求。
发布请求不会将参数放在 URI 中,而是放在请求的正文中。
服务器希望您的 POST 请求的正文采用http://www.w3.org/TR/html401/interact/forms.html#form-data-set中定义的 multipart/form-data 格式
最简单的方法是使用表单,让 HTML 多部分发送元素。
通常你会让用户填写登录名和密码这两个字段以便登录:
<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();
不要混淆 POST 请求和 GET 请求。
假设我们有:
inputOne = valueOne 输入二 = 值二 输入三 = 值三
在 GET 请求中,您应该做的就是在所需的 URI 上传递这些:
协议://域/页面?inputOne=valueOne&inputTwo=valueTwo&inputThree=valueThree
在 GET 中,我会说所有参数都通过 URI 传输更好,但在 POST 中,参数通过 HTTP 请求传输。像这样的东西:
POST /mysite/page HTTP/1.1 主机:本地主机:80 连接:保持活动 内容长度:416 缓存控制:max-age=0 来源:http://localhost:80 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5 内容类型:application/x-www-form-urlencoded 接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 参考:http://localhost:8080/mysite/signup/form.html 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8,hr;q=0.6 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3 输入一:值一 输入二:值二 输入三:值三
现在取决于你的情况:
如果您在客户端:
得到:
邮政:
如果您在服务器端:
得到:
邮政:
旁注:还有其他选项,但这些是最常见的选项。
这是电子邮件表单的示例!
表格:
<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" />
我的.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' ) ;
?>
希望对你有帮助
[编辑] 现在我更仔细地阅读了这个问题,发现我的答案不太适合你的问题。为此事道歉!
要在提交时将表单字段放入 URL,您需要使用 'GET' 作为表单method,而不是POST.
尽管在您的示例中您正在传递密码。我认为在 URL 中显示它不是一个好主意。
除了 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();
纯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'
}
});
给你(根据你的要点):
<?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>