2013-06-17 2 views
0

Я выполняю упражнение с управлением базами данных PHP и MySQL, и я пытаюсь вернуть сумму из поля в таблице с PHP. Я пытаюсь получить значение от CalsPerServ в таблице продуктов, где foodID равен пищевому продукту, выбранному пользователем. Все, что я получаю сейчас, это массив, когда я должен возвращать один результат. Любая идея, что пошло не так?Базы данных MySQL и PHP?

if($tableName == "meals"){ 
      $foodsID = filter_input(INPUT_POST, "foodsID"); 
      $servings = filter_input(INPUT_POST, "Servings"); 
      $foodsID = mysql_real_escape_string($foodsID); 
      $servings = mysql_real_escape_string($servings); 

      $query = "SELECT CalsPerServ FROM foods WHERE foodsID=$foodsID"; 
      $result = mysql_query($query, $connect); 
      $CalsPerServ = mysql_fetch_assoc($result); 

      print $CalsPerServ; 

      $calories = ($CalsPerServ * $servings) * 100; 

      $sql .= "(foodsID, Servings, Calories) VALUES ('$foodsID', '$servings', '$calories')"; 

      $sqltwo = "INSERT INTO daily_diary (foodsID, CaloriesPlus) VALUES ('$foodsID', '$calories')"; 
      $resulttwo = mysql_query($sqltwo, $connect); 
} 
+3

mysql_fetch_assoc возвращает ассоциативный массив. И скажите своему учителю, что mysql_ * устарел. (http://www.php.net/manual/en/function.mysql-fetch-assoc.php) – teynon

+1

-0.49 для использования 'mysql_query' в 2013 году. Взгляните на mysqli или PDO. Любой из них поддерживает подготовленные заявления, что, во-первых, означает, что вам не нужно делать все это ручное экранирование и объединять SQL вручную. – cHao

+0

@ Тома Расскажи мне об этом ... Меня раздражает все, чему он учит! –

ответ

1

Проблема заключается здесь в этой линии

$calories = ($CalsPerServ * $servings) * 100; 

$CalsPerServ представляет собой массив, содержащий результат запроса. Для того, чтобы получить одно значение столбца из него вы должны использовать его как этот

$calories = ($CalsPerServ['CalsPerServ'] * $servings) * 100; 
+0

Ах, спасибо большое! Я знал, что есть кое-что, чего я не делал. Думаю, мой мозг жарится после 8 часов кодирования! –

+0

@RachelleBennington это происходит в основном с программисты :) –

1

Даже если вы запрашиваете для одной вещи, mysql_fetch_assoc() возвращает массив.

Таким образом, даже если вы выбрали более одного предмета, вы всегда будете знать, что вернешь ассоциативный массив, а выбранные элементы станут его ключами.

$CalsPerServ = mysql_fetch_assoc($result); 

print $CalsPerServ['CalsPerServ']; 
+0

Ах! Спасибо огромное! Я знал, что есть кое-что, чего я не делал. Думаю, мой мозг жарится после 8 часов кодирования! –