Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

no puedo guardar un registro nuevo

Estas en el tema de no puedo guardar un registro nuevo en el foro de Bases de Datos General en Foros del Web. hola , buscando encontre un tutorial para trabajar con bases de datos y php , hice como indicaba y no puedo guardar un nuevo registro ...
  #1 (permalink)  
Antiguo 04/07/2010, 16:03
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
no puedo guardar un registro nuevo

hola , buscando encontre un tutorial para trabajar con bases de datos y php , hice como indicaba y no puedo guardar un nuevo registro .
tengo instalado wampserver y estoy armando algo con dreamweaber .
tengo dos paginas ingresodatos.html

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<FORM METHOD="POST" ACTION="
procesodatosingresados.php">
<TABLE>
<TR>
<TD>Numero de cliente :</TD>
<TD><INPUT TYPE="text" NAME="numerocli" SIZE="20" MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Nombre y Apellido:</TD>
<TD><INPUT TYPE="text" NAME="nya" SIZE="20" MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="Grabar">
</FORM>
<hr>

</table>
</body>
</html>


y procesodatosingresados.php ----- con una base llamada mysclientes y que tiene una tabla llamada clientes


<html>
<head>
<title> Insertar registro en la base de datos </title>
</head>
<body>

<?php
mysql_connect("localhost","root","");
mysql_select_db("misclientes");
mysql_query("insert into clientes ('Numero de Cliente','Nombre y Apellido','Direccion' ,'Telefono' ,'E-mail' ,'Carac. del Equipo' ,'Accion Realizada' ,'Fecha')values('$numerocli','$nya', '', '', '', '', '', '')");

?>
<h1><div align="center">Registro insertado </div></h1>
</body>
</html>


probe con variantes , usando solo los dos campos que ingreso , con insert into misclientes clientes con comillas simples y sin comillas y no logro que lo grabe , me muestra el mensaje de la pagina php .que el registro se inserto . pero voy a la base desde phpmyadmin y veo en la tabla clientes y no se guardo lo que ingrese .

Aclaro que recien me estoy iniciando en php y mysql .
Desde ya muchas gracias por la ayuda que me puedan dar .
  #2 (permalink)  
Antiguo 05/07/2010, 03:35
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Respuesta: no puedo guardar un registro nuevo

Haz una cosa.
Construye la sentencia sql (el insert) en una variable

Código PHP:
Ver original
  1. $sql="insert into clientes ('Numero de Cliente','Nombre y Apellido','Direccion' ,'Telefono' ,'E-mail' ,'Carac. del Equipo' ,'Accion Realizada' ,'Fecha') values ('".$numerocli."','".$nya."', '', '', '', '', '', '')";

De esa manera se expandiran las variables $numerocli y $nya

Que yo recuerde en php, las variables se expanden entre " ", pero no entre ' '

salu2
  #3 (permalink)  
Antiguo 05/07/2010, 05:34
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: no puedo guardar un registro nuevo

Hola Dogduck , gracias por la respuesta y ayuda , te cuento que intente como me lo indicaste y nada
A continuacion te muestro la estructura de la base de datos por si algo esta mal .

De nuevo gracias por la ayuda. Saludos



clientes
Comentarios de la tabla: InnoDB free: 4096 kB

Campo Tipo Nulo Predeterminado Comentarios
Numero de Cliente varchar(3) Sí NULL
Nombre y Apellido varchar(30) Sí NULL
Direccion varchar(30) Sí NULL
Telefono varchar(10) Sí NULL
E-mail varchar(10) Sí NULL
Carac. del Equipo mediumtext Sí NULL
Accion Realizada mediumtext Sí NULL
Fecha date Sí NULL
  #4 (permalink)  
Antiguo 05/07/2010, 06:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: no puedo guardar un registro nuevo

En primer lugar, tienes mal escritos los nombres de los campos. Como regla general, aunque los DBMS lo acepten no se recomienda usar espacios o caracteres especiales ni extendidos en los nombres de objetos de bases de datos porque traen problemas graves de compatibilidad y de escritura.

Un nombre como "Numero de Cliente", puede parecer bueno, bonito, o tener sentido, pero te complica la escritura de las sentencias, y no es compatible con todo. Es preferible usar algo como "Numero_de_Cliente", o "NroCliente".

Además, si los nombres son demasiado largos se vuelven propensos a errores de digitación, y para un DBMS "Numero de Cliente" y "Numer de Cliente" son cosas distintas...
Si luego quieres que el encabezado de la columna aparezca escrito de otra forma, siempre puedes poner ese texto como alias de la misma.

En segundo lugar, si vas a usar espacios o caracteres especiales en los nombres, debes encerrar esos nombres entre acentos agudos (`), y no entre apóstrofos ('). No es lo mismo. Los apóstrofos se usan para encerrar cadenas de texto y no para nombres de objetos de base de datos.

En tercer lugar, no se percibe que haya una clave primaria (PK) en tu tabla, lo que es un error básico de modelo relacional. Además, si la hay (la PK), no se ve que estés controlando el error de clave duplicada, porque el número de cliente lo estás enviando directamente desde el programa, y eso puede producir un error.

Finalmente (y esto no tiene que ver con la base de datos sino con PHP, que tiene su propio foro), No se vé que estés capturando el error de vuelto por MySQL como para saber cómo proceder o por dónde empezar...

Te recomiendo enfáticamente consultar ese detalle con el Foro de PHP, y en todo caso con los ejemplos del manual de referencia del lenguaje: PHP::mysql_query
Te van a ayudar mucho.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/07/2010, 06:24
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: no puedo guardar un registro nuevo

Creo que segui todas tus sugerencias , pero no logro que inserte un registro en la tabla , debajo muestro como quedaron las dos paginas y la estructura de la base de datos .

ingresodatos.html

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<FORM METHOD="POST" ACTION="procesodatosingresados.php">
<TABLE>
<TR>
<TD>Nombre y Apellido:</TD>
<TD><INPUT TYPE="text" NAME="nya" SIZE="20" MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="Grabar">
</FORM>
<hr>

</table>
</body>
</html>




procesodatosingresados.php


<html>
<head>
<title> Insertar registro en la base de datos </title>
</head>
<body>

<?php
mysql_connect("localhost","root","");
mysql_select_db("misclientes");
$sql="insert into clientes (`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`) values ('$nya', '', '', '', '', '', '')";
mysql_query($sql);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

?>

<h1><div align="center">Registro insertado </div></h1>
</body>
</html>



Campo Tipo Nulo Predeterminado Comentarios
NCliente int(10) No
NoyApellido varchar(30) Sí NULL
Direccion varchar(30) Sí NULL
Telefono varchar(10) Sí NULL
E-mail varchar(10) Sí NULL
Caracteristicas mediumtext Sí NULL
Accion_Realizada mediumtext Sí NULL
Fecha date Sí NULL


Índices:
Nombre de la clave Tipo Cardinalidad Campo
NCliente INDEX 0 NCliente





Espero puedas ayudarme . Desde ya muchas gracias
  #6 (permalink)  
Antiguo 06/07/2010, 06:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: no puedo guardar un registro nuevo

¿Te indica algún error la ejecución de la sentencia SQL? Si es así, ¿qué dice?

Postea la sentencia de creación de la tabla, no su descripción...
O sea, el "CREATE TABLE...", porque DESCRIBE no da suficiente información.
Por otro lado, un INDEX no es una PRIMARY KEY.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/07/2010, 07:06
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: no puedo guardar un registro nuevo

cuando se ejecuta la pagina procesodatosingresados.php no me devuelve ningun error y la estructura de la base de datos es la siguiente (genere una copia desde phpmyadmin para que me mostrara create table

CREATE TABLE `misclientes`.`clientes1` (
`NCliente` int( 10 ) unsigned NOT NULL AUTO_INCREMENT ,
`NoyApellido` varchar( 30 ) default NULL ,
`Direccion` varchar( 30 ) default NULL ,
`Telefono` varchar( 10 ) default NULL ,
`E-mail` varchar( 10 ) default NULL ,
`Caracteristicas` mediumtext,
`Accion_Realizada` mediumtext,
`Fecha` date default NULL ,
PRIMARY KEY ( `NCliente` ) ,
KEY `NCliente` ( `NCliente` )
) ENGINE = InnoDB DEFAULT CHARSET = latin1;

INSERT INTO `misclientes`.`clientes1`
SELECT *
FROM `misclientes`.`clientes` ;


por las dudas comento lo que he hecho hasta ahora . instale wampserver lo hago correr y desde phpmyadmin cree la base de datos y la tabla .
Despues desde DW cree las paginas mencionadas las cuales tengo guardadas en una carpeta dentro de C:\wamp\www\miproyecto
En DW tengo creado el sitio ,configurado el tipo de documento (php) y el servidor de prueba que es modelo php mysql acceso : local / red y directorio C:\wamp\www\miproyecto

Para abrirlas voy localhost y ahi las busco y abro ingresodatos.html
  #8 (permalink)  
Antiguo 06/07/2010, 07:08
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: no puedo guardar un registro nuevo

Reinicie la maquina y volvi a probar y me da el siguiente error


Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\miproyecto\procesodatosingresados.php on line 13

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\miproyecto\procesodatosingresados.php on line 13
  #9 (permalink)  
Antiguo 06/07/2010, 07:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: no puedo guardar un registro nuevo

Bueno, a simple vista hay al menos dos errores básicos que pueden producir el problema:
1) Estás intentando insertar un registro en la tabla CLIENTES, y la tabla se llama CLIENTES1. Es decir, la tabla que invocas no existe.
2) Supongo que cuando pones '' estás intentando poner un NULL, pero el problema es que '' y NULL son cosas diferentes. El espacio vacío que pones es lo que se denomina caracter vacío, y tiene existencia. NULL no, no es un dato, es un puntero a la nada y un estado, no un dato, por lo que cuando lo usas para intentar llenar el campo de fecha se produce un error de sintaxis (ErrorNo 1292: "Incorrect date value: '' for column 'Fecha' at row 1").

Primero, pon bien el nombre de la tabla, luego, si lo que quieres es ingresar NULL en esos campos, lo que debes escribir es eso: NULL, sin encerrarlos entre apóstrofes porque eso los transformaría en cadenas de texto.
Algo así:
Código MySQL:
Ver original
  1. INSERT  INTO  clientes1(`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`)
  2. values ('Juan R. DelllaCroce', NULL, NULL, NULL, NULL, NULL, NULL);

En el caso de PHP (que no debería ponértelo porque aquí, en el Foro de Bases de Datos las normas del foro prohíben el código de programación), la cosa sería:

Código PHP:
Ver original
  1. $sql="insert into clientes (`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`) values ('$nya', NULL, NULL, NULL, NULL, NULL, NULL);";
  2. $result = mysql_query($sql');
  3. if (!$result) {
  4.    die('Error en MySQL: ' . mysql_error());
  5. }

Quiero que prestes atención a una cosa: En tu ejemplo, si bien estás poniendo $link como origen de la información del error, ese $link no está recibiendo nada de la ejecución de la sentencia, por lo que jamás se podría recuperar el mensaje en esas condiciones.
Esto es lo que tu pusiste:
Código PHP:
Ver original
  1. <?php
  2. mysql_connect("localhost","root","");
  3. mysql_select_db("misclientes");
  4. $sql="insert into clientes (`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`) values ('$nya', '', '', '', '', '', '')";
  5. echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
  6.  
  7. ?>
¿Dónde ves que $link recibe el resultado de la consulta...?
Exactamente: En ninguna parte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/07/2010 a las 09:46
  #10 (permalink)  
Antiguo 06/07/2010, 09:20
 
Fecha de Ingreso: julio-2010
Mensajes: 12
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: no puedo guardar un registro nuevo

sobre el nombre de tabla era clientes , solo que para mandarte la estructura hice una copia desde phpmyadmin para que me mostrara el create table .
=1
Hice la correccion que me indicaste pero no entiedo bien el uso del where 1=1 .
lo copie como me lo mandaste y ahora me guarda el registro pero me da el siguiente error

Error en MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1=1' at line 1

espero puedas seguir ayudandome . Desde ya muchas gracias por tu tiempo .
  #11 (permalink)  
Antiguo 06/07/2010, 09:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: no puedo guardar un registro nuevo

Es un obvio errror de copiado...

Código PHP:
Ver original
  1. $sql="insert into clientes1(`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`) values ('$nya', NULL, NULL, NULL, NULL, NULL, NULL);";
  2. $result = mysql_query($sql');
  3. if (!$result) {
  4.    die('Error en MySQL: ' . mysql_error());
  5. }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 06/07/2010, 12:10
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Respuesta: no puedo guardar un registro nuevo

Una observación, ya hecha anteriormente.
En PhP, una variable se expande (toma su valor) entre comillas dobles, pero no entre comillas simples
Código PHP:
Ver original
  1. echo "Valor de '$sql'=$sql";

Por lo que creo que values ('$nya', NULL, ... es incorrecto.

lo correcto seria concatenar: "cadena".$variable."cadena"
Código PHP:
Ver original
  1. $sql="insert into clientes1(`NoyApellido`,`Direccion` ,`Telefono` ,`E-mail` ,`Caracteristicas` ,`Accion_Realizada` ,`Fecha`) values ('".$nya."', NULL, NULL, NULL, NULL, NULL, NULL);";
es solo una observación.


salu2

Etiquetas: registro
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:30.