UNIDAD 7: INTRODUCION A LAS BASES DE DATOS
TEMA LINUX GCC 13: EDICION DE REGISTROS
Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacÃón o para corregir algun error de captura original o para agregar alguna columna que no existia por modificación de la tabla o la base de datos.
En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendran que construir varios programas, estos son:
1.- prog43.html: una forma normal de busqueda por clave
2.- prog43.cpp: el mismo programa de busqueda por clave, pero ahora debera construir una forma.html dinamica, que contendra un form action apuntando o ejecutando al prog44.cpp o cgi, ademas tendra todos los input text necesarios para cargar cada celda del renglon de busqueda.
3.- prog44.cpp: recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos
prog43.html
<HTML> <FORM ACTION=http://192.168.1.251/~tusitio/cgi-bin/prog43.cgi METHOD=POST> CLAVE A EDITAR :<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit VALUE=BUSCAR> </FORM></HTML>
prog43.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <lcnet.h>
#include <mysql.h>
using namespace std;
int main()
{
// creando variables globales
MYSQL coneccion;
MYSQL_RES *resultset;
MYSQL_ROW renglon;
// inicializando y conectando
if ( mysql_init(&coneccion) == NULL)
cout << "error inicializando" << endl;
if ( mysql_real_connect(&coneccion,"localhost","USUARIO","PASSWORD","mibase",0,NULL,0) == NULL )
cout << "error conectando" <<endl;
// construyendo select query
char q[200];
strcpy(q,"select * from mitabla where clave = ") ;
strcat(q, getstring("CLAVE").c_str() );
if ( mysql_query(&coneccion,q) !=0) cout << "error en select" <<endl;
// cargando el resultset con la tabla en disco
resultset = mysql_store_result(&coneccion);
if ( resultset==NULL) cout << "error en resultset" << endl;
for(int r=1; r <= mysql_num_rows(resultset); r++)
{ renglon = mysql_fetch_row(resultset);
// construyendo forma dinamica prog44.html
cout << "Content-type: text/html\n\n" ;
cout << "<html>" << endl;
cout << " <FORM ACTION=http://192.168.1.251/~tusitio/cgi-bin/prog44.cgi METHOD=POST>" << endl;
cout << "NOMBRE..:<INPUT TYPE=text NAME=NOMBRE VALUE="<< renglon[1]<< "><BR>" <<endl;
cout << "EDAD....:<INPUT TYPE=text NAME=EDAD VALUE=" << renglon[2]<< "><BR>" << endl;
cout << " ESTATURA:<INPUT TYPE=text NAME=ESTATURA VALUE=" << renglon[3]<< "><BR>" <<endl;
cout << " <INPUT TYPE=hidden NAME=CLAVE VALUE=" << renglon[0]<< ">" <<endl;
cout << " <INPUT TYPE=submit VALUE=MODIFICAR>" << endl;
cout << " </FORM></HTML>" << endl;
};
// liberando la memoria del servidor del resultset
mysql_free_result(resultset);
mysql_close(&coneccion);
exit(0);
}
Prog44.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <lcnet.h>
#include <mysql.h>
using namespace std;
int main()
{
// crando variables globales
MYSQL coneccion;
// construyendo pagina
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
// inicializando y conectando
if ( mysql_init(&coneccion) == NULL)
cout << "error inicializando" << endl;
if ( mysql_real_connect(&coneccion,"localhost","USUARIO","PASSWORD","mibase",0,NULL,0) == NULL )
cout << "error conectando" <<endl;
// construyendo insert query
char q[200], nombre[30];
strcpy(nombre, getstring("NOMBRE").c_str() );
strcpy(q,"update mitabla set nombre= \"");
strcat(q,nombre);
strcat(q," \" , edad=");
strcat(q, getstring("EDAD").c_str() );
strcat(q,", estatura=");
strcat(q, getstring("ESTATURA").c_str() );
strcat(q, " where clave=");
strcat(q, getstring("CLAVE").c_str() );
if ( mysql_query(&coneccion,q) !=0)
{cout << "error en update " <<endl;
} else cout << "registro actualizado" << endl;
mysql_close(&coneccion);
cout << "</html>" << endl;
exit(0);
}
Ambos programas son combinaciones de programas anteriores.
Veamos la corrida completa:
Prog37.cgi (tabla original)
prog43.html
forma dinamica que construye el prog43.cpp
prog44.cpp respondiendo
otra vez prog37.cgi para ver como quedo la tabla original
no fue raton fue batman!! Y hacer un refresh al browser o tendran la tabla vieja.
1.- construir programas de edición para sus tablas y bases de datos