0

我正在通过检查数据库中是否使用用户名并根据我在网上找到的教程创建了一些代码来学习一些新东西。我理解逻辑,但不确定我是否以正确的方式接近它。在本质上。信息是从表单域传递过来的。如果输入的内容与数据库中的字段匹配,那么我希望它返回/回显结果“是”。如果不匹配,我需要它来回显“否”。似乎直截了当。

本教程是为预先确定的值而设计的。即 $existing_users=array('test',''one','two',three');

虽然我希望 'test',''one','two',three' 实际上从数据库中动态提取。

因此,我开始添加设置以执行此操作,尽管当我尝试将动态值放入其中时,我编写的代码不起作用。我的代码如下:

$existing_users = array();
mysql_select_db($database_db, $db);
$result = mysql_query('SELECT * FROM clients') or exit(mysql_error());
while ($row = mysql_fetch_assoc($result)) {$existing_users[] = $row['shortcode'];}

$arr = $existing_users;

$display = "'" . implode("', '", $arr) . "'";

    // THIS IS THE PROBLEM 
    // If the code is written out as:
    // $existing_users=array('test',''one','two',three'); 
    // It works.
    // When the script is coded as below. It doesn't work.
    // Note. If I echo $display is displays 'test',''one','two',three'

$existing_users=array($display);

//value received from the get method
$user_name=$_POST['user_name'];

//checking weather user exists or not in $existing_users array
if (in_array($user_name, $existing_users))
{

//user name is not available
echo "no";
} 
else
{ 
//user name is available 
echo "yes";
}

我不确定我是否以正确的方式接近这一点,因为我正在破解一个在线教程,可能有一个更简单的方法。任何想法将不胜感激。

4

2 回答 2

3

这是一种更快的方法:

$user_name=mysqli_real_escape_string($_POST['user_name']);

$result = mysql_query("SELECT * FROM clients where shortcode like '$user_name'") or exit(mysql_error());

if(mysql_num_rows($result)==0)
    echo 'no';
else
    echo 'yes'

我没有验证来自 $_POST 的输入

你到底在遵循什么教程?

于 2012-08-26T00:13:09.193 回答
1

您不需要 remake $existing_users,因为您已经从数据库查询中创建了该数组

$existing_users = array();
mysql_select_db($database_db, $db);
$result = mysql_query('SELECT * FROM clients') or exit(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    $existing_users[] = $row['shortcode'];
}

$user_name=$_POST['user_name'];

if (in_array($user_name, $existing_users)){
    echo "no";
} else { 
    //user name is available 
    echo "yes";
}

并尝试将您的代码移动到 PDO

$db = new PDO('mysql:host=localhost;dbname='.$database_db, 'username', 'password', array(ATTR::PDO_EMULATE_PREPARES => false));
$stmt = $db->prepare("SELECT * FROM clients WHERE `shortcode`=:shortcode");
$stmt->execute(array(':shortcode' => $_POST['user_name']));

if($stmt->rowCount() == 1){
    echo 'no';
} else {
    echo 'yes';
}
于 2012-08-26T00:11:36.053 回答