PHP无法从表单中获取post数据

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>

我想提交一个表单,让用户在api中填写他们的信息。我已经创建了一个wordpress插件来实现它。我目前面临的问题是,当我调用
$\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
在页面加载时调用函数。调用l
validate()并不重要
在表单提交上。遵循您的指南后,为什么提交注册中的预标记没有触发?您是否检查了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()">