2015-10-08 106 views
0

這是我的第一個問題,所以請不要烤我。比較數據庫輸入與表格

我目前正在學校中的一個html,php,mysql項目,我想知道是否有可能將html中的表單與我的數據庫中的表格進行比較以獲取其id。

的形式看起來像
女士prename: 「」
姓:」「

表:
ID: '1'
女士prename: 'ABC'
姓: 'XYZ'

現在,如果有人填寫了表單並提交,我想將它發送到通過數據庫查看的函數,如果找到匹配項,則返回該ID。

感謝您的想法!

編輯:正如你想這裏是我走到這一步,包括從@Patchesoft代碼
不過它不是工作

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 


<form action="db_class.php" method="post"> 
    <p>Vorname: <input type="text" name="prename"/></p> 
    <p>Nachname: <input type="text" name="last_name"/></p> 
    <input type="submit" name="submit" value="Start"/> 
</form> 
</body> 
</html> 

而對於PHP的一部分我們的老師讓我們有很多的類功能添加和數據庫等最重要的選擇:

<?php 


DB::init(...); // The connection is ok. I just delted the login data for purpose 

$prename = mysqli_real_escape_string($_POST['prename']); 
$lastname = mysqli_real_escape_string($_POST['last_name']); 

$result = mysqli_query("SELECT `ID` FROM `user` WHERE `prename` = '" . $prename . "' AND `last_name` = '" . $lastname . "' "); 
if(mysqli_num_rows($result) > 0) { 
    $row = mysqli_fetch_array($result); 
    return $row['ID']; 
} 


echo $result; 

class DB { 

    public static $db = null; 
    public static $insertID; 

    public static function init($dbHost, $dbUser, $dbPassword, $dbName) { 
     self::$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName); 
     if (self::$db->connect_errno) { 
      $_SESSION['errors'][] = "MySQL connection failed: ". self::$db->connect_error; 
     } 
     self::$db->query("SET NAMES utf8;"); 
    } 

    public static function select($table, $columns = '*', $key=null, $where = null, $limit = null, $debug = false) { 
     $sql = "SELECT " . self::generateColumnList($columns) . " FROM $table"; 
     if ($where != null) { 
      $sql .= " WHERE ".$where; 
     } 
     if ($limit != null) { 
      $sql .= " LIMIT ".$limit; 
     } 
     if ($debug == true) { 
      $_SESSION['debug'][] = __FUNCTION__ . ': $sql is <strong>' . $sql . '</strong>'; 
     } 

     $result = self::$db->query($sql); 
     if (self::$db->errno) { 
      $_SESSION['errors'][] = '<p>select failed: ' . self::$db->error . '<br> statement was: <strong>' . $sql . '</strong></p>'; 
      return array(); 
     } else { 
      $ret = array(); 
      while ($row = $result->fetch_assoc()) { 
       if (!empty($key)){ 
        $ret[$row['id']] = $row; 
       } 
       else 
        $ret[] = $row; 
      } 
      if (count($ret) == 1) { 
       return $ret[0]; 
      } else { 
       return $ret; 
      } 
     } 
    } 
    public static function select2($sql, $debug = false) { 
     $result = self::$db->query($sql); 
     if (self::$db->errno) { 
      $_SESSION['errors'][] = '<p>select failed: ' . self::$db->error . '<br> statement was: <strong>' . $sql . '</strong></p>'; 
      return array(); 
     } else { 
      $ret = array(); 
      while ($row = $result->fetch_assoc()) { 
       if (!empty($key)){ 
        $ret[$row['id']] = $row; 
       } 
       else 
        $ret[] = $row; 
      } 
      if (count($ret) == 1) { 
       return $ret[0]; 
      } else { 
       return $ret; 
      } 
     } 
    } 
+0

歡迎來到SO。網絡上有數百個教程。只需使用大型搜索引擎,然後返回代碼向我們展示您嘗試的內容。 –

+3

你爲什麼認爲我們會烤你?我們是世界上最好的人。 – CodeGodie

+1

你試過了什麼代碼?你能「編輯」你的原始問題並提供該代碼嗎? – CodeGodie

回答

2

你會希望得到您的表單輸入域到變量,然後使該數據庫中的檢查數據的SQL查詢。這很簡單,但對於初學者來說,還有其他一些事情需要考慮。

1)消毒您的輸入。這對於防止SQL注入攻擊非常重要。簡單的答案是通過mysql_real_escape_string()函數來運行它來清理變量,但還有比這更好的方法。查找準備好的語句。

2)連接到您的數據庫。在你可以做任何查詢你的數據庫之前,你需要連接到它。這很簡單,但你需要查看如何做到這一點。

至於一些基本的代碼,請嘗試:

$prename = mysqli_real_escape_string($_POST['prename']); 
$lastname = mysqli_real_escape_string($_POST['lastname']); 

// Now check to see if the values match in your database 
// This assumes you have already written your connecting to database code 
$result = mysqli_query("SELECT `ID` FROM `table_name` WHERE `prename` = '" . $prename . "' AND `lastname` = '" . $lastname . "' "); 
if(mysqli_num_rows($result) > 0) { 
    $row = mysqli_fetch_array($result); 
    return $row['ID']; 
} 

這是一個非常基本的腳本 - 這是我作爲一個開始學做。使用PDO數據庫驅動程序有很多更好的方法。但如果你只是學習在PHP和MySQL中做些什麼,這應該會讓你走。

+0

在您的答案中引用長期不推薦使用的'mysql_ *'函數的自動-1。 –

+0

@MikeBrant哎呀!固定。 – Patchesoft

+0

好的。我想我在這個社區搞砸了一些指引。我試試這個。我們的老師爲我們提供了一個php類,它連接到我們的數據庫。所以連接在那裏,但我們的老師不是最好的教我們在PHP,HTML,MySQL的基本東西...... – Lelsoos