Permalänk

PHP PDO Skriva till databas

Hej,

Jag har skapat en simpel formulär där användaren skriver input och sedan skrivs detta ut, problemet jag får är att inget av detta sker, jag får följande felmeddelanden:

Warning: PDO::prepare(): SQLSTATE[00000]: No error: PDO constructor was not called in C:\Xampp\htdocs\Webb\Formulär.php on line 16

Fatal error: Uncaught Error: Call to a member function execute() on null in C:\Xampp\htdocs\Webb\Formulär.php:18 Stack trace: #0 {main} thrown in C:\Xampp\htdocs\Webb\Formulär.php on line 18

Behöver er hjälp nu för att underlätta felsöknin

Här är koden:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>dblabbd</title> </head> <body> <?php include('dblabb2.php'); if (isset($_POST['submit'])) { // query för att lägga till name i itemtypes $name = $_POST['addType']; $query = "INSERT INTO itemtypes (name) VALUES (:name)"; // filtrera input $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS); $db = new DB(); $sth = $db->prepare($query); if ($sth->execute(array(':name' => $name))) { echo "<h4>Itemtype added</h4>"; } else { // om något går fel skriv ut PDO felmeddelande echo "<h4>Error</h4>"; echo "<pre>" . print_r($sth->errorInfo(), 1) . "</pre>"; } } ?> <h4>Add itemtype</h4> <!--Formulär för kategorier --> <form method="post"> <input type="text" name="addType" placeholder="name"> <input type="submit" name="submit" value="Submit"> </form> <h4>Add item</h4> <!--Formulär för föremål --> <form method="post"> <select name="type"> <?php /* Här hämtas all data från itemtypes tabellen för * att enkelt skapa en lista över existerande itemtype * kategorier till formuläret. * Detta gör även att vi slipper uppdatera vår html när vi * lägger till nya kategorier. */ $query = "SELECT * FROM itemtypes ORDER BY name ASC"; if ($result = $db->query($query)) { while ($row = $result->fetch(PDO::FETCH_NUM)) { // skriv ut varje rad som en <option> echo '<option value="' . $row['0'] . '">' . $row['1'] . '</option>'; } } ?> </select> <input type="text" name="desc" placeholder="description"> <input type="submit" name="addItem" value="Submit"> </form> </body> </html>

Permalänk
Medlem

Hmm så jag antar att du har din databas anslutning i dblabb2.php?
Säker på att den anslutningen fungerar?

Skickades från m.sweclockers.com

Permalänk
Skrivet av P-A:

Hmm så jag antar att du har din databas anslutning i dblabb2.php?
Säker på att den anslutningen fungerar?

Skickades från m.sweclockers.com

Har ändrat min kod en del men jag skriver in alla filer här så kan du kola själv:

formulär.php

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>dblabbd</title> </head> <body> <?php include('dblabb2.php'); if (isset($_POST['submit2'])) { // query för att lägga till name i itemtypes $name2 = $_POST['addType']; $query = "INSERT INTO itemtypes(name) VALUES ($name2)"; // filtrera input $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS); $db = new DB(); $sth = $db->prepare($query); if ($sth->execute(array("$name2" => $name))) { echo "<h4>Itemtype added</h4>"; } else { // om något går fel skriv ut PDO felmeddelande echo "<h4>Error</h4>"; echo "<pre>" . print_r($sth->errorInfo(), 1) . "</pre>"; } } ?> <h4>Add itemtype</h4> <!--Formulär för kategorier --> <form method="post"> <input type="text" name="addType" placeholder="name"> <input type="submit" name="submit2" value="Submit676"> </form> <h4>Add item</h4> <!--Formulär för föremål --> <form method="post"> <select name="type"> <?php /* Här hämtas all data från itemtypes tabellen för * att enkelt skapa en lista över existerande itemtype * kategorier till formuläret. * Detta gör även att vi slipper uppdatera vår html när vi * lägger till nya kategorier. */ $query = "SELECT * FROM itemtypes ORDER BY name ASC"; if ($result = $db->query($query)) { while ($row = $result->fetch(PDO::FETCH_NUM)) { // skriv ut varje rad som en <option> echo '<option value="' . $row['0'] . '">' . $row['1'] . '</option>'; } } ?> </select> <input type="text" name="desc" placeholder="description"> <input type="submit" name="addItem" value="Submit666"> </form> </body> </html>

sdlabb2.php

<?php /* dblabb2.php * extend PDO */ class DB extends PDO { public function __construct($dbname = "dblabb") { try { parent::__construct("mysql:host=localhost;dbname=$dbname;char set=utf8", "DBUSER", "DBPASS"); } catch (Exception $e) { echo "<pre>" . print_r($e, 1) . "</pre>"; } } }

dblabb1.php

<?php /* dblabb1.php */ // inkludera dblabb2 där vi angav mysql-uppgifter include 'dblabb2.php'; // skapa en ny instans av DB $db = new DB(); // En enkel query $query = "SELECT * FROM user"; // Om vi får ett resultat, loopa då igenom detta och skriv ut varje rad if ($result = $db->query($query)) { while ($row = $result->fetch(PDO::FETCH_NUM)) { echo "<pre>" . print_r($row, 1) . "</pre>"; } }

Permalänk
Skrivet av P-A:

Hmm så jag antar att du har din databas anslutning i dblabb2.php?
Säker på att den anslutningen fungerar?

Skickades från m.sweclockers.com

allt som skrivs ut på skärmen:

PDOException Object ( [message:protected] => SQLSTATE[HY000] [1045] Access denied for user 'DBUSER'@'localhost' (using password: YES) [string:Exception:private] => [code:protected] => 1045 [file:protected] => C:\Xampp\htdocs\Webb\dblabb2.php [line:protected] => 8 [trace:Exception:private] => Array ( [0] => Array ( [file] => C:\Xampp\htdocs\Webb\dblabb2.php [line] => 8 [function] => __construct [class] => PDO [type] => -> [args] => Array ( [0] => mysql:host=localhost;dbname=dblabb;char set=utf8 [1] => DBUSER [2] => DBPASS ) ) [1] => Array ( [file] => C:\Xampp\htdocs\Webb\Formulär.php [line] => 14 [function] => __construct [class] => DB [type] => -> [args] => Array ( ) ) ) [previous:Exception:private] => [errorInfo] => ) Warning: PDO::prepare(): SQLSTATE[00000]: No error: PDO constructor was not called in C:\Xampp\htdocs\Webb\Formulär.php on line 16 Fatal error: Uncaught Error: Call to a member function execute() on null in C:\Xampp\htdocs\Webb\Formulär.php:18 Stack trace: #0 {main} thrown in C:\Xampp\htdocs\Webb\Formulär.php on line 18

Permalänk
Medlem
Skrivet av naturaljoin:

PDOException Object ( [message:protected] => SQLSTATE[HY000] [1045] Access denied for user 'DBUSER'@'localhost' (using password: YES)

Du verkar ha anget fel lösenord så kolla det först.

Permalänk
Skrivet av P-A:

Du verkar ha anget fel lösenord så kolla det först.

Men jag har inget lösen på min databas

Permalänk
Skrivet av P-A:

Du verkar ha anget fel lösenord så kolla det först.

Okej du har rätt, fixade nu, gick in I php myadmin och grantade all access.

tack

Permalänk
Medlem

Om du nu inte har lösenord på databasen vid lokal test så kan du ju inte försöka nå den med lösenord
Då får du ju ändra :

parent::__construct("mysql:host=localhost;dbname=$dbname;char set=utf8", "DBUSER", "DBPASS"); Till parent::__construct("mysql:host=localhost;dbname=$dbname;char set=utf8", "DBUSER", "");

Edit.
Missa att du löst det.

Skickades från m.sweclockers.com