【问题标题】:Only members can submit this form php只有会员才能提交此表单 php
【发布时间】:2012-01-15 23:52:10
【问题描述】:

php 新手。我有一个仅供会员提交的表格。表单需要什么 php 代码来检查表单上的电子邮件地址是否在我的成员数据库中找到,然后可以提交表单?

如果电子邮件地址不在会员数据库中,那么我想回应“只有会员才能提交此表格”。我需要什么 php 代码以连接到表单中的数据库并进行检查,这样我就不会收到非成员提交的表单? 谢谢

【问题讨论】:

  • 深思:如何阻止未注册的人提交注册会员的电子邮件?使用电子邮件地址字段进行身份验证不是很安全。

标签: php


【解决方案1】:

在您的 php 文件的顶部,您可以执行以下操作:

 if(isset($_POST['email'])) {
    mysql_connect("hostname","username","password");
    $result = mysql_query("SELECT * FROM users WHERE email = '".mysql_real_escape_string($_POST['email'])."'");
    if($row = mysql_fetch_array($result)) {
       // found email
    } else {
       // email wasn't found
    }
  }

当然,您需要将hostnameusernamepassword 替换为正确的值,您还应该将选择查询中的usersemail 更改为您的表和字段的名称.

这是一个虚拟表格:

 <form method="POST" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
    <input type="text" name="email" />
    <input type="submit" value="Send" />
 </form>

【讨论】:

    【解决方案2】:

    你想学习Mysql query和其他mysql函数。代码基本上看起来像:

    $c = mysql_connect( ...);
    mysql_select_db( 'database', $c);
    $q = mysql_query( "SELECT COUNT(*) FROM users WHERE email = '" . 
        mysql_real_escape_string( $_POST['email'],$c) . "'");
    $row = mysql_fetch_row( $q);
    if( $row[0]){
        echo "Thanks for submitting...";
    } else {
        echo "Only members...";
    }
    

    这只是一个远非完美的简短示例,但我认为这是您开始的好地方。

    【讨论】:

      【解决方案3】:

      如果某人是注册会员,这意味着您很可能使用 $_SESSION['id_member'] 变量。

      这会将客户端可以看到的cookie名称设置为'member'...

      if (!headers_sent() && !isset($_SESSION))
      {
       session_name('member');
      }
      

      ...然后当用户进行身份验证时分配一个会话变量及其权限...

       $_SESSION['member_id'] = $mysql_row['id'];
       $_SESSION['member_status'] = $mysql_row['id'];
      

      这是一个您可能会使用或更改的状态层次结构,但它应该是一个很好的参考点...

      10 - 超级管理员(仅限您)

      9 - 管理员// 中级管理员

      8 - 助理//限制性管理员

      7 - 版主//不要将此状态授予任何混蛋

      6 - 高级会员//他们给了你钱!

      5 - 注册会员//正常账户状态

      4 - 冻结帐户//没有被禁止但做错了什么,将“解冻”

      3 - 未验证的电子邮件地址//已注册但未验证电子邮件

      2 - 未注册的访客//人类

      1 - 好机器人

      0 - 禁止

      一般先确定如何捕捉表格...

      if ($_SERVER['REQUEST_METHOD']=='GET')
      {
      
      }
      else if ($_SERVER['REQUEST_METHOD']=='POST')
      {
       if (isset($_POST['submit_button_name_value'])) {blog_post_ajax_comment();}
      }
      

      我添加了 name="value" 属性/值来提交按钮,为什么?有两个提交选项(例如预览和发布),您可能希望服务器触发一个功能或另一个,非常简单且有效的 (X)HTML。

      您应该检查变量是否为 isset(记住权限)。

      然后检查他们的用户权限是否足够,可以用一个简单的整数来表示。

      然后将 isset 和权限 if 语句包装在两件事上,一是表单,二是确保在处理表单时使用这些条件。

      我总是针对要拒绝的东西进行测试,并在数据库查询错误处理中投入一些额外的帮助...

      //function module_method_ajax_purpose()
      function blog_post_ajax_comment()
      {
       if (!isset($_SESSION['member'])) {http_report('403',__FUNCTION__,'Error: you must be signed in to do that.');}
       else if ($_SESSION['member_status']<=4) {http_report('403',__FUNCTION__,'Error: permission denied; your account has been flagged for abuse.');}
       else if (flood_control($datetime,'60')!=1) {http_report('403',__FUNCTION__,'Error: you can only post a comment once every X seconds.');}
       else if (!isset($_POST['post_form_name_1']) || !isset($_POST['post_form_name_2'])) {http_report('403',__FUNCTION__,'Error: permission denied.');}
       else
       {
        // NOW process
        $query1 = "SELECT * FROM table";
        $result1 = mysql_query($query1);
      
        if ($result1)
        {
         //successful, increment query number for further queries
        }
        else {mysql_error_report($query1,mysql_error(),__FUNCTION__);}
       }
      

      错误报告功能非常强大,可用于 HTTP、JavaScript、PHP 和 MySQL。您还可以从我关于实时日志阅读的回答中受益:jQueryUI tabs and Firefox: getBBox broken?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 2013-02-28
        • 2013-12-28
        • 1970-01-01
        相关资源
        最近更新 更多