2017-08-29 118 views
-2

下面是我在Sublime中的代碼,但數據庫沒有被調用。如何將我的網站連接到MySQL數據庫?

<?php$username="root"; 
$password="changedpassword";$database="User"; 
$field1-name=$_POST['name']; 
$field2-name=$_POST['password']; 
$field3-name=$_POST['email']; 
$field4-name=$_POST['sex']; 
$field5-name=$_POST['school']; 
$field6-name=$_POST['birth']; 
mysql_connect(localhost,$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 
$query = "INSERT INTO create_user (name, password, email, sex, school, birth) VALUES('','$field1-name','$field2-name', 
'$field3-name','$field4-name','$field5-name','$field6-name')";mysql_query($query);mysql_close();?> 
+2

您是否收到任何錯誤? –

+3

[**不要在新代碼**中使用'mysql_ *'函數](http://stackoverflow.com/q/12859942)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。 請參閱[**紅框**](http://php.net/mysql-connect)? 改爲了解[*預準備語句*](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://php.net/pdo)或[MySQLi](http:///php.net/mysqli) - [這篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)可以幫助你決定哪個。 – Qirel

+0

應該完成一些合理的代碼格式和變量命名 - 它也會幫助您調試代碼。 – Qirel

回答

0

讓我們一步一步來看看。首先,這裏是你當前的代碼,整理了能夠閱讀:

<?php 
$username = "root"; 
$password = "changedpassword"; 
$database = "User"; 
$field1_name = $_POST['name']; 
$field2_name = $_POST['password']; 
$field3_name = $_POST['email']; 
$field4_name = $_POST['sex']; 
$field5_name = $_POST['school']; 
$field6_name = $_POST['birth']; 
mysql_connect(localhost, $username, $password); 
@mysql_select_db($database) or die("Unable to select database"); 
$query = " 
    INSERT INTO 
      create_user 
       (
        name, 
        password, 
        email, 
        sex, 
        school, 
        birth 
       ) 
      VALUES 
       (
        '', 
        '$field1_name', 
        '$field2_name', 
        '$field3_name', 
        '$field4_name', 
        '$field5_name', 
        '$field6_name' 
      ) 
"; 
mysql_query($query); 
mysql_close(); 
?> 

我所做的只有兩個變化(整理的空白,並用_name代替-name,如PHP變量不能包含連字符),但它已經一個很大的改進。代碼不再是一個眼睛。它沒有語法錯誤,並且可讀。儘管如此,還是有很多問題。

首先,您會看到我們將七個值插入六列。這將是一個問題。修正了通過去除第一空白值:

$query = " 
    INSERT INTO 
      create_user 
       (
        name, 
        password, 
        email, 
        sex, 
        school, 
        birth 
       ) 
      VALUES 
       (
        '$field1_name', 
        '$field2_name', 
        '$field3_name', 
        '$field4_name', 
        '$field5_name', 
        '$field6_name' 
      ) 
"; 

現在我們有一些可能實際工作。這是一種痛苦的不安全感,有很大的SQL注入攻擊的可能性,並且它不適用於最新的PHP,因爲mysql_函數已被刪除,但它實際上可能適合某處工作。你不想把它投入生產,但出於測試目的,我們正在某處。

+0

好的,謝謝當我從別處拉這段代碼我沒有意識到我正在使用不正確的格式 – Nate

+0

我想繼續告訴你如何解決這些問題,但我太累了想清楚。明天吧。 – TRiG

+0

我試着運行上面粘貼的所有額外值,但即便如此,一旦我加載本地主機並將信息輸入到站點的登錄頁面,mysql數據庫並未更新以反映新插入的信息 – Nate

0

MySQL自PHP 5.6起棄用,且不安全,請改爲使用PDO或MySQLi。

與庫MySQLi

 <?php 


     //MySQLi information 

     $db_host  = "localhost"; 
     $db_username = "username"; 
     $db_password = "password"; 

     //connect to mysqli database (Host/Username/Password) 
     $connection = mysqli_connect($db_host, $db_username, $db_password) or die("Error " . mysqli_error()); 

     //select MySQLi dabatase table 
     $db = mysqli_select_db($connection, "table") or die("Error " . mysqli_error()); 

    $field1_name = $_POST['name']; 
    $field2_name = $_POST['password']; 
    $field3_name = $_POST['email']; 
    $field4_name = $_POST['sex']; 
    $field5_name = $_POST['school']; 
    $field6_name = $_POST['birth']; 

    $query = mysqli_query($connection, "INSERT INTO create_user 
      (name, password, email, sex, school, birth) VALUES 
        (
         '$field1_name', 
         '$field2_name', 
         '$field3_name', 
         '$field4_name', 
         '$field5_name', 
         '$field6_name' 
       ) 
    "); 

使用連接這一點,你就會好的。我希望這對你有幫助!

+0

仍然存在SQL注入問題在這裏。而'$ _POST'變量可能是未定義的。我想提高我自己的答案,但我耗盡了時間。明天吧。 – TRiG

+0

@TRiG是的,當然,仍然有機會獲得SQL注入攻擊,但不像使用MySQL。從來沒有說過它是100%安全的。更安全的是使用預先準備的語句,但向他展示了這種方法,以便他能夠理解它的級別,爲什麼$ _POST可能未定義?因爲日期/性別應與複選框和選擇選項一起使用?我只是解決了他發佈的內容,並沒有將它寫出來。 爲什麼你把它作爲一個競賽誰張貼什麼? –

+0

@TRiG我沒有挑戰你,你可以張貼或改進你喜歡的任何東西。你評論的方式讓我覺得你只是想讓你的答案被貼出而沒有別的。 –