使用PHP自动提交表单

时间:2012-06-21 04:43:00

标签: php forms submit

我目前有这个:

function submit()
{
    document.getElementById("lostpasswordform").click(); // Simulates button click
    document.lostpasswordform.submit(); // Submits the form without the button
}

<body onload="submit()">

    <form name="lostpasswordform" id="lostpasswordform" action="/" method="post">
        <input type="hidden" name="user_login" id="user_login" class="input" value="<?php echo ($user_login); ?>" />
    </form>

</body>

它适用于PC,但出于某种原因,javascript不是从iPhone执行的,所以我想知道是否有一种方法可以使用PHP而不是JS来自动提交表单?

由于

5 个答案:

答案 0 :(得分:2)

无法触发表单提交服务器端。你必须使用一种在DOM中运行的语言,就像JavaScript一样。根据你给我们的内容,我不明白为什么它不会以你现在设置的方式工作。

检查您的代码,如果它仍然不起作用,我建议在不同的背景下提出这个问题;让你的JavaScript在iPhone上运行而不是完全抛弃它的一些东西。

答案 1 :(得分:0)

正如esqew指出的那样,您无法从服务器执行客户端操作。您的选择是重做您的功能,因此它不需要自动提交(也许您可以使用GET变量而不是发布)或找到适合iPhone的解决方法。

要获得解决方法,.click()功能在iPhone上无效。您可以尝试使用tap或更大的touch handler function来解决此问题之一的解决方案。

答案 2 :(得分:0)

不,PHP无法做到这一点,但问题在于iPhone处理点击事件的方式。这是background info and a workaround。看起来你只需要一个空的onclick函数来触发它,所以:

// untested
var f = document.getElementById('lostpasswordform');
f.onclick = function () { };
document.lostpasswordform.submit();

您可能想要考虑用户的体验 - 为什么在表单内点击会自动提交表单?提交按钮出了什么问题?

答案 3 :(得分:0)

这是来自像我这样的PHP程序员的最小javascript答案:

/** This is the script that will redraw current screen and submit to bank. */
echo '<script>'."\n" ;
echo 'function serverNotifySelected()'."\n" ;
echo '{'."\n" ;
echo '    window.open(\'\', \'BankPaymentScreen\');'."\n" ;
echo '    document.forms[\'bank_form\'].submit();'."\n" ;
echo '    document.forms[\'server_responder\'].submit();'."\n" ;
echo '}'."\n" ;
echo '</script>'."\n" ;

/** This form will be opened in a new window called BankPaymentScreen. */
echo '<form action="https://www.sandbox.bank.com/cgi-bin/webscr" name="bank_form" method="post" target="BankPaymentScreen">'."\n" ;
echo '<input type="hidden" name="cmd" value="_s-xclick">'."\n" ;
echo '<input type="hidden" name="custom" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="hosted_button_id" value="'.$single_product->hosted_button_id.'">'."\n" ;
echo '<table>'."\n" ;
echo '    <tr>'."\n";
echo '        <td><input type="hidden" name="'.$single_product->hide_name_a.'" value="'.$single_product->hide_value_a.'">Local</td>'."\n" ;
echo '    </tr>'."\n" ;
echo '    <tr>'."\n" ;
echo '        <td>'."\n" ;
echo '        <input type="hidden" name="'.$single_product->hide_name_b.'" value="'.$single_product->hide_value_b.'" />'.$single_product->short_desc.' $'.$adj_price.' USD'."\n" ;
echo '        </td>'."\n" ;
echo '    </tr>'."\n" ;
echo '</table>'."\n" ;
echo '<input type="hidden" name="currency_code" value="USD">'."\n" ;
echo '</form>'."\n" ;

/** This form will redraw the current page for approval. */
echo '<form action="ProductApprove.php" name="server_responder" method="post" target="_top">'."\n" ;
echo '<input type="hidden" name="trans" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="prod_id" value="'.$this->product_id.'">'."\n" ;
echo '</form>'."\n" ;

/** No form here just an input and a button.  onClick will handle all the forms */
echo '<input type="image" src="https://www.sandbox.bank.com/en_US/i/btn/btn_purchaseimmediateCC_LG.gif" border="0" alt="This Bank - The safer, easier way to pay!" onclick="serverNotifySelected()">'."\n" ;
echo '<img alt="" border="0" src="https://www.sandbox.bank.com/en_US/i/scr/pixel.gif" width="1" height="1">'."\n" ;

这是一个按钮的代码。该按钮将重新绘制当前页面以从购买到预批准,并打开一个新窗口,重新关注新窗口并将新的焦点窗口传递给支付提供商。

这也可以防止Chrome阻止新网页获得焦点。

答案 4 :(得分:0)

你可以这样做。

有一个例子,如何,甚至你可以使用cURL

来做到这一点
<?php

//create array of data to be posted
$post_data['firstName'] = 'Name';
$post_data['action'] = 'Register';

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

//we also need to add a question mark at the beginning of the string
$post_string = '?' . $post_string;

//we are going to need the length of the data string
$data_length = strlen($post_string);

//let's open the connection
$connection = fsockopen('www.domainname.com', 80);

//sending the data
fputs($connection, "POST  /target_url.php  HTTP/1.1\r\n");
fputs($connection, "Host:  www.domainname.com \r\n");
fputs($connection,
    "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($connection, "Content-Length: $data_length\r\n");
fputs($connection, "Connection: close\r\n\r\n");
fputs($connection, $post_string);

//closing the connection
fclose($connection);

?>