Я пытаюсь использовать класс PDO Wrapper и вообще для обеспечения надлежащей безопасности от SQL-инъекций в качестве хорошей практики. Попытка изучить чистые голые основы для заполнения формы POST в MySQL.
Итак, в какой-то момент моя форма вставляла данные в таблицу MySQL, но делала несколько записей при обновлении после отправки. Затем я исследовал более чистый способ написать процессор, но теперь у меня проблемы с его вставкой в таблицу. Не уверен, возможно ли несоответствие между процессором и файлом «class.db.php»?
Я много искал, чтобы «How-To» не добился успеха в последовательном ответе. Попытка понять, что я делаю неправильно, желая ответить на лучшую практику. Все, что я видел, по всей карте.
Вот где я нахожусь: Для справки я начал здесь сначала http://webdevelopingcat.com/php-mysql-tutorial-for-beginners-inserting-rows-with-pdo/
Затем в верхней части документа я включаю, если вы google, https://code.google.com/p/php-pdo-wrapper-class/ проект для основы реализации класса.
<?php include("class.db.php"); $version = "1.0.2"; $released = "December 9, 2010"; ?>
Тогда простая форма внутри тела.
<?php if ( empty( $_POST ) ){ ?> <form name='registration' action='success.php' method='POST'/> <label for 'FName'>First Name: </label> <input type="text" name="FName" /> <label for 'LName'>Last Name: </label> <input type="text" name="LName" /> <label for 'Age'>Age: </label> <input type="number" name="Age" /> <label for 'Gender'>Gender: </label> <input type="text" name="Gender" /> <button type="submit">Submit</button> </form>
Наконец, процессор формы также находится внутри тела.
<?php } else { //process the form here // // Connect to database $db = new db("mysql:host=localhost;dbname=pdodb", "root", "root"); $form = $_POST; $first = $form[ 'FName' ]; $last = $form[ 'LName' ]; $myage = $form[ 'Age' ]; $gen = $form[ 'Gender' ]; $sql = "INSERT INTO mytable ( FName, LName, Age, Gender ) VALUES ( :first, :last, :myage, :gen )"; $query = $db->prepare( $sql ); $query->execute( array( ':first'=>$first, ':last'=>$last, ':myage'=>$myage, ':gen'=>$gen ) ); } ?>
Работает MANUAL. Ссылка на публикацию culttt.com о: предупреждениях-php-sql-injection-with-pdo-ready-statements
// Create array of data to insert $insert = array( "FName" => "John", "LName" => "Doe", "Age" => 26, "Gender" => "male" ); // Insert the array into the table $db->insert("mytable", $insert);
Ваша форма отправляет на success.php, поэтому убедитесь, что код вставки находится в файле success.php:
<?php // Get POST data $first = (!empty($_POST['FName']) ? $_POST['FName'] : ''); $last = (!empty($_POST['LName']) ? $_POST['LName'] : ''); $myage = (!empty($_POST['Age']) ? $_POST['Age'] : ''); $gen = (!empty($_POST['Gender']) ? $_POST['Gender'] : 0); try { // Connect to db $db = new db('mysql:dbname=pdodb;host=localhost', 'root', 'root'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set SQL $sql = 'INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:first, :last, :myage, :gen)'; // Prepare query $query = $db->prepare($sql); // Execute query $query->execute(array(':first' => $first, ':last' => $last, ':myage' => $myage, ':gen' => $gen)); } catch (PDOException $e) { echo 'Error: ' . $e->getMessage(); }
Благодаря,
Андрей
<?php // Get POST data $first = (!empty($_POST['FName']) ? $_POST['FName'] : ''); $last = (!empty($_POST['LName']) ? $_POST['LName'] : ''); $myage = (!empty($_POST['Age']) ? $_POST['Age'] : ''); $gen = (!empty($_POST['Gender']) ? $_POST['Gender'] : 0); try { // Connect to db $db = new PDO('mysql:dbname=pdodb;host=localhost', 'root', 'root'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set SQL $sql = 'INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:first, :last, :myage, :gen)'; // Prepare query $query = $db->prepare($sql); // Execute query $query->execute(array(':first' => $first, ':last' => $last, ':myage' => $myage, ':gen' => $gen)); $db= null; } catch (PDOException $e) { echo 'Error: ' . $e->getMessage(); $db= null; }