Foros del Web » Programando para Internet » PHP »

Problema al insertar registros en base de datos

Estas en el tema de Problema al insertar registros en base de datos en el foro de PHP en Foros del Web. Hola, tengo una base de datos Mysql q se llama, juegosdemesa, cn una tabla que se llama clasics, he creado este formulario para subir registros ...
  #1 (permalink)  
Antiguo 10/07/2012, 03:46
 
Fecha de Ingreso: mayo-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Problema al insertar registros en base de datos

Hola, tengo una base de datos Mysql q se llama, juegosdemesa, cn una tabla que se llama clasics, he creado este formulario para subir registros a la tabla:

<html>
<head>
<meta charset="utf-8">
</head>

<body>

<div class="formulario">
<form method="post" action="subir_juego.php">
<input type="text" class="#" cols="50" rows="1" name="nombre" value="Nombre del juego"/></br>
<textarea class="formulario" cols="50" rows="5" name="descripcion">Descripcion</textarea></br>
<input type="text" class="formulario" cols="50" rows="1" name="imagen" value="Ruta de la imagen"/></br>
<input type="text" class="formulario" cols="50" rows="1" name="precio" value="Precio del juego"/></br>
<input class="publicar" type="submit" value="publicar">
</form>
</div>
</body>
</html>

Luego esta la parte que los sube:

<?php

$dsn = "mysql:dbname=juegosdemesa";
$username = "root";
$password = "root";
$nombreJuego = $_POST['nombre'];
$descripcionJuego = $_POST['descripcion'];
$imagenJuego = $_POST['imagen'];
$precioJuego = $_POST['precio'];

try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " .$e->getMessage();
}

$sql = "INSERT INTO clasics VALUES (:nombre, :descripcion, :imagen, :precio)";

try {

$st = $conn->prepare($sql);
$st->bindValue(":nombre", $nombreJuego, PDO::PARAM_STR);
$st->bindValue(":descripcion", $descripcionJuego, PDO::PARAM_STR);
$st->bindValue(":precio", $precioJuego, PDO::PARAM_STR);
$st->bindValue(":imagen", $imagenJuego, PDO::PARAM_STR);

} catch (PDOException $e) {
echo "Fallo al cargar los datos : " . $e->getMessage();
}

echo "juego cargado";
?>

Cuando introduzco los datos en el fornulario y doy a enviar parece que todo funciona, no da ningun mesaje de error y aparece; juego cargado, pero cuando miro en la tabla de la db no me ha creado la nueva fila, agadeceria cualquier ayuda, nose si tengo el codigo mal escrito o pq puede ser.

Muchas gracias, un saludo,
Jose
  #2 (permalink)  
Antiguo 10/07/2012, 04:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema al insertar registros en base de datos

Creo que te falta ejecutar la query


Manual
Cita:
  • PDO::prepare — Prepara una sentencia para su ejecución y devuelve un objeto sentencia
  • PDO::query — Ejecuta una sentencia SQL, devolviendo un conjunto de resultados como un objeto PDOStatement
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 10/07/2012, 05:03
 
Fecha de Ingreso: mayo-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema al insertar registros en base de datos

Gracias ya he visto que olvide poner la ultima sentencia:

<?php

$dsn = "mysql:dbname=juegosdemesa";
$username = "root";
$password = "root";
$nombreJuego = $_POST['nombre'];
$descripcionJuego = $_POST['descripcion'];
$imagenJuego = $_POST['imagen'];
$precioJuego = $_POST['precio'];

try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " .$e->getMessage();
}

$sql = "INSERT INTO clasics VALUES (:nombre, :descripcion, :precio, :imagen)";

try {

$st = $conn->prepare($sql);
$st->bindValue(":nombre", $nombreJuego, PDO::PARAM_STR);
$st->bindValue(":descripcion", $descripcionJuego, PDO::PARAM_STR);
$st->bindValue(":precio", $precioJuego, PDO::PARAM_STR);
$st->bindValue(":imagen", $imagenJuego, PDO::PARAM_STR);
$st->execute();

} catch (PDOException $e) {
echo "Fallo al cargar los datos : " . $e->getMessage();
}

echo "juego cargado";
?>

Cuando se ejecuta, despues de pasar los datos desde el formulario, me aprece este error:

Fallo al cargar los datos : SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

La tabla a la que mando los datos tiene 5 columnas, la primera es el id, q se autoincrementa, y las demas son varchar y decimal, no se si es un fallo por PDO::PARAM_STR

Gracias, un saludo,
Jose
  #4 (permalink)  
Antiguo 10/07/2012, 05:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema al insertar registros en base de datos

No uso ese objeto pero podria faltar la lista de campos


$sql = "INSERT INTO clasics (nombre, descripcion, precio, imagen) VALUES (:nombre, :descripcion, :precio, :imagen)";

sin los : (dos puntos) siempre que esos sean los nombres de tus campos, claro.

(es la unica manera que puedes indicar que no estas mandando el id)

Precio debe ser decimal no string http://es.php.net/manual/es/pdo.constants.php
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/07/2012 a las 05:23
  #5 (permalink)  
Antiguo 10/07/2012, 05:42
 
Fecha de Ingreso: mayo-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema al insertar registros en base de datos

Gracias

Ya funciona correctamente, no cai que al no pasarle todos los campos debia de decirle cuales le pasaria, muchas gracias por la ayuda.

Un saludo,
Jose

Etiquetas: formulario, html, mysql, registro, registros, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:10.