PHP无法从表单中获取post数据
我想提交一个表单,让用户在api中填写他们的信息。我已经创建了一个wordpress插件来实现它。我目前面临的问题是,当我调用PHP无法从表单中获取post数据,php,html,css,wordpress,Php,Html,Css,Wordpress,我想提交一个表单,让用户在api中填写他们的信息。我已经创建了一个wordpress插件来实现它。我目前面临的问题是,当我调用$\u POST[“registerId”]或$\u POST[“password”]时,它是空值 以下代码都属于同一页。此函数由表单组成,它将调用javascript进行验证 function registration_form_layout() { ?> <h2>Registration Form</h2>
$\u POST[“registerId”]或$\u POST[“password”]
时,它是空值
以下代码都属于同一页。此函数由表单组成,它将调用javascript进行验证
function registration_form_layout() {
?>
<h2>Registration Form</h2>
<script type="text/javascript">
function validate() {
// Prevent trigger and initialize error
event.preventDefault()
var error=""
var isError = false
// Retrieve value of the uid, password and confirm password field
var uid = document.getElementById("form-uid").value;
var password = document.getElementById("form-password").value;
var confirmPassword = document.getElementById("form-confirm-password").value;
// Field declaration
var uidField = "form-uid"
var uidErrorField = "error-message-uid"
var passwordField = "form-password"
var passwordErrorField = "error-message-password"
var confirmPasswordField = "form-confirm-password"
var confirmPasswordErrorField = "error-message-confirm-password"
var firstUIDCharacter = uid.charAt(0)
initializeField();
if ( uid === "" || uid.length < 6 || uid.length > 15 || (firstUIDCharacter >= '0' && firstUIDCharacter <= '9') ) {
error = "Please enter correct UID"
generateErrorField(uidField, uidErrorField, error)
isError = true
}
if ( uid.match(/\d{3,}/) ){
error="UID last three characters cannot be all numbers"
generateErrorField(uidField, uidErrorField, error)
isError = true
}
if ( password === "" || password.length < 6 ) {
error = "Please enter correct password"
generateErrorField(passwordField, passwordErrorField, error)
isError = true
}
if ( confirmPassword === "" ) {
error = "Please enter correct password"
generateErrorField(confirmPasswordField, confirmPasswordErrorField, error)
isError = true
}
if ( password !== confirmPassword ) {
error = "The two inputs must be consistent"
generateErrorField(passwordField, passwordErrorField, error)
generateErrorField(confirmPasswordField, confirmPasswordErrorField, error)
isError = true
}
if ( password.length > 5 && ( password.match(/^-?\d+$/) || password.search(/[a-zA-Z]/) === -1 ) ) {
error = "Password must contain both letters and numbers"
generateErrorField(passwordField, passwordErrorField, error)
generateErrorField(confirmPasswordField, confirmPasswordErrorField, error)
isError = true
}
if (isError) {
return false
} else {
var result = "<?php echo submit_registration(); ?>"
console.log(result)
}
}
</script>
<p id="php_code"></p>
<form method="POST" id="registration-form" onsubmit="return validate()">
<label>UID</label>
<br/>
<input type="text" name="registerId" id="form-uid" class="form-control" placeholder="Please enter your login ID"/>
<p id="error-message-uid" class="error"></p>
<label>Password</label>
<br/>
<input type="password" name="password" id="form-password" class="form-control" placeholder="Please set the new password"/>
<p id="error-message-password" class="error"></p>
<label>Confirm Password</label>
<br/>
<input type="password" name="confirm_password" id="form-confirm-password" class="form-control" placeholder="Please confirm the new password"/>
<p id="error-message-confirm-password" class="error"></p>
<br/>
<br/>
<input type="submit" name="form_submit" id="submit-registration" class="form-control" value="Next"/>
<br/>
</form>
<?php
}
add_shortcode('register_form','registration_form_layout');
功能注册\表单\布局(){
?>
登记表
函数验证(){
//防止触发和初始化错误
event.preventDefault()
var error=“”
var-isError=false
//检索uid、密码和确认密码字段的值
var uid=document.getElementById(“表单uid”).value;
var password=document.getElementById(“表单密码”).value;
var confirmPassword=document.getElementById(“表单确认密码”).value;
//字段声明
var uidField=“表单uid”
var uidErrorField=“错误消息uid”
var passwordField=“表单密码”
var passwordErrorField=“错误消息密码”
var confirmPasswordField=“表单确认密码”
var confirmPasswordErrorField=“错误消息确认密码”
var firstUIDCharacter=uid.charAt(0)
初始化字段();
如果(uid==“”| | | uid.length<6 | | | uid.length>15 | | |(firstUIDCharacter>='0'&&firstUIDCharacter 5&(password.match(/^-?\d+$/)| password.search(/[a-zA-Z]/)==-1)){
error=“密码必须同时包含字母和数字”
generateErrorField(passwordField、passwordErrorField、error)
generateErrorField(confirmPasswordField,confirmPasswordErrorField,error)
isError=true
}
如果(isError){
返回错误
}否则{
var result=“”
console.log(结果)
}
}
液体
密码
确认密码
正如在评论中提到的,不能像这样混合使用JavaScript和PHP。必须完全重写结构
首先,在插件目录下创建一个名为submit\u registration.PHP
的PHP文件,内容如下:
<form action="<?php echo plugins_url( 'submit_registration.php', __FILE__ ); ?>" method="post" onsubmit="return validate()">
然后,在注册表中,将
标记更改为以下内容:
问题在于,您在页面加载时调用的是
,而不是表单提交时调用的。相反,使用来调用提交注册()
。您不能像这样混合使用JavaScript和PHP。重复提交注册()
函数没有意义。@Raptor我可以知道正确的方法吗?@kmoser但我调用validate()形式上submit@kraken
在页面加载时调用函数。调用lvalidate()并不重要
在表单提交上。遵循您的指南后,为什么提交注册中的预标记没有触发?您是否检查了curl调用是否成功执行?是否存在任何服务器错误?您只定义了$error
、$errno
和$httpcode
但从未使用过它。此外,您是否在PHP中启用了错误报告?是的url调用没有给出任何响应。没有服务器错误。我已经使用了它。在pre标记上有一些单词,如UID:。如果执行它,我相信这个pre标记也会出现。我也会在curl init之前回显“executing”,但在您检查“API”之前它不会出现代码或服务器日志。如果没有响应,则一定是出了问题。那里的服务器测试了其工作状态,并使用postman进行响应。它只是没有执行submit_registration.php文件
<?php
// TODO: Add POST isset check and data cleansing
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://localhost/testing/register");
curl_setopt($ch, CURLOPT_POST, 1);
$payload = json_encode(
array(
"Password"=> $_POST["password"],
"RegId"=> $_POST["registerId"],
)
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload );
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
$error = curl_error($ch);
$errno = curl_errno($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$test = json_decode($server_output, JSON_PRETTY_PRINT);
echo '<pre>UID: '.$_POST["registerId"].'Password: '.$_POST["password"].'Server Output:'.status_message($test['Status']);
curl_close ($ch);
?>
<form action="<?php echo plugins_url( 'submit_registration.php', __FILE__ ); ?>" method="post" onsubmit="return validate()">