Insertar datos en base de access

Tengo un formulario el cual la información la tengo que guardar en una base de access, la conexión si me funciona pero cuando quiero guardar los datos no se porque no me los guarda podrías por favor revisar el script para poder ver en donde tengo el error
<?
$graba = 0;
$pid = $_POST['pid'];
$nombre = $_POST['nombre'];
$texto = $_POST['texto'];
$texto2 = $_POST['texto2'];
$puesto = $_POST['puesto'];
$fecha=date("Y/n/d/h/m/s");
$mensaje = "";
if ($nombre == NULL){
$mensaje .= '
<script name="accion">alert("Debes agregar tu nombre")</script>
';
echo $mensaje;
$graba = 1;
}
if ($texto == NULL){
$mensaje .= '
<script name="accion">alert("A quien esta dirigido el reporte?")</script>
';
echo $mensaje;
$graba = 1;
}
if ($texto2 == NULL){
$mensaje .= '
<script name="accion">alert("Debes agregar tu comentario")</script>
';
echo $mensaje;
$graba = 1;
}
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . Realpath("datos.mdb");
$conn->Open($dsn);
if ($ID = $ID){
$mensaje .= '
<script name="accion">alert("Tu nùmero de solicitud es el '.$ID.'")</script>
';
echo $mensaje;
$sql = "INSERT INTO datos (nombre,texto,texto2) values ('$nombre', '$texto', '$texto2')";
}
?>
<SCRIPT LANGUAGE="JavaScript">
location.href="mostrarforo.php3";
</SCRIPT>

1 Respuesta

Respuesta
1
Aunque no tenga que ver con el problema, te diré que la $fecha está mal definida: la 'm' corresponde al mes (también es correcto usar 'n' como usas) pero no corresponde a minutos que es lo que parece que pretendes. Deberías usar 'i'. Tampoco sé si mdb entenderá la fecha en ese formato (todo separado con barras). Suele separarse con barras la fecha, luego un espacio y el tiempo separado por el signo de dos puntos.
El resto del script parece correcto, pero claro, desconozco la estructura de la tabla datos y puede estar ahí el problema.
Te sugiero que pruebes primero a leer la información con una SELECT para estar seguro de la conexión y que repases la estructura de la tabla. Quizás tenga un campo obligatorio que no estás rellenando, o bien estás duplicando un valor en un campo único y, por tanto no te admite la inserción.
Tampoco compruebas si la conexión con la base de datos ha sido exitosa. Prueba a usar:
if ($conn->State == 0)
Hola,
Fíjate que comprobé la conexión con un select y me muestra los datos, la estructura de la tabla tengo un ID con autonumérico, y todos los demás como texto, excluyendo la fecha que esta como fecha/hora
En el script que enviaste no veo el SELECT que mencionas, pero si dices que lo has comprobado, lo daremos por bueno.
Así el problema ha de estar en la sentencia INSERT. Si hay un campo de fecha, te recuerdo que el formato de fecha que usas no parece correcto, como te explico en mi anterior mensaje.
También es posible que alguno de los textos que estás introduciendo tengan caracteres no permitidos (como una comilla, por ejemplo) con lo cual tampoco funcionaría el INSERT.
En general, se suele ejecutar la función addslashes() para escapar estos caracteres especiales antes de poner la variable en la sentencia SQL.
Fíjate que para hacer una prueba sencilla para insertar los datos cree este script pero ni aun así logro hacer que me inserte los datos, si le doy un select para que me los muestre lo hace pero no los inserta, la version de access que estoy usando es la 2003, que me aconsejas que pueda hacer
<HTML><BODY>
<?php
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath('C:\EasyPHP1-7\www\desarrollo con access\PRU.mdb');
$conn->Open($dsn);
$rs = $conn->Execute("select * from PRU");
$conn->exçecute('INSERT INTO pru(nombre, usuario) VALUES ("aa", "bb")');
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>
</body>
</html>
Quizás sea un error en la transcripción pero en la línea:
$conn->exçecute('INSERT INTO pru(nombre, usuario) VALUES ("aa", "bb")');
Observa que execute está mal escrito.
Además creo que deberías cambiar las comillas dobles por simples en los valores de VALUES, que es el estándar:
$conn->execute("INSERT INTO pru(nombre, usuario) VALUES ('aa', 'bb')");
Piensa que debería ser una sentencia SQL correcta.
Si no es esto, puedes probar a usar otro método para acceder al fichero Access:
if ($conn_access = odbc_connect ( "NombreDSN", "", "")){ // Nombre del DSN de sistema o usuario, nombre del usuario, password
  echo "Conectado correctamente<br>";
  $ssql = "select * from pru";
if($rs_access = odbc_exec ($conn_access, $ssql))
  echo "La sentencia se ejecutó correctamente";
Y probar a hacer el insert con odbc_exec o con odbc_prepare y odbc_execute.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas