Php 表单验证无效

Php 表单验证无效,php,Php,如果用户输入了重复的名称,我想显示错误。但是,它不起作用。即使名称相同,它也会保持插入状态。这是我的代码: $namaErr = ""; $error==false; if (isset($_POST['btnSubmit'])) { if(isset ($_POST['nama'])){ $nama = $_POST['nama']; $query ='SELECT nama FROM daftar_pengguna WHERE nama="' . $nama . '" LIMIT 1';

如果用户输入了重复的名称,我想显示错误。但是,它不起作用。即使名称相同,它也会保持插入状态。这是我的代码:

$namaErr = "";
$error==false;
if (isset($_POST['btnSubmit'])) {
if(isset ($_POST['nama'])){
$nama = $_POST['nama'];
$query ='SELECT nama FROM daftar_pengguna WHERE nama="' . $nama . '" LIMIT 
1';
$result = mysqli_query($query);
$totalNumRowResult = mysqli_num_rows($result);
if($totalNumRowResult > 0){
$error=true;
$namaErr="Nama ini telah digunakan!!";
} 
}
如果没有错误,它将插入数据库:

else{
$query="INSERT INTO daftar_pengguna(nama) VALUES 
('$nama')";
$res = mysqli_query($query);
header('Location:index.php?registered=true');  
}    
}

我已经搜索了所有和我一样的问题,但是运气不好

大括号有问题。这应该行得通

$namaErr = "";
$error==false;
if (isset($_POST['btnSubmit'])) {
   if(isset ($_POST['nama'])){
      $nama = $_POST['nama'];
           $query ='SELECT nama FROM daftar_pengguna WHERE nama="' .$nama . '" LIMIT 1';
 $result = mysql_query($query);
 $totalNumRowResult = mysql_num_rows($result);
 if($totalNumRowResult > 0){
 $error=true;
 $namaErr="Nama ini telah digunakan!!";
  } 
 else{
    $query="INSERT INTO daftar_pengguna(nama) VALUES 
    ('$nama')";
    $res = mysql_query($query);
    header('Location:index.php?registered=true');  
    }    
    }
  }
我建议两件事:

  • 将if条件合并到一个块中,这将消除我在上面的评论中提到的和Sujith提到的大括号混淆

  • 另外,我建议您在发送到数据库查询之前清理$\u POST变量

  • 请参见下面的代码以及建议的修改:

    <?php
    
    $namaErr = "";
    $error = false;
    
    # Merge condition checks in One block using && (AND)
    if (isset($_POST['btnSubmit']) && isset($_POST['nama'])) {
    
    $nama = $_POST['nama'];
    
    # Sanitize the input before running into Database query
    $nama = filter_var($nama, FILTER_SANITIZE_STRING);
    
    
    $query ='SELECT nama FROM daftar_pengguna WHERE nama="' . $nama . '" LIMIT 
    1';
    $result = mysql_query($query);
    $totalNumRowResult = mysql_num_rows($result);
    
    if($totalNumRowResult > 0){
      $error=true;
      $namaErr="Nama ini telah digunakan!!";
    } 
    else{
      $query="INSERT INTO daftar_pengguna(nama) VALUES ('$nama')";
      $res = mysql_query($query);
      header('Location:index.php?registered=true');  
    }
    }    
    
    尝试此查询:

    $query ='SELECT nama FROM daftar_pengguna WHERE nama="' . $nama . '" ';
    

    您的last if使用了双}括号,这对于Else{block来说是不正确的…另外,我发现您的代码没有什么安全问题。我建议您对post变量进行一些清理。这也不起作用,先生。它插入的名称与之前在数据库中插入的名称相同:(我应该把另一个花括号放在哪里?你少了一个花括号。它不起作用了,先生。它插入了重复的名字:(我太厌倦了……感觉我想给你一个支持……它起作用了……我退出谷歌浏览器,重新打开它,再试一次……它起作用了!!非常感谢你Mohsin.)还有一个问题,先生,我能在用户按下Enter按钮之前让文本字段显示错误吗?很高兴它对您有效!对于第二个问题,我认为您需要Ajax,它可以查询数据库并显示结果/错误,而无需页面加载。这将在这一级别增加代码的复杂性,因此我建议保持简单然后让Enter按钮加载页面并显示错误,将链接添加回原始页面,以便他们可以重试。。。