【问题标题】:Checking to see if data is already in a PSQL database Using PHP使用 PHP 检查数据是否已经在 PSQL 数据库中
【发布时间】:2018-07-15 19:43:49
【问题描述】:

我有一个注册网页,它使用 PHP 连接到 postgres 数据库。

数据库如下:

 id | first_name | last_name |       email        |  uid  | pwd  
----+------------+-----------+--------------------+-------+------
  9 | David      | Jones     | davidjones@one.com | admin | 111
 10 | John       | Stone     | js@bbb.com         | 5     | 222
 11 | a          | Stone     | js@ccc.com         | admin | 333
 12 | David      | f         | js@ccc.com         | admin | 4444

我想检查是否在网页中输入了 uid(用户名)时,它会检查 uid 是否已被使用。 我正在创建的代码如下(所有其他检查空字段电子邮件有效并且输入工作只是用户名检查不起作用):

<?php 

if (isset($_POST['submit']))

   include_once 'dbh.inc.php';

   $first = ($_POST[first]);
   $last = ($_POST[last]);
   $email = ($_POST[email]);
   $uid = ($_POST[uid]);
   $pwd = ($_POST[pwd]);

  // valadate the sign up form
    // check for empty fields
if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
     header("Location: ../signup.php?signup=empty");
     exit();
    }else{
    //check if email is valid   
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
               header("Location: ../signup.php?signup=invalidemail");
               exit();
           } else { 
           // check to see if user name is already been used
               $sql = "SELECT * FROM users WHERE user_uid=$uid";
               $result = pg_query($sql);
               $resultCheck = pg_numrows($result);

               if ($resultCheck > 0){
                   header("Location: ../signup.php?signup=usertaken");
                   exit();
               } else {    
   // insert data into users table
   $query="INSERT INTO users (first_name,Last_name,email,uid,pwd) VALUES ('$_POST[first]','$_POST[last]','$_POST[email]','$_POST[uid]','$_POST[pwd]')";
   $result = pg_query($query);
   // go back to the sign up page
   header("Location: ../signup.php");
    exit();
  }     
 }    
}
   ?>

谁能帮帮我? 非常感谢 戴夫

【问题讨论】:

    标签: php postgresql psql


    【解决方案1】:

    $uid 需要用单引号括起来,因为它是字符串。 所以这应该有效:

    $sql = "SELECT * FROM users WHERE user_uid='$uid'";
    

    您也可以尝试使用准备好的语句,然后您不必对字符串使用单引号,而是将数据类型作为参数传递(通常是stringinteger)。它还将保护您免受 SQL 注入,这是针对您的代码易受攻击的网站的常见攻击类型。

    在 PHP 中使用准备好的语句的流行方式是 PDO:http://php.net/manual/en/pdostatement.bindvalue.php

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多