Foros del Web » Programando para Internet » PHP »

error al insertar datos en tabla mysql desde form

Estas en el tema de error al insertar datos en tabla mysql desde form en el foro de PHP en Foros del Web. amigos: estoy armando un script en php que se compone de un formulario. Se conecta a una base de datos mysql y tengo el problema ...
  #1 (permalink)  
Antiguo 07/07/2012, 15:09
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 15 años
Puntos: 2
Pregunta error al insertar datos en tabla mysql desde form

amigos:

estoy armando un script en php que se compone de un formulario. Se conecta a una base de datos mysql y tengo el problema que no me funciona la inserción de datos en la tabla ...

conectarse con la dbase se conecta dado que el select dinámico del form logra extraer datos de las filas de una de las tablas, pero a la hora de completar el formulario y enviarlo hago el chequeo en phpmyadmin -tanto de localhost como de servidor online- y no me da resultado, no se cargan los datos del form.

No puedo lograr insertar en la tabla 'alumno' los datos que se cargan el el form ...

El mismo form sí puede obtener datos de otra tabla, la tabla sexo p/ el select del sexo del alumno, o sea ahi esta la prueba de que la conexión anda ...


a continuacion el script php

Código PHP:
<?php $servidor "localhost";
$usuario "root";
$password "";
$nombrebase "app_escuela";


$cnx mysql_pconnect($servidor$usuario$password) or die("Error en la conexión");
mysql_select_db($nombrebase$cnx) or die ("Verifique la Base de Datos");

//session_start();

function clean($s) {
    if(
is_array($s)) {
        foreach(
$s as $c => $v) {
                    
$s[$c] = mysql_real_escape_string($v);        
        }
    } else 
$s mysql_real_escape_string($s);
    return 
$s;
}  
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Alta de Alumnos</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<?php
// include 'menu.php';

if($_POST[subgrabar]) {
    
    
$_POST clean($_POST);
    
    
mysql_query('BEGIN WORK');
    
    if(
$_POST[nombre]) {
        
$res mysql_query("select max(cod_a) as M from alumno");
        
        
$row mysql_fetch_array($res);
        
// comprobamos la conexion ---------------------------------------------------------------
        
echo $row[M];
        if(
$row[M])
                
$max $row[M] +1;
        else 
                
$max 1;
                
// comprobamos la conexion ---------------------------------------------------------------
                
echo '<br />'.$max;
        
$fecha date("Y-m-d");
        
        
$sql "insert into alumno values (";
        
$sql .= $max.", ";
        
$sql .= "'".$_POST[nombre]."', ";
        
$sql .= "'".$_POST[apellido]."', ";
        
$sql .= $_POST[sexo].", ";
        
$sql .= "'".$_POST[dni]."', ";
        
$sql .= "'".$_POST[fecha_nac]."', ";
        
$sql .= "'".$_POST[antecedentes]."', ";
        
$sql .= "'".$_POST[mail]."', ";        
        
$sql .= "'".$_POST[facebook]."', ";        
        
$sql .= $_POST[secundario].", ";        
        
$sql .= "'".$_POST[otros_estudios].", ";            
        
$sql .= "'".$fecha."')";                        
        
        
$res mysql_query($sql);
        
        
mysql_query('COMMIT');
        
        }
}
        
echo 
'<form action="?" method="post">';        

$res mysql_query("select * from sexo order by nom_s asc");

if (!
$res) { 
    
$message  'Error en la consulta: ' mysql_error() . "\n"
    die(
$message); 
}  

while(
$row mysql_fetch_array($res)) {
    
$select1 .= '<option value="'.$row['cod_s'].'">'.$row['nom_s'].'</option>';
}

echo 
'<table cellspacing="0">';
echo 
'<tr>';
echo 
'<td>Nombre</td><td><input type=text name=nombre></td>';        
echo 
'</tr>';        
echo 
'<tr>';
echo 
'<td>Apellido</td><td><input type=text name=apellido></td>';        
echo 
'</tr>';        
echo 
'<tr>';
echo 
'<td>Sexo</td><td><select name=sexo>'.$select1.'</select></td>';        
echo 
'</tr>';        
echo 
'<tr>';
echo 
'<td>DNI | LC | Pasaporte</td><td><input type=text name=dni></td>';        
echo 
'</tr>';            
echo 
'<tr>';
echo 
'<td>Fecha de nacimiento</td><td><input type=text name=fecha_nac></td>';        
echo 
'</tr>';        
echo 
'<tr>';
echo 
'<td>Antecedentes Médicos</td><td><input type=text name=antecedentes></td>';        
echo 
'</tr>';            
echo 
'<tr>';
echo 
'<td>Mail principal</td><td><input type=text name=mail></td>';        
echo 
'</tr>';        
echo 
'<tr>';
echo 
'<td>Secundario Terminado?</td><td><select name=secundario>';
echo 
'<option value="n">No</option>';
echo 
'<option value="s">Sí</option>';
echo 
'</select></td>';        
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td>Otros Estudios</td><td><input type=text name=otros_estudios></td>';        
echo 
'</tr>';
echo 
'<tr>';    
echo 
'<td colspan="2"><input value="Dar de Alta" type="submit" name="subgrabar"></td>';
echo 
'</tr>';
echo 
'</table>';

echo 
'</form>';

?>
</body>
</html>

Y este es el codigo con el cual armo las tablas:

Código:
DROP TABLE IF EXISTS alum_domicilio;
DROP TABLE IF EXISTS domicilio;
DROP TABLE IF EXISTS tel_contacto;
DROP TABLE IF EXISTS asignac_c;
DROP TABLE IF EXISTS compra;
DROP TABLE IF EXISTS modal_cursado;
DROP TABLE IF EXISTS pago_cuota;
DROP TABLE IF EXISTS modal_comercial;
DROP TABLE IF EXISTS asistencias;
DROP TABLE IF EXISTS clases;
DROP TABLE IF EXISTS curso;
DROP TABLE IF EXISTS alumno;
DROP TABLE IF EXISTS sexo;

CREATE TABLE alumno (
cod_a int(5) default '0' NOT NULL,
nom_a varchar(80) default '' NOT NULL,
ape_a varchar(80) default '' NOT NULL,
cod_s int(1) default '0' NOT NULL,
dni_a varchar(80) default '' NOT NULL, 
fec_n date default NULL,
ante_m varchar(250) default NULL,
mail_a varchar(80) default NULL,
face_a varchar(80) default NULL,
secu_a varchar(1) default 'n',
otros_e varchar(250) default NULL,
fec_a date default NULL,
PRIMARY KEY (cod_a)
) ENGINE=innodb;

CREATE TABLE sexo (
cod_s int(1) NOT NULL auto_increment,
nom_s varchar(80) default '' NOT NULL,
PRIMARY KEY (cod_s)
) ENGINE=innodb;

CREATE TABLE domicilio (
nom_c varchar(80) default '' NOT NULL,
num_d int(5) default '0' NOT NULL,
dep_d varchar(80) default NULL,
ciud_d varchar(80) default '' NOT NULL,
prov_d varchar(80) default '' NOT NULL,
bar_d varchar(80) default NULL,
cod_d int(5) default '0' NOT NULL,
sal_p varchar(1) default 'n',
PRIMARY KEY (cod_d)
) ENGINE=innodb;

CREATE TABLE alum_domicilio (
cod_d int(5) default '0' NOT NULL,
cod_a int(5) default '0' NOT NULL,
PRIMARY KEY (cod_d,cod_a),
KEY cod_d (cod_d),
KEY cod_a (cod_a)
) ENGINE=innodb;

CREATE TABLE tel_contacto (
car_t int(5) default '0' NOT NULL,
num_t int(11) default '0' NOT NULL,
cod_a int(5) default '0' NOT NULL,
PRIMARY KEY (num_t,cod_a),
KEY num_t (num_t),
KEY cod_a (cod_a)
) ENGINE=innodb;

CREATE TABLE compra (
cod_c int(5) default '0' NOT NULL,
mon_c float(5.2) default '0',
fec_c date default NULL,
PRIMARY KEY (cod_c)
) ENGINE=innodb;

CREATE TABLE asignac_c (
cod_c int(5) default '0' NOT NULL,
cod_a int(5) default '0' NOT NULL,
com_c varchar(1) default 'n',
cant_c smallint(3) NOT NULL default '1',
PRIMARY KEY (cod_c,cod_a),
KEY cod_c (cod_c),
KEY cod_a (cod_a)
) ENGINE=innodb;


CREATE TABLE curso (
cod_c smallint(3) NOT NULL auto_increment,
nom_c varchar(80) default '' NOT NULL,
desc_c varchar(250) default '' NOT NULL,
PRIMARY KEY (cod_c)
) ENGINE=innodb;


CREATE TABLE modal_cursado (
hor_c varchar(80) default '' NOT NULL,
dias_c varchar(80) default '' NOT NULL,
cod_a int(5) default '0' NOT NULL,
cod_c smallint(3) default '0' NOT NULL,
PRIMARY KEY (cod_a,cod_c),
KEY cod_c (cod_c),
KEY cod_a (cod_a)
) ENGINE=innodb;

CREATE TABLE modal_comercial (
cant_c smallint(3) default '1' NOT NULL,
mon_c int(5) default '200' NOT NULL,
cod_m smallint(3) default '0' NOT NULL,
PRIMARY KEY (cod_m)
) ENGINE=innodb;

CREATE TABLE pago_cuota (
fec_p date default NULL,
cod_a int(5) default '0' NOT NULL,
num_c smallint(3) default '0' NOT NULL,
cod_m smallint(3) default '0' NOT NULL,
PRIMARY KEY (cod_a,cod_m),
KEY cod_a (cod_a),
KEY cod_m (cod_m)
) ENGINE=innodb;

CREATE TABLE clases (
cod_cl int(5) default '0' NOT NULL,
fec_c date default NULL,
cod_c smallint(3) default '0' NOT NULL,
PRIMARY KEY (cod_cl)
) ENGINE=innodb;

CREATE TABLE asistencias (
cod_cl int(5) default '0' NOT NULL,
cod_a int(5) default '0' NOT NULL,
conf_a varchar(1) default 's',
PRIMARY KEY (cod_cl,cod_a),
KEY cod_cl (cod_cl),
KEY cod_a (cod_a)
) ENGINE=innodb;

ALTER TABLE alumno add FOREIGN KEY(cod_s) REFERENCES sexo(cod_s) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE alum_domicilio add FOREIGN KEY(cod_d) REFERENCES domicilio(cod_d) ON DELETE RESTRICT ON UPDATE CASCADE; 
ALTER TABLE alum_domicilio add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE tel_contacto add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE asignac_c add FOREIGN KEY(cod_c) REFERENCES compra(cod_c) ON DELETE RESTRICT ON UPDATE CASCADE; 
ALTER TABLE asignac_c add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE modal_cursado add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 
ALTER TABLE modal_cursado add FOREIGN KEY(cod_c) REFERENCES curso(cod_c) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE pago_cuota add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 
ALTER TABLE pago_cuota add FOREIGN KEY(cod_m) REFERENCES modal_comercial(cod_m) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE clases add FOREIGN KEY(cod_c) REFERENCES curso(cod_c) ON DELETE RESTRICT ON UPDATE CASCADE; 

ALTER TABLE asistencias add FOREIGN KEY(cod_cl) REFERENCES clases(cod_cl) ON DELETE RESTRICT ON UPDATE CASCADE; 
ALTER TABLE asistencias add FOREIGN KEY(cod_a) REFERENCES alumno(cod_a) ON DELETE RESTRICT ON UPDATE CASCADE; 

INSERT INTO sexo (nom_s) VALUES ('hombre');
INSERT INTO sexo (nom_s) VALUES ('mujer');
INSERT INTO sexo (nom_s) VALUES ('transgénero');

INSERT INTO alumno (cod_a,nom_a,ape_a,cod_s,dni_a,fec_n,mail_a,secu_a) VALUES (1,'Antonio','Mure',1,'8.255.397','1950-01-19','[email protected]','s');

INSERT INTO curso (nom_c,desc_c) VALUES ('peluqueria 1','curso inicial de peluquería de Gustavo Falcón');
INSERT INTO curso (nom_c,desc_c) VALUES ('peluqueria 2','curso intermedio de peluquería de Gustavo Falcón');
INSERT INTO curso (nom_c,desc_c) VALUES ('peluqueria 3','curso avanzado de peluquería de Gustavo Falcón');
gracias desde ya,
  #2 (permalink)  
Antiguo 07/07/2012, 18:31
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años, 1 mes
Puntos: 168
Respuesta: error al insertar datos en tabla mysql desde form

Mensaje de error te devuelve? si lo hace postealo
  #3 (permalink)  
Antiguo 08/07/2012, 12:47
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 15 años
Puntos: 2
Respuesta: error al insertar datos en tabla mysql desde form

hola Rodrigo

no, no me devuelve ningún mensaje de error
  #4 (permalink)  
Antiguo 08/07/2012, 14:49
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 15 años
Puntos: 2
Respuesta: error al insertar datos en tabla mysql desde form

Lo solucioné primero agregando una validacion de la instrucción sql:

Código PHP:
$res mysql_query($sql);
    if (!
$res) { 
    
$message  'Error en la consulta: ' mysql_error() . "\n"
    die(
$message); 

y me tiró error nomas (unknown column 's' in 'field list')

googleé y me salió un post de este mismo foro:

este post

cito textualmente del otro post relacionado:

"En tu código es claro que no usas comillas para encerrar tus valores textuales, de ahí que el error dice que "aaa" no es un campo de la tabla (field list)."

entonces solo tuve que corregir una línea, quedando de esta manera:

Código PHP:
$sql .= "'".$_POST[otros_estudios]."', "
modifiqué el codigo y ahora sí ejecuta la sentencia insert en la tabla -lo comprobé vía phpmyadmin-

Última edición por estudioplateado; 08/07/2012 a las 15:18

Etiquetas: inserción, mysql, sentencia, formulario
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 05:38.