2013-10-06 29 views
0

這裏是連接到一個MySQL數據庫PHP未定義指數和mysqli_fetch_array()不接受PARAMS

<html> 

<head> 
<title>CS90SI Project 2</title> 
<script src="validation.js"></script> 
</head> 

<body> 
<?php if($_SERVER["REQUEST_METHOD"] != "POST"){ ?> 
<h1>My Favorite Foods</h1> 

<form action="index.php" method="post" id="foodForm"> 
Name: <input type="text" name="foodname" id="nameField"></input><br /> 
Type: <select name="foodtype" id="typeField"> 
<option value="fruit">Fruit</option> 
<option value="vegetable">Vegetable</option> 
<option value="dairy">Dairy</option> 
<option value="meat">Meat</option> 
<option value="grain">Grain</option> 
<option value="other">Other</option> 
</select><br /> 
Number of Calories: <input type="text" name="foodcals" id="calsField"></input><br /> 
Healthy? <input type="checkbox" name="foodhealth" value="healthy" id="healthyField"></input><br /> 
<?php if(isset($_POST['foodhealth'])) echo "checked='checked'"; ?> 
Additional Notes:<br /> 
<textarea name="foodnotes" id="notesField"></textarea><br /> 
<input type="submit" value="Add" onclick="return validateForm();"></input> 
</form> 

<?php }else{ ?> 
<!-- form handling and output printing stuff goes here --> 
<?php 
if(isset($_POST['foodhealth'])) { 
    $foodhealth = true; 
} else { 
    $foodhealth = false; 
} 
$insert = "INSERT INTO Foods(Name, Type, NumCals, Healthy, Notes) VALUES('$_POST[foodname]','$_POST[foodtype]','$_POST[foodcals]','$_POST[foodhealth]','$_POST[foodnotes]')"; 
$con = mysqli_connect("localhost","root"); 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
mysqli_select_db($con, "mydb"); 
$result = mysqli_query($con, $insert); 
    echo "Food added successfully."; 
    while ($row = mysqli_fetch_array($result)) { 
     echo $row['Name'] . ", " . $row['Type'] . ", " . $row['NumCals'] . ", " . $row['Healthy'] . ", " . $row['Notes']; 
     echo "<br>"; 
    } 
    mysqli_free_result($result); 
mysqli_close($con); 
} ?> 
</body> 
</html> 

我提交的數據,並得到下面的差錯的簡單形式的代碼:

Notice: Undefined index: foodhealth in /Applications/XAMPP/xamppfiles/htdocs/vsingal5_hw2/index.php on line 38 
Food added successfully. 
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /Applications/XAMPP/xamppfiles/htdocs/vsingal5_hw2/index.php on line 47 

Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in /Applications/XAMPP/xamppfiles/htdocs/vsingal5_hw2/index.php on line 51 

不知道爲什麼會發生這種情況,爲複選框設置bool有什麼問題,以及mysqli_fetch_array有什麼問題?

回答

0

您在這裏失蹤了一堆報價:

VALUES('$_POST[foodname]','$_POST[foodtype]','$_POST[foodcals]','$_POST[foodhealth]','$_POST[foodnotes]')"; 

他們應該是:

VALUES('{$_POST['foodname']}','{$_POST['foodtype']}','{$_POST['foodcals']}','{$_POST['foodhealth']}','{$_POST['foodnotes']}')"; 

與封閉在{}

變量
0

如果用戶沒有檢查Healthy?框,$_POST['foodhealth']將不會被設置。您已經在if (isset($_POST['foodhealth']))代碼中檢查了這一點。但是,在您的INSERT聲明中,您仍然嘗試使用$_POST['foodhealth']。您應該使用您之前設置的$foodhealth變量。

然後在您撥打mysqli_query()後,您需要檢查它是否成功。

if ($result) { 
    echo 'Food added successfully' 
} else { 
    echo mysqli_error($con); 
} 

第三,你不能叫mysqli_fetch_array()當查詢是INSERT,它不返回任何行。您只能在執行SELECT時進行提取。