0

我想检查数据库中是否已经存在用户名,我写了这段代码

<?php
include('connect.php');
if(isset($_POST['registrati'])) {

$Username = $_POST['nickname'];
$Password = md5($_POST['password']);
$Escape = mysql_real_escape_string($Username);
$Query2 = "SELECT * FROM utenti WHERE utenti='".$Username."'";
if(mysql_num_rows($Query2)>0) {
    echo "Nome utente già in uso";
}
else {
$Query = "INSERT INTO sito(usenti, password) VALUES('$Escape', '$Password')";
$Esecuzione = mysql_query($Query);
}
if(!$Esecuzione) {
    echo "Errore: ".mysql_error();
}
else { 
echo "";
}}
?>

当我运行它时,即使我输入了相同的两个用户名,也什么也没说,并且将它们平等地放置。为什么?

4

5 回答 5

0

你错过了

mysql_query($Query2)

在 if 条件之前。

您应该尝试使用 PHP 数据对象 (PDO) 连接到数据库并避免使用 mysql 扩展。mysql_ 函数在 php 5.5.0 版本中已弃用,将来将被删除。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2013-08-25T05:58:42.060 回答
0

执行查询2之前mysql_num_rows($Query2)

像这样,

 $result = mysql_query("SELECT * FROM utenti WHERE utenti='".$Username."'")
    if (mysql_num_rows($result) > 0) {//code)
于 2013-08-25T05:46:19.227 回答
0

您需要在检查返回的行数之前执行查询mysql_num_rows()

$result_set = mysql_query($Query2)
if(mysql_num_rows($result_set) > 0) {
    //continue
}

旁注:MySQL_*自 PHP 5.5 起已弃用。使用MySQLi_*PDO代替。

于 2013-08-25T05:42:42.930 回答
0

您需要一个结果作为 mysql_num_rows 的参数。

所以,

$Query2 = mysql_query("SELECT * FROM utenti WHERE utenti='$Username'");

而不仅仅是字符串

$Query2 = "SELECT * FROM utenti WHERE utenti='$Username'";

应该修复它。

请注意,如果使用双引号,则不需要连接字符串。

另外,我强烈建议您停止使用 mysql_* 函数,因为它们已被弃用并切换到 mysqli_* 或 PDO。见红框。并且不要忘记始终清理您的用户输入(或使用准备好的语句),因为否则您对 SQL 注入持开放态度。

于 2013-08-25T05:43:01.167 回答
0
  1. 尝试从同一个表中插入和检索相同的列。您正在插入usenti表的列,但从表sito中检索。我认为这是一个错字。utentiutenti
  2. 您使用 存储用户名$Escape,您应该使用相同的方式检索。
  3. 您需要先执行mysql_query($Query2)实际查询,然后才能检查行数。

尝试以下修复:

$Query2 = mysql_query ("SELECT * FROM sito WHERE usenti='".$Escape."'");
if(mysql_num_rows($Query2)>0) {
   echo "Nome utente già in uso";
}
于 2013-08-25T06:09:13.127 回答