根据表单值创建URI

时间:2012-06-11 06:19:25

标签: php html forms post

我有一个表格,我想使用帖子将输入表格的详细信息发送到uri。我只是不确定该怎么做。

我会:

编号: 拨打:

我想生成http://domian.co.nz/page.php?login=xxxx&password=xxxx&number=12345&call678910

我将有登录和pw预设,但我如何将表格中的数据传递给动作?

这是一个我想出的概念,但仍然不是100%:

  • 下拉列表不会将数据发布到uri
  • 我如何发布通话数据?

Code is here因为它不喜欢堆栈系统

6 个答案:

答案 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

现在取决于你的情况:

如果您在客户端:

获取:

  • 您可以使用参数
  • 将用户重定向到适当的URI
  • 您可以使用GET方法向所需的URI发送AJAX请求
  • 您可以使用GET方法属性生成动态表单,并通过javascript
  • 提交

发表:

  • 您可以使用POST方法将AJAX请求发送到所需的URI
  • 您可以使用POST方法属性生成动态表单,并通过javascript
  • 提交

如果您在服务器端:

获取:

  • 您可以使用HTTP标头
  • 将用户重定向到具有参数的相应URI

发表:

  • 您可以手动构建HTTP请求
  • 您可以使用cURL

旁注:还有其他选项,但这些是最常见的选项。

答案 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>