php - tabla - ¿Crear un formulario para POST en MySQL usando PDO correctamente?
insertar datos en mysql con php pdo (2)
Su formulario está publicando en success.php, así que asegúrese de que el código de inserción esté en el archivo 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();
}
Gracias,
Andrés
Estoy tratando de usar una Clase de Contenedor PDO y, en general, una buena seguridad contra las inyecciones de SQL como una buena práctica. Tratando de aprender los elementos básicos limpios para completar un formulario para enviarlo a MySQL.
Entonces, en un momento mi formulario estaba insertando datos en la tabla MySQL, pero estaba haciendo múltiples registros en la actualización luego de enviarlos. Luego investigué una forma más limpia de escribir el procesador, pero ahora tengo problemas para insertarlo en la tabla. ¿No está seguro si tal vez hay una discrepancia entre el procesador y el archivo "class.db.php"?
He buscado mucho para "cómo hacer" sin tener éxito en una respuesta consistente. Tratando de entender lo que estoy haciendo mal, deseando una respuesta de las mejores prácticas. Todo lo que he visto está en todo el mapa.
Aquí es donde estoy: como referencia comencé aquí primero http://webdevelopingcat.com/php-mysql-tutorial-for-beginners-inserting-rows-with-pdo/
Luego, en la parte superior del documento, estoy incluyendo google, https://code.google.com/p/php-pdo-wrapper-class/ project para una base de implementación de clase.
<?php
include("class.db.php");
$version = "1.0.2";
$released = "December 9, 2010";
?>
Entonces una forma simple dentro del cuerpo.
<?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>
Finalmente el procesador de forma también dentro del cuerpo.
<?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 ) );
}
?>
La forma MANUAL funciona. Publicación de culttt.com referenciada sobre: prevent-php-sql-injection-with-pdo-prepared-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);
<?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;
}