帐户注册,创建自定义ID页,使用PHP和MySQL访问

布莱克·吉尔曼

我想创建一个系统,以便用户可以注册/登录,然后继续进行操作,将它们定向到诸如blahurl.com/nations/customid之类的自定义页面,注册时已经生成了每个ID(称为UserID),我希望能够访问blahurl.com/nations/92,然后该人将弹出并显示其SQL信息。

我想要这样,当他们注册时,他们已经可以访问这些页面,我不需要为每个注册的人创建一个页面。我将如何去做呢?然后通过他们的MySQL用户名搜索它们?

  • 我的MySQL中的表格称为用户
  • 我们称为用户ID的ID
  • 该用户名称为UserName
  • 该密码称为密码
  • 注册日期称为RegDate

当人们注册时,它们会自动放入我的Submit-form.php中,它是:

<?php
$username=$_POST['UserName'];
$password=$_POST['Password'];
$leadername=$_POST['LeaderName'];
$nationname=$_POST['NationName'];
$email=$_POST['Email'];

//Database connection
require_once("config.php");
require_once("checkregister.php");

//mysql query to insert value to database
$query=mysql_query("INSERT INTO users (UserName, Password, LeaderName, NationName, Email)
VALUES ('$username', '$password', '$leadername', '$nationname', '$email')");
//if value inserted successyully disply success message
if($query)
{
    echo '<div style="color:#008000; font-weight:bold;">Your Account has been Created! <del>Check your Email for Verification Code!</del> in the future you will need to Verify your Account, for right now just <a href="../Login.php">go back to the Website!</a></div>';
} else
{
    //error message
    echo '<div style="color:#c24f00; font-weight:bold;">Registration Failed: Could not INSERT to Query! (Could not Connect to Database)<br><a href="../home.php">Back to Website</a></div>';
}

?>
  • config.php连接到数据库
  • checkregister.php检查以确保用户名/领导者名尚不存在,并且没有空格留空。
半身人

您已经问过如何链接到非花哨的URL,这很容易。您只需要获取主键,该主键将在您的自动增量列中创建:

提交form.php

// Create user
// @todo Fix injection vuln
$query=mysql_query( ... );

// If successful...
if($query)
{
    // Get the inserted primary key
    $userId = mysql_insert_id();
    ?>
    <div style="color:#008000; font-weight:bold;">
        Your account has been created,
        <a
            href="nations.php?userId=<?php echo $userId ?>"
        >go back to the website!</a>
    </div>
    <?php
}

然后,您可以在另一页中阅读它:

nationals.php

<?php
// Read it only if it exists
$userId = isset($_GET['userId']) ? $_GET['userId'] : null;

// Escape any apostrophes in the ID, to avoid SQL injection
$cleanUserId = mysql_real_escape_string($userId);

// Always check if it exists, the user may have tampered with the URL
$sql = "SELECT * FROM users WHERE UserID = '$cleanUserId'";
$query = mysql_query($sql);
// Do something with the result...

以下是一些一般性说明。这些可能一口气无法吸收,但是如果您对它们进行一些阅读,它们将在长期内为您提供帮助:

  • 进行POST操作时,通常应进行重定向,除非重定向失败(并且需要呈现验证/错误消息)。这是因为浏览器不喜欢用post方法呈现内容,如果您随后刷新屏幕,浏览器将要求您确认是否要重新提交操作。在大多数情况下,您不需要这样做,因为它会重复帖子中发生的事情(在这种情况下,创建用户)
  • 为了通过POST重定向传送信息,通常使用会话。一些框架提供“闪存消息”,这些消息只是在一次页面查看后清除的会话值。或者,可以使用查询字符串。无论哪种方式,这对于将您的用户ID从发布页面携带到结果页面都是有用的,因此刷新屏幕不会导致重新提交。
  • 逻辑和表示在这里混杂在一起,这将使应用程序很难维护。如果有机会,请尝试将所有逻辑(例如数据库调用)移至页面顶部,并将演示文稿HTML置于脚本底部。在需要动态内容的地方可以使用微小的PHP。
  • 您可能会发现使用Web框架有助于为代码提供进一步的结构和模块化。没有“最佳” PHP框架,因此请选择Slim,Laravel,Aura,Symfony,Zend,Cake,CodeIgniter等。值得尝试一些,看看您喜欢什么。
  • 交换到较新的数据库库-mysql_不再维护调用。他们将在PHP 5.5+中引发通知。
  • 根据注释,使用参数绑定和密码哈希来提高安全性。在这两个问题都解决之前,不要上线。
  • 如果您不使用版本控制,则值得养成习惯。Git使用起来非常简单,并且可以自动与许多IDE应用程序(例如NetBeans)集成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章