我有一份很长的表格要提交。我需要将此更改为多页/多步骤表单,覆盖多页。
我将添加一个稍微干净的版本,它是定制的,因此没有源代码。DOWNLOAD 第189行I添加了相关备注
这个插件现在只是1页上的一个长表单。我想把它分成多页。因此,结果是一个人看到第一页,比如说10个问题(广播框),回答完这些问题后,他会进入下一页,再看10个,等等,我总共需要4页。很简单,我只是不知道它是如何在WP做的。
<?php
$wprr_strings = array( \'error\' => \'\', );
function wprr_check_input() {
if ( ! ( isset( $_POST[\'wpcf_stage\'] ) ) ) {
return false;
} // Shortcircuit.
global $wprr_strings;
$ok = true;
if ( empty( $_POST[\'Q1\'] ) or empty( $_POST[\'Q2\'] ) or empty( $_POST[\'Q3\'] )
or empty( $_POST[\'Q4\'] ) or empty( $_POST[\'Q5\'] ) or empty( $_POST[\'Q6\'] ) or empty( $_POST[\'Q7\'] ) or empty( $_POST[\'Q8\'] )
or empty( $_POST[\'Q9\'] ) or empty( $_POST[\'Q10\'] ) or empty( $_POST[\'Q11\'] ) or empty( $_POST[\'Q12\'] ) or empty( $_POST[\'Q13\'] )
or empty( $_POST[\'Q14\'] ) or empty( $_POST[\'Q15\'] ) or empty( $_POST[\'Q16\'] ) or empty( $_POST[\'Q17\'] ) or empty( $_POST[\'Q18\'] )
or empty( $_POST[\'Q19\'] ) or empty( $_POST[\'Q20\'] ) or empty( $_POST[\'Q21\'] ) or empty( $_POST[\'Q22\'] ) or empty( $_POST[\'Q23\'] )
or empty( $_POST[\'Q24\'] ) or empty( $_POST[\'Q25\'] ) or empty( $_POST[\'Q26\'] ) or empty( $_POST[\'Q27\'] ) or empty( $_POST[\'Q28\'] )
or empty( $_POST[\'Q29\'] ) or empty( $_POST[\'Q30\'] ) or empty( $_POST[\'Q31\'] ) or empty( $_POST[\'Q32\'] )
) {
$ok = false;
$reason = \'empty\';
}
if ( $ok == true ) {
return true;
} else {
if ( $reason == \'empty\' ) {
$wprr_strings[\'error\'] = \'<span style="color: #ff0000;"><b>Ошибка!</b> Заполнены не все поля формы.</span>\';
}
return false;
}
}
function wprr_callback( $content ) {
global $wprr_strings;
global $charset;
global $wpdb;
/* Run the input check. */
if ( wprr_check_input() ) // If the input check returns true (ie. there has been a submission & input is ok)
{
$test_result = array( \'safety\' => 0, \'agressiveness\' => 0, \'courtesy\' => 0, \'rage\' => 0, );
$test_result[\'safety\'] = ( $_POST[\'Q1\'] + $_POST[\'Q4\'] + $_POST[\'Q11\'] + $_POST[\'Q15\'] + $_POST[\'Q17\'] + $_POST[\'Q25\'] +
$_POST[\'Q26\'] + $_POST[\'Q29\'] ) * 2.5;
$test_result[\'agressiveness\'] = ( $_POST[\'Q2\'] + $_POST[\'Q6\'] + $_POST[\'Q8\'] + $_POST[\'Q10\'] + $_POST[\'Q14\'] + $_POST[\'Q27\'] +
$_POST[\'Q28\'] + $_POST[\'Q31\'] ) * 2.5;
$test_result[\'courtesy\'] = ( $_POST[\'Q3\'] + $_POST[\'Q5\'] + $_POST[\'Q12\'] + $_POST[\'Q13\'] + $_POST[\'Q21\'] + $_POST[\'Q23\'] +
$_POST[\'Q24\'] + $_POST[\'Q32\'] ) * 2.5;
$test_result[\'rage\'] = ( $_POST[\'Q7\'] + $_POST[\'Q9\'] + $_POST[\'Q16\'] + $_POST[\'Q18\'] + $_POST[\'Q19\'] + $_POST[\'Q20\'] +
$_POST[\'Q22\'] + $_POST[\'Q30\'] ) * 2.5;
// Оценка категорий
// БЕЗОПАСНОСТЬ
if ( $test_result[\'safety\'] < 37.5 ) {
$safe_msg = "С Вами опасно.";
} elseif ( ( $test_result[\'safety\'] >= 37.5 ) and ( $test_result[\'safety\'] < 62.5 ) ) {
$safe_msg = "С Вами не очень безопасно.";
} elseif ( ( $test_result[\'safety\'] >= 62.5 ) and ( $test_result[\'safety\'] < 82.5 ) ) {
$safe_msg = "Вы безопасный водитель.";
} else {
$safe_msg = "С Вами безопасно.";
}
// More results (does not matter)
// Добавляем данные в таблицу test_rr
$sql_ins = \'INSERT INTO test_rr (sex, age, brand, color safe, agres, court, rage) VALUES (\' . $_POST[\'sex\'] . \',\' . $_POST[\'age\'] .
\',\' . $_POST[\'brand\'] . \',\' . $_POST[\'color\'] . \',\' . $test_result[\'safety\'] . \',\' . $test_result[\'agressiveness\'] . \',\' . $test_result[\'courtesy\'] . \',\' . $test_result[\'rage\'] . \')\';
//echo $sql_ins;
$wpdb->query( $sql_ins );
// Подсчет средних значений
$avgs = array();
$avgs = $wpdb->get_row( "SELECT AVG(safe), AVG(agres), AVG(court), AVG(rage) FROM test_rr;", ARRAY_N );
$success_msg = "BLA BLA"
$results = \'<p class="successmsg">\' . $success_msg . \'</p>\';
return $results;
} else // This is the FORM that needs to be split into a few pages
{
$form = \'<p>bla bla.</p>
<form id="contactform" action="\' . get_permalink() . \'" method="post">
\' . $wprr_strings[\'error\'] . \'
<fieldset>
<h3>bla bla</h3>
<br/>
===>>> FORM INPUTS, SELECTS, RADIOS ETC... (few dozen of those) Split the like 10 per page <<<======
</fieldset>
</form>
\';
return $form;
}
}
add_shortcode( \'test_rr_form\', \'wprr_callback\' );
最合适的回答,由SO网友:Tom J Nowell 整理而成
您的问题可以使用标准PHP来完成,WordPress没有什么特殊的功能(假设这是一个前端表单)。
假设您有一个包含6个输入的表单。您希望它们显示在3页上。允许使用此伪代码:
if form submitted
do checks and handle form
else
display input 1
display input 2
display input 3
display input 4
display input 5
display input 6
这就是你现在拥有的。
您需要做的是:
将当前页面上不存在的输入输出为“隐藏”类型,以便在页面之间记住这些输入。每次用户提交表单时,使用页面计数器维护隐藏输入,增加计数器并显示下一页。当计数器高于上一页时,请完整处理表单,以便:
if form not submitted
this is the first page
display input 1
display input 2
display hidden input 3
display hidden input 4
display hidden input 5
display hidden input 6
display hidden count with value 0
else
if counter == 1
display hidden input 1
display hiddeninput 2
display input 3
display input 4
display hidden input 5
display hidden input 6
display hidden input counter+1
else if counter == 2
display hidden input 1
display hidden input 2
display hidden input 3
display hidden input 4
display input 5
display input 6
display hidden input counter+1
else
check and process form
当然,如果您有很多字段,并且有一个提交按钮可以转到下一页,则需要进行一些重构以删除重复项