Вставить данные формы в базу данных с помощью Php и PDO

У меня проблемы со вставкой данных в базу данных mysql с помощью pdo и php. Я много чего пробовал в Интернете, но, похоже, ничего не работает.

Вот что у меня самое близкое к работе:

Подключение к базе данных:

<?php
    class Database
 {

private static $dbName = 'gildeuitleen' ;
private static $dbHost = 'localhost' ;
private static $dbUsername = 'root';
private static $dbUserPassword = 'root';

private static $cont  = null;

public function __construct() {
    die('Init function is not allowed');
}

public static function connect()
{

   if ( null == self::$cont )
   {     
    try
    {
      //Connectie maken
      self::$cont =  new PDO( "mysql:host = ".self::$dbHost.";"."dbname = ".self::$dbName, self::$dbUsername, self::$dbUserPassword); 
    }
    catch(PDOException $e)
    {
      die($e->getMessage()); 
    }
   }
   return self::$cont;
}

public static function disconnect()
{
    self::$cont = null;
}
  }
  ?>

Форма:

<form method = "post" action = "add.php">
                <input type = "text" name = "Barcode" placeholder = "Barcode" required><br>
                <select name = "Product">
                  <option value = "laptop">Laptop</option>
                  <option value = "beamer">Beamer</option>
                </select><br>
                <select name = "Vestiging">
                  <option value = "venlo">Venlo</option>
                  <option value = "Venray">Venray</option>
                  <option value = "Roermond">Roermond</option>
                  <option value = "Weert">Weert</option>
                </select> <br>
                <input type = "text" name = "Datumuitgave" placeholder = "JJJJ-MM-DD" required><br>
                <input type = "text" name = "Datumteruggave" placeholder = "JJJJ-MM-DD" required><br>
                <input type = "text" name = "Persoonlijknummer" placeholder = "Persoonlijk nummer" required><br>
                <input type = "submit" value = "Toevoegen">


            </form>

Файл add.php:

 <?php

        include 'includes/database-inc.php';

        $pdo = Database::connect();

        try{

            $query = "INSERT INTO leningen (Barcode, Product, Vestiging, Datum uitgave, Datum teruggave, Persoonlijk nummer huurder) VALUES (?, ?, ?, ?, ?, ?)"; 

            $stmt = $pdo->prepare($query);   

            $stmt->execute();

            header('Location: OverzichtProducten.php?succes');
            exit();

            }


        catch(PDOException $exception){

            die('ERROR: ' . $exception->getMessage());

    }
    ?>

Кто-нибудь знает, что здесь происходит не так? Он отправляет меня обратно на страницу как обычно, но ничего не добавляет в базу данных.

Как запрос должен знать, что такое VALUES (?, ?, ?, ?, ?, ?)?

B001ᛦ 08.05.2018 11:09

вы подготовили запрос, но не загрузили все значения при выполнении

Kevin 08.05.2018 11:10

Вы забыли связать ценности.

Himanshu Upadhyay 08.05.2018 11:10

Вы не должны умирать в конструкторе, и, как сказал B001, вы должны привязать значения к?. например. $ stmt-> execute (array ("val1, val2, val3, etc"));

Denis Solakovic 08.05.2018 11:12

roytuts.com/rest-api-crud-example-in-php-mysql/

user3470953 08.05.2018 11:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
949
2

Ответы 2

это даст вам ваши "качки"

РЕДАКТИРОВАТЬ для проверки: запустите это как отдельный URL, игнорируйте форму и т. д.

НАПРИМЕР:

сохранить файл как bob.php посетите http://myurl.com/bob.php, убедитесь, что включение includes/database-inc.php "доступно для поиска", а затем опубликуйте результат

<?php

    include 'includes/database-inc.php';

    $pdo = Database::connect();

    try{

        $query = "INSERT INTO leningen ";
        $query += " (`Barcode`, `Product`, `Vestiging`, `Datum uitgave`, `Datum teruggave`, `Persoonlijk nummer huurder`) ";
        $query += "VALUES (:barcode, :product, :vestiging, :datum_uitgave, :datum_teruggave, :persoonlijk_nummer)"; 

        $stmt = $pdo->prepare($query);   

        $stmt->execute(array(
          "barcode" => "Bob",
          "product" => "Bob",
          "vestiging" => "Bob",
          "datum_uitgave" => "Bob",
          "datum_teruggave" => "Bob",
          "persoonlijk_nummer" => "Bob"
        ));

        echo "Success";
    }
    catch(PDOException $exception){
        die('ERROR: ' . $exception->getMessage());
    }
    catch (Exception $exception) {
       die('General Error: '.$exception->getMessage());
    }
?>

также создайте $cont static public и вызовите $ pdo-> cont-> prepare ();

К сожалению, результат тот же :(

Judith Otten 08.05.2018 11:39

тогда ваша проблема не в PDO, а есть другие проблемы. EG: может ли база данных подключаться с использованием этих учетных данных? Я бы избавился от перенаправления header/exit, он вызывает много беспорядка. см. сообщение об ошибке на экране. (Я отвлекся, но гораздо лучше использовать include в том месте, куда вы идете, но вам нужно спроектировать все решение вокруг этого).

Mr Heelis 08.05.2018 11:43

Я добавил general exception в уловку, чтобы помочь вам

Mr Heelis 08.05.2018 11:44

Сама база данных может подключаться, она корректно отображает данные на другой странице. Я не уверен, что он также подключается, чтобы добавить tho. Я все еще новичок во всем этом: p

Judith Otten 08.05.2018 11:54

где твой class Database ->prepare method()??

Mr Heelis 08.05.2018 11:59

Где должен быть этот метод подготовки? Еще раз извините, у меня нет опыта работы с базами данных

Judith Otten 08.05.2018 12:13
self::$cont - объект PDO. В нем есть ->prepare() и ->execute(), объект Database, который вы называете $pdo, на самом деле не является PDO(), его контейнером, а PDO в $cont ... т.е. ссылка prepare() сама по себе не существует на этом уровне объекта, на который вы ссылаетесь, но $pdo->cont->prepare() делает (если вы сделаете это общедоступным)
Mr Heelis 08.05.2018 13:20

Я пытаюсь сказать, что строка $pdo->prepare() является незаконной, если вы не создадите метод, который является вашим class Database, поэтому я подозреваю, что он не работает до его запуска, но поскольку вы ТОЛЬКО ЛОВАЕТЕ $PDOExceptions, а не ванильный $Exceptions, вы не можете увидеть ошибку! это исключение PHP, когда вы ссылаетесь на метод в классе, который не существует

Mr Heelis 08.05.2018 13:23
<form method = "post" action = "add.php">
            <input type = "text" name = "Barcode" placeholder = "Barcode" required><br>
            <select name = "Product">
              <option value = "laptop">Laptop</option>
              <option value = "beamer">Beamer</option>
            </select><br>
            <select name = "Vestiging">
              <option value = "venlo">Venlo</option>
              <option value = "Venray">Venray</option>
              <option value = "Roermond">Roermond</option>
              <option value = "Weert">Weert</option>
            </select> <br>
            <input type = "text" name = "Datumuitgave" placeholder = "JJJJ-MM-DD" required><br>
            <input type = "text" name = "Datumteruggave" placeholder = "JJJJ-MM-DD" required><br>
            <input type = "text" name = "Persoonlijknummer" placeholder = "Persoonlijk nummer" required><br>
            <input type = "submit"  value = "Toevoegen">


        </form>

The add.php file:

$Barcode= $_POST['Barcode'];    
$Vestiging= $_POST['Vestiging'];    
$Datumuitgave= $_POST['Datumuitgave'];  
$Datumteruggave= $_POST['Datumteruggave'];  
$Persoonlijknummer= $_POST['Persoonlijknummer'];

    include 'includes/database-inc.php';
    $pdo = Database::connect();

    try{

        $query = "INSERT INTO leningen (Barcode, Product, Vestiging, Datum uitgave, Datum teruggave, Persoonlijk nummer huurder) VALUES (:Barcode,Vestiging,:Datumuitgave,:Datumteruggave,:Persoonlijknummer)"; 

        $stmt = $pdo->prepare($query);   
        $stmt->bindparam(":Barcode",$Barcode);
        $stmt->bindparam(":Vestiging",$Vestiging);
        $stmt->bindparam(":Datumuitgave",$Datumuitgave);
        $stmt->bindparam(":Datumteruggave",$Datumteruggave);    
        $stmt->bindparam(":Persoonlijknummer",$Persoonlijknummer);
        $stmt->execute();

        header('Location: OverzichtProducten.php?succes');
        exit();

        }


    catch(PDOException $exception){

        die('ERROR: ' . $exception->getMessage());

}
?>

Другие вопросы по теме