【问题标题】:Create a user when I submit a form [duplicate]当我提交表单时创建一个用户[重复]
【发布时间】:2013-10-09 12:24:04
【问题描述】:

不幸的是,这个问题相当具体,因为我可能/可能不需要 Joomla!专家来帮我解决这个问题(希望我没有,并且具有良好 php/mysql 知识的人可以提供帮助)。

http://pastebin.com/JRhNB4EP - 我不得不将我的代码放入 pastebin,因为该文件非常大,我不想让这个页面充满代码。

所以让我解释一下表单的作用:它允许用户在选定的业务类型下创建列表,但我需要实现的是,一旦提交表单,它会在 ACL 'Registered' 下随机创建一个用户从他们那里生成一个密码。用户名将是他们提供的电子邮件。然后,此信息也会发送到提供的电子邮件。

我已经四处寻找帮助已经几天了(通常是一天中的几个小时),但由于问题非常具体,我没有遇到任何明确的问题。

任何可以为我指明正确方向的帮助/指针/参考将不胜感激!提前致谢。

【问题讨论】:

标签: javascript php html mysql joomla


【解决方案1】:

试试这个,

假设您的提交页面不是 joomla 的一部分,即在 joomla 框架之外。

第 1 步:

  Include Joomla Frame work

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$db = JFactory::getDBO();

第 2 步:

Collect your Form fields data.
//Something like $user_email ,$password etc.

第 3 步: 检查用户名是否已存在于数据库中。

             $sql ="SELECT * FROM #__users WHERE username ='$username'"; 
             $db->setQuery($sql);
     $db->query();
     if($db->getNumRows()>0){

             $mainframe->redirect("url","error msg","error");
             }
            else{
                     jimport('joomla.user.helper');
         $salt = JUserHelper::genRandomPassword(32);
         $crypt = JUserHelper::getCryptedPassword($password, $salt);
         $password = $crypt.':'.$salt;
         //Data to login table
         $sql= "INSERT INTO #__users(username,email,lastvisitDate,registerDate,block,sendEmail,password,name,params,) values('$user_email','$user_email','$now','$now',0,0,'$password','$full_name','{}')";
         $db->setQuery($sql);
         $db->query();
         $last_inserted_id = $db->insertid();
                     //User group tabe normally group id for registered user is 2 other wise you have to check that too
         $sql= "INSERT INTO #__user_usergroup_map(user_id,group_id) values('$last_inserted_id',2)";
         $db->setQuery($sql);
         $db->query();

              //Finally send a mail to user if required.
             JUtility::sendMail(mailfrom, fromname, $user_email, $emailSubject, $email_body,true);
}

希望它有意义..

【讨论】:

    【解决方案2】:

    类似的东西..但你明白了:

    HTML 代码:

    <html>
    <head>
    <title>Registration </title>
    </head>
    <body>
    <form name="reg_form" id="reg_form" method="post" action="confirm.php">
    <table>
    <tr><td colspan="2"><?php echo isset($_GET["msg"])?$_GET["msg"]:"";?> </td></tr>
    <tr><td>Username</td><td><input type="text" name="username" id="username" /> </td></tr>
    <tr><td>Password</td><td><input type="password" name="password" id="password" /> </td></tr>
    <tr><td>confirm</td><td><input type="password" name="confirm" id="confirm" /> </td></tr>
    
    <tr><td></td><td><input type="submit" name="btnsubmit" id="btnsubmit" /></td></tr>
    </table>
    </form>
    </body>
    </html>
    

    PHP 代码在表单提交时执行

    <?php
    
    $username=isset($_POST["username"])?$_POST["username"]:"";
    
    $password=isset($_POST["password"])?$_POST["password"]:"";
    
    $confirm=isset($_POST["confirm"])?$_POST["confirm"]:"";
    
    if(!empty($username)&&!empty($password)){
    
    if($password!=$confirm)
    header("location:registration.php?msg=Password does not be match.");
    
    $host="localhost";
    
    $user="mysql_user_name";
    
    $pass="mysql_password";
    
    ///open connection
    $link=mysql_connect($host,$user,$pass) or die(mysql_error());
    
    mysql_select_db("databse_name",$link);
    
    $query="SELECT * FROM users WHERE username='".mysql_escape_string($username)."'";
    
    $result=mysql_query($query);
    
    //count no of rows
    $count=mysql_num_rows($result);
    
    if($count==1){
    header("location:registration.php?msg=username already exists");
    }else{
    
    $qry="INSERT INTO users(username,password)VALUES('".mysql_escape_string($username)."'
    ,'".mysql_escape_string($password)."')";
    
    mysql_query($qry);
    
    //Sending mail part goes here
    
    echo "You are successfully registered.";
    }
    
    mysql_close($link);
    }else{
    header("location:registration.php?msg=Username or password cannot be blank.");
    }
    

    【讨论】:

    • PHP 的 mysql_* 函数已弃用。我不会在这样的新项目中使用它们。
    • 这是为 Joomla 而不是自定义 PHP
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2014-10-08
    • 2016-03-20
    • 2012-01-08
    • 2022-01-20
    • 2011-11-25
    相关资源
    最近更新 更多