Location: PHPKode > scripts > php_form_generator > php_form_generator/generador_sql_1.0.2.php
<?
#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";
?>
Return current item: php_form_generator