<?
#generador_sql_1.0.2.php
/*
#generador de sentencias SQL
toma una cadena de texto con la definicion de tablas
y obtiene la lista de campos y determina el tipo de los campos.
A partir de ahí genera las secuencias SQL estándard para una clase
de mysql que las utilice y las presenta en pantalla y salva a disco.
*/
$programa="generador_sql";
$version="1.0.2";
$carpeta_inc="inc/";
$fichero_config="config.inc.php";
//error_reporting(80);
include($carpeta_inc.$fichero_config);
if(!$viejo){
//toma datos
//include("generador_form1.0.2.html");
include($carpeta_inc.$fichero_formulario);
exit;
} else {
//comprueba datos críticos
print "\n<br>motor_basedatos: $motor_basedatos\n<br>";
if(!$tabla || !$clase || !$objeto){
print "Los datos: TABLA, CLASE y OBJETO no se pueden dejar en blanco<br><a href=\"javascript:history.go(-1);\">Vuelve atrás y completalos</a>";
exit;
}
//elabora datos y presenta resultados
$clase_origen=$clase;
$objeto_origen=$objeto;
$tabla_origen=$tabla;
$sql=explode("\n",$sql_input);
$n=sizeof($sql);
$k=0;
//print "TABLAS: $generar_tablas";
if($generar_tablas){
if($valign=="top"){
$valign=" valign=\"top\"";
}elseif($valign=="bottom"){
$valign=" valign=\"bottom\"";
}
$tabla1="\n\n<table>";
$tr1="\n <tr>";
$tr2="\n </tr>";
$td1="\n <td$valign$align> ";
$td2="\n </td>";
$tabla2="\n</table>\n";
} else {
$tabla1="";
$tr1="";
$tr2="";
$td1="";
$td2="";
$tabla2="";
}
//bucle que recorre los campos analizandolos y generando os arrays
//$campos[] y $tipos[]
for ($c=0;$c<$n;$c++){
//si la linea de creación de tabla está incluida
//salta esta iteración
if(strstr($sql[$c], "CREATE TABLE")){
continue;
}
//si la linea de fin de creacion de tabla esta incluida
//salta esta iteración
if(strstr($sql[$c], ");")){
continue;
}
list($campo,$propiedades)=explode(" ",$sql[$c]);
//print "\n<br>$c - $sql[$c] - $campo - $propiedades";
$campos[$c]=$campo;
$tipo=strtolower(strtok($propiedades," "));
$estextarea=0;
if(strstr($tipo, "integer")){
$escadena[$c]=0;
}elseif(strstr($tipo, "int")){
$escadena[$c]=0;
}elseif(strstr($tipo, "smallint")){
$escadena[$c]=0;
}elseif(strstr($tipo, "tinyint")){
$escadena[$c]=0;
}elseif(strstr($tipo, "datetime")){
$escadena[$c]=1;
}elseif(strstr($tipo, "timestamp")){
$escadena[$c]=1;
}elseif(strstr($tipo, "date")){
$escadena[$c]=1;
}elseif(strstr($tipo, "time")){
$escadena[$c]=1;
}elseif(strstr($tipo, "year")){
$escadena[$c]=1;
}elseif(strstr($tipo, "float")){
$escadena[$c]=1;
}elseif(strstr($tipo, "varchar")){
$escadena[$c]=1;
}elseif(strstr($tipo, "text")){
$escadena[$c]=1;
$estextarea=1;
}else{
$escadena[$c]=-1;
}
$tipos[$c]=$tipo;
//print "\n<br>$c - $campos[$c] - $escadena[$c]";
if(strstr(strtolower($sql[$c]), "primary")){
$num_id=$c;
//print "*";
} else {
//print "";
}
if($escadena[$c]==1){
$comilla="'";
}else{
//$comilla="";
$comilla="'";
}
if($c<($n-1)){
$coma=",";
}else{
$coma="";
}
if(($num_id==$c)&&($motor_basedatos=="odbc")){
$query_intro1.= $campos[$c].$coma."\n";
$query_intro2.= $comilla."$".$campos[$c].$comilla.$coma."\n";
}
if(strstr($sql[$c],"auto_increment")){
//continue;
}elseif($num_id==$c){
print "\n<br>$num_id - $c - $campos[$c]";
}else{
$query_actualiza1.="$campos[$c]=".$comilla."$".$campos[$c].$comilla.$coma."\n";
$query_intro1.= $campos[$c].$coma."\n";
$query_intro2.= $comilla."$".$campos[$c].$comilla.$coma."\n";
}
$lista_campos.=$campos[$c]."\n";
if($estextarea==1){
$campos_formulario.=$tr1.$td1."\n$campos[$c]:".$td2.$td1."<TEXTAREA NAME=\"$campos[$c]\" COLS=\"50\" ROWS=\"6\">\$this->$campos[$c]</TEXTAREA><BR>".$td2.$tr2;
} else {
$campos_formulario.=$tr1.$td1."\n$campos[$c]:".$td2.$td1."<INPUT TYPE=\"$tipo2\" NAME=\"$campos[$c]\" SIZE=\"$tam_campo\" VALUE=\"\$this->".$campos[$c]."\"><BR>".$td2.$tr2;
}
$rotulos_tabla.="\n\t\t\t<td>$campos[$c]</td>";
$valores_tabla.="\n\t\t\t\t<td>\$$campos[$c]</td>";
$valores_listado.="\n\t\t\t\t<tr><td><b>$campos[$c]:</b></td><td>\$$campos[$c]</td></tr>";
$id=$datos[$campos[$num_id]];
//print "<h1>$num_id - $campos[$num_id] - $id</h1>";
//print "<h4>\$id=$$campos[$num_id]</h4>";
if($motor_basedatos=="mysql"){
$variables.="\n var \$".$campos[$c].";";
$recuperacion_datos.="\n \$this->".$campos[$c]."=\$datos[\"$campos[$c]\"];";
$recuperacion_datos0.="\n \$".$objeto."->".$campos[$c]."=\"\";";
$recuperacion_datos2.="\n \$".$objeto."->".$campos[$c]."=\$datos[\"$campos[$c]\"];";
$recuperacion_datos3.="\n\$$campos[$c]=\$datos[\"$campos[$c]\"];";
}elseif($motor_basedatos=="odbc"){
$variables.="\n var \$".$campos[$c].";";
$recuperacion_datos.="\n \$this->".$campos[$c]."=\$datos[\"$campos[$c]\"];";
$recuperacion_datos0.="\n \$".$objeto."->".$campos[$c]."=\"\";";
$recuperacion_datos2.="\n \$".$objeto."->".$campos[$c]."=\$datos[".$c."];";
$recuperacion_datos3.="\n\$$campos[$c]=\$datos[".$c."];";
}
}//fin del bucle de campos
//print "<h4>$recuperacion_datos3</h4>";
$campo_id=$campos[$num_id];
if($escadena[$num_id]==1){
$comilla_id="'";
}else{
$comilla_id="";
}
//print "<p>CAMPO_ID: $campo_id = $campos[$num_id] ($num_id)<p>";
$query_intro="INSERT INTO $tabla (\n".$query_intro1.")VALUES(\n".$query_intro2.")";
//$query_actualiza="UPDATE $tabla SET\n".$query_actualiza1."\nWHERE $campo_id=".$comilla_id."\$id".$comilla_id;
$query_actualiza="UPDATE $tabla SET\n".$query_actualiza1."\nWHERE $campo_id=".$comilla_id."\$$campo_id".$comilla_id;
//$query_elimina="DELETE FROM $tabla WHERE $campo_id=".$comilla_id."\$id".$comilla_id;
$query_elimina="DELETE FROM $tabla WHERE $campo_id=".$comilla_id."\$$campo_id".$comilla_id;
$campos_formulario.=$tr1.$td1.$td2.$td1."<INPUT TYPE=\"SUBMIT\" VALUE=\"Grabar Datos\"><input type=\"hidden\" name=\"opcion\" value=\"\$this->form_opcion\">".$td2.$tr2;
$campos_formulario=$tabla1.$campos_formulario.$tabla2;
$pre_form.="<FORM ACTION=\"\$REQUEST_URI\" METHOD=\"$metodo\" NAME=\"form_$tabla\">";
$form_campo_id.="<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"".$id."\">";
$post_form="</FORM>";
$form1=$pre_form.$campos_formulario.$form_campo_id.$post_form;
//si es ODBC hay que rematar las querys con un punto y coma
if($motor_basedatos=="odbc"){
$query_pre_intro="SELECT MAX($campo_id) AS maximo FROM $tabla;";
$query_intro.=";";
$query_actualiza.=";";
$query_elimina.=";";
}
##############################################
##############################################
##############################################
##############################################
//determinamos la ruta para incluir el fichero que contiene la clase base
$inclusion=$carpeta_inc.$clase_base;
if(include($inclusion)){
//print "\n<br>Include realizado con éxito ($inclusion)...";
}else {
print "\n<br><b>ERROR: Include fallido ($inclusion)...</b>";
}
##############################################
##############################################
##############################################
##############################################
//si se ha marcado "generar fichero"
if($generar_fichero){
//genera el fichero de clase
$fichero_salida="class_".$clase_origen.".php";
$fichero=$fichero_salida;
$fich=fopen($fichero,"w");
$fichero_final_clase=$fichero;
$longitud=strlen($clase_objeto);
//if(fputs($fich, $clase_objeto, $longitud)){
##################
//print "\n<hr>fich: $fich - clase: $clase_objeto - fichero: $fichero - longitud: $longitud";
if(fputs($fich, $clase_objeto)){
print "\nEscritura del fichero de clase ($fichero) OK...\n<br>";
$fichero_clase=$fichero;
} else {
print "\nERROR al escribir el fichero del clase ($fichero)...\n<br>";
}
fclose($fich);
//genera el fichero de clase
$querys="
ORIGEN:
-------------------------
$sql_input
-------------------------\n\n<br><br>
INSERCION:
-------------------------
$query_intro
-------------------------\n\n<br><br>
ACTUALIZACION:
-------------------------
$query_actualiza
-------------------------\n\n<br><br>
ELIMINA:
-------------------------
$query_elimina
-------------------------\n\n<br><br>
LISTA DE CAMPOS:
-------------------------
$lista_campos
-------------------------\n\n<br><br>
";
if(!$tabla){
$tabla="kk.sql";
$carpeta="";
} else {
$tabla=$tabla.".sql";
}
if($carpeta){
$fichero=$carpeta."/".$tabla;
}else{
$fichero=$tabla;
}
$fich=fopen($fichero,"w");
$fichero_final_sql=$fichero;
if(fputs($fich, $querys)){
print "\nEscritura del fichero de consultas SQL ($fichero) OK...\n<br>";
} else {
print "\n<b>ERROR al escribir el fichero SQL ($fichero)...</b>\n<br>";
}
fclose($fich);
}
}
print "\n<br><br>Ahora voy a generar el menu.\n<br>Utilizando la clase $fichero_clase";
//print "\n<br><br>$recuperacion_datos2";
print "\n<br>--------------------------------------------";
$plantilla=file($carpeta_inc."menu_plantilla_".$motor_basedatos.".php");
$plantilla=implode("", $plantilla);
//print "\n<br>Clase: $clase - Objeto: $objeto - Tabla: $tabla";
//print "\n<br>Clase_origen: $clase_origen - Objeto_origen: $objeto_origen - Tabla_origen: $tabla_origen";
//print "\n<br>Clase: $clase - Objeto: $objeto - Tabla: $tabla";
print "\n<br>Resumen:\n<br>Clase: $clase\n<br>Objeto: $objeto\n<br>Tabla:: $tabla\n<br>\n<br>";
$plantilla=str_replace("##motor_basedatos##",$motor_basedatos,$plantilla);
$plantilla=str_replace("##campo_id##",$campo_id,$plantilla);
$plantilla=str_replace("##objeto##",$objeto_origen,$plantilla);
$plantilla=str_replace("##clase##",$clase_origen,$plantilla);
$plantilla=str_replace("##tabla##",$tabla_origen,$plantilla);
$plantilla=str_replace("##asign_var_cero##",$recuperacion_datos0,$plantilla);
$plantilla=str_replace("##asign_var_editar##",$recuperacion_datos2,$plantilla);
$plantilla=str_replace("##sql_pre_intro##",$query_pre_intro,$plantilla);
$plantilla=str_replace("##sql_intro##",$query_intro,$plantilla);
$plantilla=str_replace("##sql_editar##",$query_actualiza,$plantilla);
$plantilla=str_replace("##id_objeto##",$campo_id,$plantilla);
$plantilla=str_replace("##rotulos_tabla##",$rotulos_tabla,$plantilla);
$plantilla=str_replace("##valores_tabla##",$valores_tabla,$plantilla);
$plantilla=str_replace("##valores_listado##",$valores_listado,$plantilla);
$plantilla=str_replace("##recuperacion_datos3##",$recuperacion_datos3,$plantilla);
//$recuperacion_datos3
//$f=fopen("menu_final.php","w");
$f=fopen("menu_".$tabla_origen.".php","w");
fputs($f,$plantilla);
fclose($f);
print "\n<br>listo";
?> |