2017-09-06 20 views
0

私はシンプルなアプリを持っているを取得することはできません、HTMLは単純です:アイテムCRUDデータベースアプリにインポートない、と値

<ul> 
<li><a href="create.php"><strong>Create</strong></a> - add a food by 
name</li> 
<li><a href="read.php"><strong>Read</strong></a> - find a food and the 
nutrition values</li> 
    <li><a href="update.php"><strong>Create</strong></a> - update a foods 
values</li> 
<li><a href="delete.php"><strong>Read</strong></a> - delete an entry</li> 
</ul> 

私は「テスト」という名前の1つのデータベースを持っているし、成功したテーブル「foodnamesを作成しました"これはmySQL管理者には明白です。したがって、sql initファイルは投稿しません。

私はアイテム(食べ物)を追加しようとすると、私は次のエラーメッセージが出ます:

INSERT foodnames(foodName、カロリー、タンパク質、炭水化物、 脂肪)値(INTO:foodName、:カロリーを、:タンパク質:炭水化物、:脂肪) SQLSTATE [42S02]:ベーステーブルまたは見つからないビュー:1146表は 'food.foodnames' はここで

存在しません、私のcreate.phpです:

if (isset($_POST['submit'])) 
{ 

require "../config.php"; 
require "../common.php"; 
try 
{ 
    $connection = new PDO($dsn, $username, $password, $options); 

    $new_food = array(
     "foodName" => $_POST['foodName'], 
     "calories" => $_POST['calories'], 
     "proteins"  => $_POST['proteins'], 
     "carbohydrates"  => $_POST['carbohydrates'], 
     "fats" => $_POST['fats'] 
    ); 
    $sql = sprintf(
      "INSERT INTO %s (%s) values (%s)", 
      "foodnames", 
      implode(", ", array_keys($new_food)), 
      ":" . implode(", :", array_keys($new_food)) 
    ); 

    $statement = $connection->prepare($sql); 
    $statement->execute($new_food); 
} 
catch(PDOException $error) 
{ 
    echo $sql . "<br>" . $error->getMessage(); 
} 

    } 
?> 

<?php require "templates/header.php"; ?> 

<?php 
if (isset($_POST['submit']) && $statement) 
{ ?> 
<blockquote><?php echo $_POST['foodName']; ?> successfully added. 
</blockquote> 
<?php 
} ?> 

<h2>Add a food</h2> 

<form method="post"> 
<label for="foodName">Foods Name</label> 
<input type="text" name="foodName" id="foodName"> 
<label for="calories">Calories per 100 grams</label> 
<input type="text" name="calories" id="calories"> 
<label for="proteins">Proteins in %</label> 
<input type="text" name="proteins" id="proteins"> 
<label for="carbohydrates">Carbohydrates in %</label> 
<input type="text" name="carbohydrates" id="carbohydrates"> 
<label for="fats">Fats in %</label> 
<input type="text" name="fats" id="fats"> 
<input type="submit" name="submit" value="Submit"> 
</form> 

<a href="index.php">Back to home</a> 

<?php require "templates/footer.php"; ?> 

なぜこれはfood.foodnamesを探していますか? test.foodnamesの代わりに、正しい構文は何でしょうか?前述したように、テストデータベースは1つしかなく(食物データベースは存在しません)、テーブルのフードネームはそこにあります。さらに

私はデータベースから読み取るしようとしたとき、私は次のエラーを取得する

お知らせ:未定義のインデックス:Cでのユーザ入力:ライン19 SELECTの\ xamppの\ htdocsに\パブリック\のread.php * foodnames FROM WHERE FoodName LIKE:無効パラメータ番号:パラメータが定義されていなかった

注意:未定義の変数:Cにおける結果:\ XAMPP \ htdocsに公共の\ read.php \ライン37には SQLSTATE [HY093] USER_INPUT通知の結果:未定義インデックス: の場所C:\ xampp \ htdocs \ public \ read.php用

<?php 
/** 
* Function to query information based on 
* a parameter: in this case, food name. 
* 
*/ 
if (isset($_POST['submit'])) 
{ 

try 
{ 

    require "../config.php"; 
    require "../common.php"; 
    $connection = new PDO($dsn, $username, $password, $options); 
    $sql = "SELECT * 
        FROM foodnames 
        WHERE FoodName LIKE :user_input"; 
    $userInput = $_POST['userInput'] . '%'; 
    $statement = $connection->prepare($sql); 
    $statement->bindParam(':FoodName', $userInput, PDO::PARAM_STR); 
    $statement->execute(); 
    $result = $statement->fetchAll(); 
} 

catch(PDOException $error) 
{ 
    echo $sql . "<br>" . $error->getMessage(); 
} 
} 
?> 
<?php require "templates/header.php"; ?> 

<?php 
if (isset($_POST['submit'])) 
{ 
if ($result && $statement->rowCount() > 0) 
{ ?> 
    <h2>Results</h2> 

    <table> 
     <thead> 
      <tr> 
       <th>#</th> 
       <th>Food Name</th> 
       <th>Calories/100g</th> 
       <th>Proteins</th> 
       <th>Carbohydrates</th> 
       <th>Fats</th> 
       <th>Time to burn by running</th> 
      </tr> 
     </thead> 
     <tbody> 
    <?php 
    foreach ($result as $row) 
    { ?> 
     <tr> 
      <td><?php echo escape($row["id"]); ?></td> 
      <td><?php echo escape($row["foodNAme"]); ?></td> 
      <td><?php echo escape($row["calories"]); ?></td> 
      <td><?php echo escape($row["proteins"]); ?></td> 
      <td><?php echo escape($row["carbohydrates"]); ?></td> 
      <td><?php echo escape($row["fats"]); ?></td> 
      <td><?php echo escape($row["ttb"]); ?> </td> 
     </tr> 
    <?php 
    } ?> 
    </tbody> 
</table> 
<?php 
} 
else 
    { ?> 
    <blockquote>No results found for <?php echo escape($_POST['location']); 
?>.</blockquote> 
<?php 
} 
}?> 

<h2>Find food by name</h2> 




<form method="post"> 
<label for="food">Food</label> 
<input type="text" id="food" name="food"> 
<input type="submit" name="submit" value="View Results"> 
</form> 

<a href="index.php">Back to home</a> 

<?php require "templates/footer.php"; ?> 

申し訳ありません:行に私がしようとしています何74

は、彼が唯一のread.phpコードISTここでは、一つの文字を入力した場合でも、ユーザの入力に基づいてデータベースのエントリを取得することがあります非常に冗長なコード。

+1

'...どこのFoodName LIKE:FoodName'ではなく、user_inputで、PHP変数ではなくパラメータ名を使用する必要があります。 –

+0

そしてインサートの花瓶では、おそらくサーバー上の間違ったデータベースに接続しています。 – Shadow

+0

あなたの設定を見て、私はそれが食べ物だと確信してテストしません。 –

答えて

1

問題はconfigファイルにあります。データベースをテストするためにデータベースを変更する必要があります。つまり、$ db = 'test'です。 //データベースを食品から変更する

+0

LOL、これは恥ずかしがり屋です:-)これは私の最初のdbプロジェクトです、それはすべてを含む悪夢でした。サーバーの構成は変わっていますが、今は動作します:-) 読んだ部分はまだ動作しませんが、ありがとう – ptts

関連する問題