2016-08-17 68 views
-2

我有下面的代碼應該創建一個表並用兩個用戶填充它。創建表查詢的工作,但插入不。任何幫助,將不勝感激。如何在PHP表格中插入PHP變量?

<?php 
    require_once 'login12.php'; 
    $link = mysqli_connect($db_hostname, $db_username, $db_password); 
    if (!$link) die ("Unable to connect to MySQL: " .mysqli_error()); 
    mysqli_select_db($link, $db_database) or die("Unable to select database: "  .mysqli_error()); 
$query = "CREATE TABLE `users` (
     forename VARCHAR(32) NOT NULL, 
     surname VARCHAR(32) NOT NULL, 
     username VARCHAR(32) NOT NULL UNIQUE, 
     password VARCHAR(32) NOT NULL)"; 
$result = mysqli_query($link, $query); 
if (!$result) die ("Database access failed: " .mysqli_error()); 
$salt1 = 'G3tD0wnonIT!'; 
$salt2 = 'Y0uwant2'; 
$forename = 'Bill'; 
$surname = 'Smith'; 
$username = 'bsmith'; 
$password = 'mysecret'; 
$token = sha1("$salt2$password$salt1"); 
add_user($forename, $surname, $username, $token); 
$forename = 'Pauline'; 
$surname = 'Jones'; 
$username = 'pjones'; 
$password = 'acrobat'; 
$token = sha1("$salt2$password$salt1"); 
add_user($forename, $surname, $username, $token); 
function add_user($fn, $sn, $un, $pw) { 
    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error()); 
} 
?> 

回答

1

$link超出了您的功能的範圍,因此它無法訪問它。您需要將它作爲參數傳遞給您的函數。

add_user($link, $forename, $surname, $username, $token); 
function add_user($link, $fn, $sn, $un, $pw) { 
    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error($link)); 
} 
+0

謝謝,但它仍然無法正常工作:( –

+0

@vaughnjovi我在我的例子犯了一個錯誤,我嘗試提供更新的代碼,看看是否適合你。 –

+0

我已經嘗試過,您的評論之前可惜它沒有工作。Manuel的答案也沒有工作。 –

-1

那麼,我以前的海報已經指出,$鏈接不在你的函數的範圍。我建議使用全局語句,將$ link作爲參數傳遞給函數,因爲它更乾淨,而且不必每次都傳遞它。

add_user($forename, $surname, $username, $token); 
function add_user($fn, $sn, $un, $pw) { 
    global $link; 

    $query = "INSERT INTO `users` (`forename`, `surname`, `username`, `password`) VALUES ('$fn', '$sn', '$un', '$pw')"; 
    $result = mysqli_query($link, $query); 
    if (!$result) die ("Database access failed: " .mysqli_error()); 
} 
+0

使用'global'是非常糟糕的做法,不應該被鼓勵。它不*清潔,不應該使用。 –

+0

對於像這樣的事情來說,至少你不必每次都通過它,在這種情況下更糟糕。 –

+0

這實際上很懶惰。將它作爲參數傳遞是*微不足道的*,並在函數簽名中清楚說明該函數操作需要什麼。使用全球化是難以發現錯誤的來源,並使測試變得困難。他們應該避免.. –