

PHPでECサイトを作成しております。  
データベースにデータを登録する処理を作成したにもかかわらず、  
データが登録できない状態になっております。  
[![画像の説明をここに入力](https://i.stack.imgur.com/GJhVh.png)](https://i.stack.imgur.com/GJhVh.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/5K0qG.png)](https://i.stack.imgur.com/5K0qG.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/NXQbc.png)](https://i.stack.imgur.com/NXQbc.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/enN0s.png)](https://i.stack.imgur.com/enN0s.png)

一応var_dumpで該当データの中身を確認したり、  
処理を修正したり、SQL文のスペルなどを確認しました。  
その結果、$_POSTの中身には値が入っていることが判明しました。  
明確な仮説として、INSERT文の中身が間違っているのではないかと考えています。  
更に、Notice: Undefined indexとNotice: Undefined variableエラーも発生しました。  
phpMyAdminで該当のSQLを実行しましたが、エラーが発生しました。

[code]

    エラー
    SQL クエリ:
    
    
    INSERT INTO item(name, price, img, status, created_date, updated_date) VALUES('テスト','130','','0','2021-11-18 11:39:42','2021-11-18 11:39:42')
    MySQL のメッセージ: ドキュメント
    
    #1062 - '0' は key 'PRIMARY' において重複しています
    
[/code]

また、CREATE文の書き方がわからないので、itemテーブルの構造は直接テキストで書きます。

[code]

        #   名前  データ型    照合順序    属性  NULL    デフォルト値  コメント    その他 操作
        1   id主 int(11)         いいえ なし          変更 変更   削除 削除   
    その他 その他
        2   name    varchar(20) utf8_general_ci     いいえ なし          変更 変更   削除 削除   
    その他 その他
        3   price   int(11)         いいえ なし          変更 変更   削除 削除   
    その他 その他
        4   img varchar(20) utf8_general_ci     いいえ なし          変更 変更   削除 削除   
    その他 その他
        5   status  int(11)         いいえ なし          変更 変更   削除 削除   
    その他 その他
        6   created_date    datetime            いいえ なし          変更 変更   削除 削除   
    その他 その他
        7   updated_date    datetime            いいえ なし          変更 変更   削除 削除   
    その他 その他
    
[/code]

お手数をおかけしますがデータベースのデータの保存の仕方、エラーの直し方について、ご教授お願い致します。

ソースコード  
functions.php

[code]

     <?php
     require_once('../../include/conf/const.php');
    
    function get_db_connect() {
     
    if (!$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD, DB_NAME)) {
            die('error: ' . mysqli_connect_error());
        }
        mysqli_set_charset($link, DB_CHARACTER_SET);
        return $link;
    }
    
    function close_db_connect($link) {
    
        mysqli_close($link);
    }
    
    function insert_item($link) {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        return;
    }
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'insert') {
            
            
            if (isset($_POST['new_name']) === TRUE) {
                
                $new_name = $_POST['new_name'];
            }
            
               var_dump($_POST['new_name']);
            
            if (isset($_POST['new_price']) === TRUE) {
            
                $new_price = $_POST['new_price'];
                
            }
            
               var_dump($_POST['new_price']);
            
             if ($_FILES['new_img']['error'] === UPLOAD_ERR_OK) {
    
                if (count($err_msg) === 0) {
    
                    $chk_picture = getimagesize($_FILES['new_img']['tmp_name']);
    
                    if ($chk_picture['mime'] === 'image/png' || $chk_picture['mime'] === 'image/jpeg') {
    
                        if ($chk_picture[0] <= 500 && ($chk_picture[1] <= 500)) {
    
                            $mime = $chk_picture['mime'];
                            switch ($mime) {
                                case 'image/png':
                                    $type = '.png';
                                    break;
                                case 'image/jpeg':
                                    $type = '.jpg';
                                    break;
                            }
    
                            $upload = $uploaddir . date('YmdHis') . rand(0, 10000) . $type;
                            
                            move_uploaded_file($_FILES['new_img']['tmp_name'], $upload);
                        } else {
                            $err_msg[] = 'ファイルは縦と横500px以内にしてください';
                        }
                    } else {
                        $err_msg[] = 'PNGかJPEG形式のファイルをアップロードしてください';
                    }
                }
            } else {
                $err_msg[] = 'ファイルを選択してください';
            }
    
            
            if (isset($_POST['new_status']) === TRUE) {
            if ((int) $_POST['new_status'] === 0 || (int) $_POST['new_status'] === 1) {
                 
                 $new_status = (int) $_POST['new_status'];
            }
                
            }
            var_dump($_POST['new_status']);
        
            
                $new_time = date('Y-m-d H:i:s');
            var_dump($new_time);
                
                
                $sql = 'INSERT INTO item(name, price, img, status, created_date, updated_date) VALUES(\''.$new_name.'\',\''.$new_price.'\',\''.$new_img.'\',\''.$new_status.'\',\''.$new_time.'\',\''.$new_time.'\')';
              var_dump($sql);
                if ($result = mysqli_query($link, $sql) === TRUE) {
    
                } else {
                    $err_msg[] = 'DBエラーが発生しました。';
                    return $err_msg;
                    
                    
                }
                    
                }
        }
    
    
            
    // function update_drink($link) {
    //     if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'update') {
    
    //         if (isset($_POST['stock']) === TRUE) {
                
    //                 $update_stock = (int)($_POST['stock']);
    
    //                 $update_time = date('Y-m-d H:i:s');
    
    //                 $update_id = $_POST['drink_id'];
    
    //                 $sql = 'UPDATE drink_info_table SET stock = ' . $update_stock . ', updated_at = \'' . $update_time . '\' WHERE drink_id = ' . $update_id;
                    
    //                 if ($result = mysqli_query($link, $sql) === TRUE) {
    //                 } else {
    //                   $err_msg[] = 'DBエラーが発生しました。';
    //                   return $err_msg;
    //                 }
    //                 }
    //         }
    // }
    
    // function update_drink2($link) {
    //     if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'update') {
    //     if (isset($_POST['stock']) === TRUE) {
    //     $change_id = $_POST['drink_id'];
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM drink_info_table WHERE status = 1 AND drink_id ='  . $change_id;
    //     $sql= 'UPDATE drink_info_table SET stock  = stock -1 WHERE drink_id = ' . $change_id;
    //     $data = [];
    //     mysqli_query($link, $sql);
    //         }
    // }
    // }
    
    // function update_drink3($link) {
    //     if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'update') {
    //     $change_id = $_POST['drink_id'];
    //     $update_time =  date('Y/m/d H:i:s');
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM drink_info_table WHERE status = 1 AND drink_id ='  . $change_id;
    //     $sql= 'INSERT INTO drink_history_table(drink_id, purchased_at) VALUES(\''.$change_id.'\',\''.$update_time.'\')';
    //     $data = [];
    //     mysqli_query($link, $sql);
            
    // }
    // }
    
    
    
    
    
    // function change_drink($link) {
    //     if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'change') {
    
    //         if (isset($_POST['change_status']) === TRUE) {
    //             if ((int) $_POST['change_status'] === 0 || (int) $_POST['change_status'] === 1) {
    //                 $change_id = $_POST['drink_id'];
    //                 $change_status = (int) $_POST['change_status'];
    
    //                 $change_time = date('Y-m-d H:i:s');
    
    //                 $sql = 'UPDATE drink_info_table SET status = ' . $change_status . ' WHERE drink_id = ' . $change_id;
    
    
    //                 if ($result = mysqli_query($link, $sql) === TRUE) {
                        
    //                 } else {
    //                     $err_msg[] = 'ステータスの変更に失敗しました';
    //                 }
    //             } else {
    //                 $err_msg[] = 'ステータスは公開か非公開を選択してください';
    //                 return $err_msg;
    //             }
    //         }
    //     }
        
    // }
    
    
    
    function do_sql($link) {
        $sql = 'SELECT item.name, item.price, item.img, item.status, item.created_date, item.updated_date FROM item';
        $data = [];
        if ($result = mysqli_query($link, $sql)) {
            while ($row = mysqli_fetch_array($result)) {
                $data[] = $row;
            }
        } else {
            $err_msg[] = 'データの抽出に失敗しました';
        }
        return $data;
    }
    
    // function names_sql($link) {
    //     $change_id = $_POST['drink_id'];
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM drink_info_table WHERE status = 1 AND drink_id ='  . $change_id;
    //     $data = [];
    //     if ($result = mysqli_query($link, $sql)) {
    //         while ($row = mysqli_fetch_array($result)) {
    //             $data[] = $row;
    //         }
    //     } else {
    //         $err_msg[] = 'データの抽出に失敗しました';
    //     }
    //      foreach ($data as $info) {
    //               $drink_name = $info['drink_name'];
    //      }
    //     return $drink_name;
    // }
    
    // function prices_sql($link) {
    //     $change_id = $_POST['drink_id'];
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM  drink_info_table WHERE status = 1  AND drink_id ='  . $change_id;
    //     $data = [];
    //     if ($result = mysqli_query($link, $sql)) {
    //         while ($row = mysqli_fetch_array($result)) {
    //             $data[] = $row;
    //         }
    //     } else {
    //         $err_msg[] = 'データの抽出に失敗しました';
    //     }
    //      foreach ($data as $info) {
    //                 $price = (int) $info['price'];
    //                 $money = $_POST['money'];
    //                 $return = $money - $price;
    //      }
    //          return $return;
    // }
    
    // function prices_check_sql($link)  {
    //     if (!empty($_POST['drink_id'])) {
    //     $change_id = $_POST['drink_id'];
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM  drink_info_table WHERE status = 1  AND drink_id ='  . $change_id;
    //     $data = [];
    //     if ($result = mysqli_query($link, $sql)) {
    //         while ($row = mysqli_fetch_array($result)) {
    //             $data[] = $row;
    //         }
    //     } else {
    //         $err_msg[] = 'データの抽出に失敗しました';
    //     }
    //     foreach ($data as $info) {
    //                 $price = (int) $info['price'];
    //                 $money = $_POST['money'];
    //                 if ($price > $money) {
    //                 $err_msg = 'お金が足りません。';
    //                 return $err_msg;
    //     }
    //   }
    //  }
    
    // }
    
    
    // function does_sql($link) {
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM drink_info_table WHERE status = 1';
    //     $data = [];
    //     if ($result = mysqli_query($link, $sql)) {
    //         while ($row = mysqli_fetch_array($result)) {
    //             $data[] = $row;
    //         }
    //     } else {
    //         $err_msg[] = 'データの抽出に失敗しました';
    //     }
    //     return $data;
    // }
    
    // function stock_check($link) {
    //     if (!empty($_POST['drink_id'])) {
    //     $change_id = $_POST['drink_id'];
    //     $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status
    //     FROM drink_info_table WHERE status = 1 AND drink_id ='  . $change_id;
    //     $data = [];
    //     if ($result = mysqli_query($link, $sql)) {
    //         while ($row = mysqli_fetch_array($result)) {
    //             $data[] = $row;
    //         }
    //     } else {
    //         $err_msg[] = 'データの抽出に失敗しました';
    //     }
    //   foreach ($data as $info) {
    //         if (!empty($info['stock'])) {
    //         $stock = (int) $info['stock'];
    //     }
    //   }
    //     if ($stock === 0) {
    //         $err_msg = '申し訳ございませんが、現在在庫切れです。';
    //         return $err_msg;
    //      }
    //  }
    
    // }
    
    function complete_check_insert($link) {
        $complete_msg[] = '追加登録完了!';
        return $complete_msg;
    }
    
    function complete_check_update($link) {
        $complete_msg[] = '在庫数更新完了!';
        return $complete_msg;
    }
    
    function complete_check_change($link) {
        $complete_msg[] = 'ステータス変更完了!';
        return $complete_msg;
    }
    
    function validation_check($link) {
      $err_msg = [];
      if (!isset($_POST['new_name']) || (isset($_POST['new_name']) && $_POST['new_name'] === ""))  {
         $err_msg[] = '商品名を入力してください。';
        }
        
        if (!isset($_POST['new_price']) || (isset($_POST['new_price']) && $_POST['new_price'] === "")) {
         $err_msg[] = '値段を入力してください';
        } else if(preg_match('/^[0-9]+$/',($_POST['new_price'])) !== 1) {
         $err_msg[] = '値段は0以上の半角整数を入力してください';
        }
        
        if (!isset($_POST['new_stock']) || (isset($_POST['new_stock']) && $_POST['new_stock'] === "")) {
         $err_msg[] = '在庫を入力してください';
        } else if(preg_match('/^[0-9]+$/',($_POST['new_stock'])) !== 1) {
         $err_msg[] = '在庫は0以上の半角整数を入力してください';
        }
        
        if (!empty($_POST["new_status"])) {
        if ((int) $_POST['new_status'] === 2) {
         $err_msg[] = 'ステータスは公開か非公開を選択してください'; 
        }
        }
    return $err_msg;
    }
    
    function validation_check2($link) {
        if (!empty($_POST["update_stock"])) {
        if (preg_match('/^[0-9]+$/',($_POST['stock'])) !== 1){ 
         $err_msg = [];
         $err_msg[] = '0以上の半角整数を入力してください';
         return $err_msg;
        }
        
    
    }
     }
    
[/code]

tool.php

[code]

    <?php
    $data = [];
    require_once('../../include/conf/const.php');
    require_once('../../include/model/functions.php');
    $link = get_db_connect();
    if (isset($_POST['add'])) {
        $err_msg = validation_check($link);
         if ($err_msg == [])   {
            $data = insert_item($link);
            $complete_msg = complete_check_insert($link);
        }
        }
        
        if (isset($_POST['renew'])) {
        $err_msg = validation_check2($link);
        if ($err_msg == [])  {
            $data = update_drink($link);
            var_dump($data);
            $complete_msg = complete_check_update($link);
        }
        
        }
        
        if (isset($_POST['change'])) {
            $data = change_drink($link);
            $complete_msg = complete_check_change($link);
        }
        if (count($err_msg) !== 0)  {
            foreach ($err_msg as $err) { ?>
                <p><?php print $err; ?></p> 
        <?php }
        }
        
        if (count($complete_msg) !== 0)  {
            foreach ((array)$complete_msg as $comp) { ?>
                <p><?php print $comp; ?></p> 
        <?php }
        }
    $data = do_sql($link);
    require_once('../../include/view/tool2.php');
    
    close_db_connect($link);
    
[/code]

tool2.php

[code]

    <!DOCTYPE html>
    <?php require_once('../../htdocs/mvc/tool.php');?>
    <html lang="ja">
    
    <head>
        <meta charset="UTF-8">
        <title>自動販売機商品管理</title>
    </head>
    
    <body>
    
        <h1>自動販売機管理ツール</h1>
    
        <section>
            <h2>新規商品追加</h2>
    
            <form action="tool.php" method="post" enctype="multipart/form-data">
                <label>名前: <input type="text" name="new_name" size="30" /></label><br>
                <label>値段: <input type="text" name="new_price" size="30" /></label><br>
                <label>個数: <input type="text" name="new_stock" size="30" /></label><br>
                <input type="file" name="img" accept="image/jpeg, image/png, image/gif" /><br>
                <select name="new_status"><br>
                    <option value="0">非公開</option>
                    <option value="1">公開</option>
                    <option value="2">入力チェック用</option>
                </select><br>
                <input type="hidden" name="sql_kind" value="insert">
                <input type="submit" name="add" value="■□■□商品追加■□■□" />
            </form>
    
        </section>
    
        <section>
            <h2>商品情報変更</h2>
            <table>
                <caption>商品一覧</caption>
                <tbody>
                    <tr>
                        <th>商品名</th>
                        <th>価格</th>
                        <th>在庫数</th>
                        <th>ステータス</th>
                    </tr>
                    <?php 
                    if (empty($data) !== TRUE) {
                        foreach ((array)$data as $list) {
                            if ((int) $list['status'] === 0) { ?>
                                <tr class="status_0">
                                <?php } else { ?>
                                <tr>
                                <?php } ?>
                                <? php print htmlspecialchars($list,ENT_QUOTES,'UTF-8'); ?>
                                <!--<td><img class="img" src="<?PHP print $list['path']; ?>"></td>-->
                                <!--<td class="d_name"><?php print $list['drink_name']; ?></td>-->
                                <td class="d_price"><?php print $list['price']; ?></td>
                                <td>
                                    <form method="post">
                                        <!--<input type="text" class="input_text_width text_align_right" name="update_stock" value="<?php print $list['stock']; ?>">個-->
                                        <!--<br>-->
                                        <input type="submit" name="renew" value="変更">
                                        <input type="hidden" name="sql_kind" value="update">
                                    </form>
                                </td>
    
                                <?php if ((int) $list['status'] === 0) { ?>
                                    <td class="d_status">
                                        <form method="post">
                                            <input type="submit" name="change" value="非公開 → 公開">
                                            <input type="hidden" name="change_status" value="1">
                                            <input type="hidden" name="sql_kind" value="change">
                                        </form>
                                    </td>
                                </tr>
                            <?php } else { ?>
                                <td class="d_status">
                                    <form method="post">
                                        <input type="submit"  name="change" value="公開 → 非公開">
                                        <input type="hidden" name="change_status" value="0">
                                        <input type="hidden" name="id" value="<?php print $list['id']; ?>">
                                        <input type="hidden" name="sql_kind" value="change">
                                    </form>
                                </td>
                                </tr>
                    <?php }
                            }
                        } ?>
    
                </tbody>
            </table>
        </section>
    </body>
    
    </html>
    
[/code]

const.php

[code]

    <?php
    $err_msg = [];
    $complete_msg = [];
    $data = [];
    
    define('DB_HOST',   ''); // データベースのホスト名又はIPアドレス
    define('DB_USER',   '');  // MySQLのユーザ名
    define('DB_PASSWD', '');    // MySQLのパスワード
    define('DB_NAME',   '');    // データベース名
    
    define('HTML_CHARACTER_SET', 'UTF-8');  // HTML文字エンコーディング
    define('DB_CHARACTER_SET',   'UTF8');   // DB文字エンコーディング
    
    date_default_timezone_set('Asia/Tokyo');
    
[/code]


CC BY-SA 4.0
2021-11-18T01:55:15.337
83687
2021-11-18T03:07:11.293
2021-11-18T03:07:11.293
3060
48303
question
mysql
データベースにデータを登録することが出来ない。


idのフィールドに [AUTO_INCREMENT](https://dev.mysql.com/doc/refman/5.6/ja/example-
auto-increment.html) の設定がされていないため、  
idにデフォルトの0を代入しようとして、Primaryによりはじかれてます。

リファレンスに習いAUTO_INCREMENTをつけてみましょう。

ヒントとして上記ページの

> AUTO_INCREMENT に関する詳細の参照先を次に示します。
>
>   * カラムに AUTO_INCREMENT 属性を割り当てる方法: セクション13.1.17「CREATE
> TABLE構文」、およびセクション13.1.7「ALTER TABLE 構文」。
>

という部分があると思いますので、その先のページで設定の仕方を確認してみましょう。

デバック方法の基本として、うまく動かないことが発生したらまずはPHPなのかMySQLの問題なのか区別して、MySQLの問題であればSQLをMySQLで実行しながらSQLの作成＆デバックを行いましょう。  
うまくSQLが動くようになったらそれをPHPで作成するようにプログラミングします。


CC BY-SA 4.0
2021-11-18T02:57:28.473
83688
2021-11-18T03:06:57.023
2021-11-18T03:06:57.023
3060
22665
83687
answer