2012-09-05 25 views
0

我正在使用PHP來嘗試和更新我在mysqli表中的信息。我決定嘗試使用mysqli而不是mysql。不幸的是,我似乎無法找到我的答案,因爲即時通訊也試圖完成它的程序風格,因爲我不知道OOP和所有教程(我發現)都在OOP中。mysqli_error:更新表(程序風格)

以下是我創建的腳本。我已經添加了評論來說明我認爲每個命令都在做什麼。

<?php  
DEFINE('DB_USER', 'root'); 
DEFINE('DB_PASS', 'password'); 
DEFINE('DB_NAME', 'test'); 
DEFINE('DB_HOST', 'localhost'); 

//connect to db 
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_connect_error($dbc)); 
mysqli_set_charset($dbc, 'utf8'); 

//form not submitted 
if(!isset($_POST['submit'])){ 

    $q = "SELECT * FROM people WHERE people_id = $_GET[id]";//compares id in database with id in address bar 
    $r = mysqli_query($dbc, $q);//query the database 
    $person = mysqli_fetch_array($r, MYSQLI_ASSOC);//returns results from the databse in the form of an array 

}else{//form submitted 

    $q = "SELECT * FROM people WHERE people_id = $_POST[id]";//compares id in database with id in form 
    $r2 = mysqli_query($dbc, $q);//query the database 
    $person = mysqli_fetch_array($r2, MYSQLI_ASSOC);//returns results from the database in an array 

    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $age = $_POST['age']; 
    $hobby = $_POST['hobby']; 
    $id = $_POST['id']; 

    //mysqli code to update the database 
    $update = "UPDATE people 
       SET people_fname = $fname, 
         people_lname = $lname, 
         people_age = $age, 
         people_hobby = $hobby 
       WHERE people_id = $id"; 

    //the query that updates the database 
    $r = @mysqli_query($dbc, $update) or die(mysqli_error($r)); 

    //1 row changed then echo the home page link 
    if(mysqli_affected_rows($dbc) == 1){  
     echo "<a href=\"index.php\">home page</a>"; 
    } 
} 
?> 

更新形式

<form action="update.php" method="post"> 
    <p>First name<input type="text" name="fname" value="<?php echo "$person[people_fname]" ?>" /></p> 
    <p>Last name<input type="text" name="lname" value="<?php echo "$person[people_lname]" ?>" /></p> 
    <p>Your age<input type="text" name="age" value="<?php echo "$person[people_age]" ?>" /></p> 
    <p>Your hobby<input type="text" name="hobby" value="<?php echo "$person[people_hobby]" ?>" /></p> 
    <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>" />   
    <input type="submit" name="submit" value="MODIFY" /> 
</form>` 

當我提交我收到以下錯誤消息的形式

Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\xampp\htdocs\sandbox\update.php on line 39 

我意識到這是告訴我的問題是與

$r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

所以我試圖把sqli代碼作爲第二個參數(我意識到這與把變量放進去是一樣的,但它是最後的手段),但它似乎不正確,仍然沒有工作。我也看了一個php.net,但不能解決他們給出的例子的答案

請指教,我認爲這本意很簡單?

回答

0

不要將$r傳遞給mysqli_error。它接受一個可選的mysql鏈接,但不是查詢結果。

在你的情況下,查詢被執行。評估結果爲false,分配給$r。賦值的結果爲false,導致您致電die(mysqli_error($r)),並且$r爲假。

我想你打算把$dbc傳給mysqli_error。

1
$update = "UPDATE people 
      SET people_fname = $fname, 
        people_lname = $lname, 
        people_age = $age, 
        people_hobby = $hobby 
      WHERE people_id = $id"; 

您需要引用了變量:

$update = "UPDATE people 
      SET people_fname = '$fname', 
        people_lname = '$lname', 
        people_age = '$age', 
        people_hobby = '$hobby' 
      WHERE people_id = '$id'"; 

無論其

你應該看看約束參數 - 你正在做的用戶輸入,並將其寫入直接到你的數據庫,這意味着惡意用戶可以做各種惡作劇。

查看mysqli's bind_param的手冊頁 - 有很多示例代碼片段。

+0

三江源,是能跟更新問題。我會看看mysqli的bind_param – tony09uk

0

在我看來,問題是與數據庫連接($ dbc)。因爲您正在使用

@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) 

'@'可能以某種方式隱藏連接錯誤。

另外,請告訴我你在現實生活中正在做數據清理,對嗎?否則,您必須在所有POST和GET數據上運行mysqli_real_escape_string()。

+0

謝謝我會試一試。是的,我會這樣做,目前我只是想用PHP和mysqli來解決我的問題,一旦我更好地理解了我將會考慮安全問題......有很多東西需要我學習將其分解成可管理的塊。 – tony09uk

-1

你寫

//returns results from the database in an array 
$person = mysqli_fetch_array($r2, MYSQLI_ASSOC); 

,但你應該寫

//returns results from the database in an array 
$person = mysqli_fetch_array(MYSQLI_ASSOC); 
+0

程序樣式函數需要一個'mysqli_result' _和_一個可選的結果類型。你的回答將不起作用。 –