PHP echo $ _SERVER ['PHP_SELF']基于不使用其他变量的形式

时间:2017-08-30 12:46:34

标签: php forms

我已经参考了这个question但不幸的是,解决方案在我的情况下不适用于注册表格。

我的用户注册分两步进行。

第1步: 首先我们收到用户电子邮件,然后通过发送注册链接进行验证。在链接上,我们包括联盟代码,电子邮件和&电子邮件以散列形式,电子邮件发送时间等 这部分完美无缺。

第2步: 在注册链接页面上,所有额外的variables全部表单加载。首先,所有变量。 我们使用以下代码片段检查注册链接是否有效,有效期等。

if(isset($_GET['key'],$_GET['reset'],$_GET['keyid'],$_GET['af']))

然后当一切都好的时候我们会转到主注册表单,否则,表单不会加载无效链接。

使用LasVegasCoder编码,这是注册链接:(与我原来没有太大区别)

  

http://localhost/clientphp/register.php?key=tester@gmail.com&reset=2fbb7857ace656c855dd9ed9cdc79631998231fe73251df09063f307c21084c65905ca4172b7e7cf4108bbbca41c7f4b51690498fb622a8a54a5e5cad3d25572&keyid=1504104584&af=1

以下是表单代码:

<form method="post" class="form-horizontal" name="registration_form" 
      action="<?php echo esc_url($_SERVER['PHP_SELF'].'?
      key="'.$email."&reset=".$email_hash."&keyid=".$email_time."&af=".$af_code)?>">
      Somecode
</form>

使用当前表单编码,它显示错误。

  

错误403.禁止访问。

表单包含用户名,PIN,国家,密码和&amp;确认密码字段。如果用户输入错误的详细信息,我会从服务器端检查其参数,然后在同一页面上显示错误。否则注册成功移至其他页面。

更新 整个过程涉及2个文件。

  • register.php
  • register.inc.php(这是检查的文件 如果全部通过然后重定向到服务器端的所有内容 register-success.php page)

如果用户提供了任何错误的输入,它会显示在register.php页面上,填写表格。

    if (!empty($error_msg)) {
       echo $error_msg;
    }

这个$ error_msg来自register.inc.php文件。希望它现在能清除一切。

3 个答案:

答案 0 :(得分:1)

嗯,你在表单的URL和方法POST中传递了GET参数。但是你需要选择一种方法,你不能同时使用GET和POST 。因此,最好的方法是使用POST中传递的所有GET值的隐藏输入。

你可以省略动作参数,它会在同一页面上发布表格。

例如:

<form method="post" class="form-horizontal" name="registration_form">
    <input type="hidden" name="key" value="<?php echo $email;?>">
    <input type="hidden" name="reset" value="<?php echo $email_hash;?>">
    <input type="hidden" name="keyid" value="<?php echo $email_time;?>">
    <input type="hidden" name="af" value="<?php echo $af_code;?>">
    Somecode
</form>

答案 1 :(得分:1)

使用PHP_SELF是一个坏主意!

但如果坚持在开发中使用它,您可以连接您的链接并将其作为查询参数附加,如下所示:

 $link  = "$email";
 $link .= "&reset=$email_hash";
 $link .= "&keyid=$email_time";
 $link .= "&af=$af_code";

 <form method="get" class="form-horizontal" name="registration_form" 
  action="<?php echo esc_url($_SERVER['PHP_SELF'])?key=$link; ?>">
    Somecode
 </form>

首选方法:

 $link  = "$email";
 $link .= "&reset=$email_hash";
 $link .= "&keyid=$email_time";
 $link .= "&af=$af_code";

 <form method="get" class="form-horizontal" name="registration_form" 
  action="process.php?key=$link" >

    other codes goes here
 </form>

根据我们的讨论,请在下面找到电子邮件验证发送代码;

 $link  = "$email";
 $link .= "&reset=$email_hash";
 $link .= "&keyid=$email_time";
 $link .= "&af=$af_code";


    $activation = "http://your-domain.com/activate.php?key=$link";

    // send email to our new client;
    $mailTo   = $email;
    $mailFrom   = "noreply@your-domain.com";
    $subject    = "Welcome to My Affiliate Service";
    $headers    = "From: $mailFrom";
    $mailBody   = "Please activate your account to start banking revenue! 
                    <a href=' . $activation . '>ACTIVAT NOW</a>";

    if( @mail( $mailTo, $subject, $mailBody, $headers ) )
    {
        //mail sent
        // do something
    }
    else{
        // mail not sent..
        // check why.
    } 

祝你好运

答案 2 :(得分:1)

如果你想留在同一页面,你不必输入。只需从?开始,您就可以使用这些参数提交到当前页面:

$formAction = '?key="'.$email.'&reset='.$email_hash.'&keyid='.$email_time.'&af='.$af_code;

<form method="post" class="form-horizontal" name="registration_form" 
      action="<?=formAction?>">
      <!-- FORM HERE -->
</form>

无论如何,使用PHP_SELF是一个坏主意。