2016-12-06 7 views
-1

Я получаю фатальную ошибку «Исключить исключение« PDOException »с сообщением« SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Имя столбца не может быть нулевым 'в C: \ Users \ Aushkia \ Desktop \ PHP Class \ new.php: 20 Трассировка стека: # 0 C: \ Users \ Aushkia \ Desktop \ PHP Class \ new.php (20): PDOStatement-> execute (Array) # 1 {main} выбрано в C: \ Users \ Aushkia \ Desktop \ PHP Class \ new.php в строке 20 "Как сохранить пользовательский ввод в mySQL, получив FATAL ERROR (php)

А также он говорит, что мой индекс для строк 5-7 - Undefined Index.

Это мой последний проект для этого класса, и я не могу найти способ решить эту проблему, и все, что я искал, это для другого python или java. И для загрузки я должен быть в больнице через полтора часа для рождения моего ребенка! лол. Во всяком случае, вот мой код, любая помощь будет потрясающей, спасибо заранее!

<?php 
session_start(); 

/* Data input */ 
$Name = $_POST['Name']; 
$Description = $_POST['Description']; 
$Price = $_POST['Price']; 


/* login section */ 

require("auth.php"); 

/* sql input */ 

$db = new PDO("mysql:host=localhost;dbname=php", "admin", "123"); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$stmnt = $db->prepare("insert into products (name, description, price)values(:name, :description, :price)"); 
$stmnt->execute(array('name' => $Name, 'description' => $Description, 'price' => $Price)); 


$results = $db->query('select * from products'); 

$products = $results->fetchAll(); 


?> 
<!DOCTYPE HTML> 
<!-- UPDATED TO AUTHENTIACTION --> 
<html> 

<head> 
<meta charset="utf-8"> 
<title>new item</title> 
<meta name="viewport" content="width=device-width"> 
<link rel="stylesheet" href="stl.css" type="text/css" media="screen" charset="utf-8"> 
</head> 
<p> 
<a href="show.php" class="button">Home</a> 
<a href="new.php" class="button">Add New</a> 
<a href="login.view.php" class="button">Login</a> 
<a href="logout.php" class="button">Logout</a> 
</P> 
<body> 


<div align="Center"> 

<h1>item info</h1><hr/> 



<form action="new.php" method="post"> 


<label for="name">Name:</label><br /> 
<input name="name" type="text" placeholder="Name" value="" id="Name"> 
<br /> 

<label for="desciption">Description :</label><br /> 
<input name="desciption" type="text" placeholder="Description" value="" id="Description"> 
<br /> 

<label for="price">Price :</label><br /> 
<input name="price" type="text" placeholder="Price" value="" id="Price"> 
<br /> 



<p><input type="submit" value="save"></p> 

</form> 


</div> 
</body> 
</html> 
+5

ошибка говорит само за себя, вы должны быть в состоянии решить это –

+0

Вам, скорее всего, нужно будет поместить весь код '$ _POST' и код вставки базы данных в блок, где вы проверяете, был ли сделан фактический запрос POST. – jeroen

+0

По всей видимости, ошибка довольно понятна, поскольку @ kapil.dev сказал. – Andrew

ответ

0

Вы должны научиться отлаживать свой код, ошибка и уведомление, котор вы получаете самообъясняющие как они сказали в комментариях.

Сначала неопределенные индексы замечают

Undefined индекс означает, что запись не была найдена в массиве. В ваш случай, $ _POST ['Name'], $ _POST ['Description']; $ _POST ['Price'] не существует в массиве $ _POST.

в вашей форме у вас нет типа ввода с указанными выше атрибутами имени. NB есть тонкая грань между именем и именем, ценой и ценой, описанием и описанием.

Вы получаете фатальную ошибку в pdo, потому что вы вставляете нулевое значение в столбец, который должен быть не нулевым. основание вашей ошибки приходит из приведенного выше объяснения,

PDO использует подготовленные операторы с заполнителями, как:

:placeholdername,:placeholdername2 

при выполнении их вы пишете заполнитель, как это

execute(array(':placeholdername'=>$identifiers,':placeholdername2'=>identifier2) 

в вашем Случай $stmnt->execute(array('name' => $Name, 'description' => $Description, 'price' => $Price)); не существует.

или вы используете "?" как заполнитель:

ваш код должен быть

<?php 
session_start(); 
/* login section */ 

require("auth.php"); 

/* sql input */ 

$db = new PDO("mysql:host=localhost;dbname=php", "admin", "123"); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$errors = ""; 

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

    //check if inputs are not empty 

    if (empty($_POST['name'])) { 

     echo "enter name"; 
     $errors++; 
    } else { 

     $Name = $_POST['name']; 
    } 

    if (empty($_POST['desciption'])) { 

     echo "enter desciption"; 
     $errors++; 
    } else { 

     $Description = $_POST['desciption']; 
    } 

    if (empty($_POST['price'])) { 

     echo "enter price"; 
     $errors++; 
    } else { 

     $Price = $_POST['price']; 
    } 


    if ($errors <= 0) { 
     //No errors insert 

     try { 

      $stmnt = $db->prepare("insert into products (name, description, price)values(:name, :description, :price)"); 
     $stmnt->execute(array(
      ':name' => $Name, 
      ':description' => $Description, 
      ':price' => $Price 
     )); 

     echo "records added"; 

     } catch (PDOException $e) { 


      echo "error : ".$e->getMessage(); 

     } 



    } 


} 
?> 



<!DOCTYPE HTML> 
<!-- UPDATED TO AUTHENTIACTION --> 
<html> 

<head> 
<meta charset="utf-8"> 
<title>new item</title> 
<meta name="viewport" content="width=device-width"> 
<link rel="stylesheet" href="stl.css" type="text/css" media="screen" charset="utf-8"> 
</head> 
<p> 
<a href="show.php" class="button">Home</a> 
<a href="new.php" class="button">Add New</a> 
<a href="login.view.php" class="button">Login</a> 
<a href="logout.php" class="button">Logout</a> 
</P> 
<body> 


<div align="Center"> 

<h1>item info</h1><hr/> 



<form action="new.php" method="post"> 


<label for="name">Name:</label><br /> 
<input name="name" type="text" placeholder="Name" value="" id="Name"> 
<br /> 

<label for="desciption">Description :</label><br /> 
<input name="desciption" type="text" placeholder="Description" value="" id="Description"> 
<br /> 

<label for="price">Price :</label><br /> 
<input name="price" type="text" placeholder="Price" value="" id="Price"> 
<br /> 

<p><input type="submit" value="save" name="btnName"></p> 

</form> 


</div> 
</body> 
</html> 

Или с "?" заполнители

<?php 
session_start(); 
/* login section */ 

require("auth.php"); 

/* sql input */ 

$db = new PDO("mysql:host=localhost;dbname=php", "admin", "123"); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$errors = ""; 

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

    //check if inputs are not empty 

    if (empty($_POST['name'])) { 

     echo "enter name"; 
     $errors++; 
    } else { 

     $Name = $_POST['name']; 
    } 

    if (empty($_POST['desciption'])) { 

     echo "enter desciption"; 
     $errors++; 
    } else { 

     $Description = $_POST['desciption']; 
    } 

    if (empty($_POST['price'])) { 

     echo "enter price"; 
     $errors++; 
    } else { 

     $Price = $_POST['price']; 
    } 


    if ($errors <= 0) { 
     //No errors insert 

     try { 

      $stmnt = $db->prepare("insert into products (name, description, price)values(?,?,?)"); 
     $stmnt->execute(array($Name,$Description,$Price)); 

     echo "records added"; 

     } catch (PDOException $e) { 


      echo "error : ".$e->getMessage(); 

     } 



    } 


} 
?> 

NB: для вашей собственной пользы, лучше фильтровать и дезинфицировать вход с пользователя перед и может сохранить его

+0

Yo @MasivuyeCokile благодарит человека, только что вернулся из больницы сегодня. путь профессора был другим, и это легче читать/понимать. – Aushkia

+0

@Aushkia, если это помогло вам решить вашу проблему, upvote затем отметит как правильный, чтобы мы могли знать, что вы нашли решение –