Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Generar archivo sql en PHP

Estas en el tema de Generar archivo sql en PHP en el foro de PHP en Foros del Web. Hola gente. Estoy haciendo un sistema para que los usuarios rellenen un campo en un "formulario" y puedan darle a "Generar SQL"(es un codigo sql). ...
  #1 (permalink)  
Antiguo 23/08/2015, 10:51
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Generar archivo sql en PHP

Hola gente.

Estoy haciendo un sistema para que los usuarios rellenen un campo en un "formulario" y puedan darle a "Generar SQL"(es un codigo sql).

Pero yo queria saber si hay manera de que enves de que ese codigo aparezca dentro de un
Código HTML:
<textarea> 
podria descargarse con el formato sql

gracias de antemano!

Última edición por TrinityCore; 23/08/2015 a las 12:38
  #2 (permalink)  
Antiguo 23/08/2015, 13:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

Claro que se puede descargar.

Busca lo siguiente: php forzar descarga
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/08/2015, 15:12
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Claro que se puede descargar.

Busca lo siguiente: php forzar descarga
No me sirve, yo necesito descargar el codigo en ves de mostrarse por un echo...
por ejemplo, asi es mas o menos mi codigo..

Código PHP:
<?php
if(isset($_POST['generar_npc'])){
    
$entry=$_POST['entry'];
    
$modelo1=$_POST['modelo1'];
    
$modelo2=$_POST['modelo2'];
echo 
"<textarea>"."INSERT INTO `creature_template` (`entry`,`modelo1`,`modelo2`)  VALUES('$entry','$modelo1','$modelo2')"</textarea>";
    }

?>
La idea es que pueda descargarse como un archivo .sql
  #4 (permalink)  
Antiguo 23/08/2015, 16:36
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 8 meses
Puntos: 319
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por TrinityCore Ver Mensaje
No me sirve, yo necesito descargar el codigo en ves de mostrarse por un echo...
por ejemplo, asi es mas o menos mi codigo..

Código PHP:
<?php
if(isset($_POST['generar_npc'])){
    
$entry=$_POST['entry'];
    
$modelo1=$_POST['modelo1'];
    
$modelo2=$_POST['modelo2'];
echo 
"<textarea>"."INSERT INTO `creature_template` (`entry`,`modelo1`,`modelo2`)  VALUES('$entry','$modelo1','$modelo2')"</textarea>";
    }

?>
La idea es que pueda descargarse como un archivo .sql
Como que no te sirve? Miraste el primer o el segundo resultado aunque sea? pfff...
Código PHP:
Ver original
  1. <?php
  2.     header("Content-type: application/octet-stream");
  3.     header("Content-Disposition: attachment; filename=\"codigo.sql\"\n");
  4.     echo "INSERT INTO...";
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 23/08/2015, 17:37
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por NSD Ver Mensaje
Como que no te sirve? Miraste el primer o el segundo resultado aunque sea?
Pero es que dice que asi me pueden robar archivos con solo cambiar el directorio...
  #6 (permalink)  
Antiguo 23/08/2015, 18:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.322
Antigüedad: 12 años, 1 mes
Puntos: 2654
Respuesta: Generar archivo sql en PHP

Empecemos por un punto crítico: ¿Exactamente por qué quieres que un usuario pueda generar código SQL de esa forma y para qué?
Espero que no sea para que lo ejecute en tu base de datos... ¿No es así?

La pregunta es porque la regla fundamental y absoluta de cualquier aplicación es que los usuarios jamás deben poder acceder a las estructuras de datos directamente . Nunca.

Lo que preguntas sólo tiene sentido si quieres crear una interfaz asistente para generación de SQL, sin ejecución en base. Algo como un analizador sintáctico.
__________________
¿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 23/08/2015, 19:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por TrinityCore Ver Mensaje
Pero es que dice que asi me pueden robar archivos con solo cambiar el directorio...
¿Cual directorio?

¿Estás leyendo archivos?

Si no es el caso entones no te pongas el saco ni descartes soluciones que poco comprendes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 24/08/2015, 10:21
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por un punto crítico: ¿Exactamente por qué quieres que un usuario pueda generar código SQL de esa forma y para qué?
Espero que no sea para que lo ejecute en tu base de datos... ¿No es así?
Como ya he dicho muchas veces, estoy en un proyecto web para servidores de un juego en espesifico.

La web trata de darle todo el conocimiento posible a las personas que esten en el proyecto anteriormente dicho.

Estos servidores se denominan "custom", es decir que se le agregan cosas creadas por uno... esto puede hacerse de la BBDD, pero algunas cosas son bastantes pesadas y por eso trato de reducir ese peso a los usuarios..

Entonces que hago..?

Su pongamos que queremos añadir un item espesifico a este servidor, tendriamos 3 opciones..
1- Crearlo a codigo seco "SQL" (desde notepad u otro editor ).
2- Crearlo dsde la DB, (donde los usuarios no saben que son cada una de las 40 columnas o para que sirven).
3- Crearlo desde una web, que en este caso estoy haciendo, para que el usuario rellene los campos traducidos y explicados para entender que funciones cumplen cada uno de ellos.

¿Pero que pasa?, que para no andar copiando y pegando el codigo generado en la textarea y luego ejecutarlo en la DB , lo que quiero hacer es que se descargue (obviamente en el directorio de la persona) y asi seguido poder crear otro y asi sucesivamente hasta que el usuario termine todos los archivos necesarios, entonces es mas facil luego importar todos de un tiro.

Como dije... lo que por ahora tengo no es mas que un codigo que se genera.

Si quieren verlo aqui: http://customizacion-wow.esy.es/gen_npc.php
Ahi veran el funcionamiento del "generador de codigo SQL" que por ahora tengo hecho.

Usuario: Invitado
Contraseña: Invitado

Bueno, espero haberme explicado bien y espero tenga un buen dia!.
Gracias por aguantarme
  #9 (permalink)  
Antiguo 24/08/2015, 11:45
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Cual directorio?

¿Estás leyendo archivos?

Si no es el caso entones no te pongas el saco ni descartes soluciones que poco comprendes.
Entiendo bien... se puede robar archivos asi...
solo impeccionas y cambias la direccion de dicho directorio con el nombre del archivo... y te descargas la web completa si quisieses... me parece un metodo muy desaprobado

Me refiero a este:
Código PHP:
<?php
$file 
$_GET['file'];
header("Content-disposition: attachment; filename=$file");
header("Content-type: application/octet-stream");
readfile($file);
?>
<a href="descarga.php?file=index.php">Descargar</a>
  #10 (permalink)  
Antiguo 24/08/2015, 11:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por TrinityCore Ver Mensaje
Entiendo bien... se puede robar archivos asi...
solo impeccionas y cambias la direccion de dicho directorio con el nombre del archivo... y te descargas la web completa si quisieses... me parece un metodo muy desaprobado

Me refiero a este:
Código PHP:
<?php
$file 
$_GET['file'];
header("Content-disposition: attachment; filename=$file");
header("Content-type: application/octet-stream");
readfile($file);
?>
<a href="descarga.php?file=index.php">Descargar</a>
Sí, pero tu no necesitas usas readfile(), ni leer la variable de $_GET, al final el "archivo" que intentas descargar lo generas al vuelo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 24/08/2015, 12:33
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Sí, pero tu no necesitas usas readfile(), ni leer la variable de $_GET, al final el "archivo" que intentas descargar lo generas al vuelo.
sigo sin entender como se descargaria el codigo solo si el codgio esta dentro de un archivo llamado "index.php", dentro de ese archvo ademas hay un "formulario" y el codigo php que rellena los datos del codigo sql con variables...

he intentado hacerlo... pero solo he conseguido descargar hasta las etiquetas...

Aqui doy un ejemplo de comop seria mi index.php completo.-...

Código PHP:
<?php
if(isset($_POST['generar_npc'])){
$nombre=$_POST['nombre'];
$subnombre=$_POST['subnombre'];

echo 
"<textarea>"."INSERT INTO creature_template (name,subname) VALUES('$nombre','$subnombre');"."<textarea>";
}
?>
[HTML]
<!DOCTYPE HTML>
<form action="" method="post">
<table>
<tr>
<td>Nombre: <input type="text" name="nombre"></td>
</tr>
<tr>
<td>SubNombre: <input type="text" name="subnombre"></td>
</tr>
<tr>
<td><input type="submit" name="generar_npc" value="Generar SQL"></td>
</tr>
</table>
</form>[/HTML]
  #12 (permalink)  
Antiguo 24/08/2015, 12:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

A ver, tu sólo vas a descargar/imprimir lo que necesites: no todo el script.

Si ya tienes la lógica simplemente omite el resto:
Código PHP:
Ver original
  1. if(isset($_POST['generar_npc'])){
  2. $nombre=$_POST['nombre'];
  3. $subnombre=$_POST['subnombre'];
  4.  
  5. // aquí debes colocar los header() para forzar la descarga (sólo si los necesitas)
  6.  
  7. // los <textarea> son innecesarios, pues sólo vas a imprimir texto
  8. echo "INSERT INTO creature_template (name,subname) VALUES('$nombre','$subnombre');";
  9.  
  10. // aquí terminamos el script, de otra forma se imprimirá lo que le sigue
  11. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 24/08/2015, 13:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 8 meses
Puntos: 319
Respuesta: Generar archivo sql en PHP

No quiero ponerme pesado, pero aca esta la solución.
Cita:
Pero es que dice que asi me pueden robar archivos con solo cambiar el directorio...
Ah si. Sabias que programar en php puede causar insuficiencia renal?
Me gustaría que me des un ejemplo de como con el siguiente código alguien puede "robar" un archivo.

Código PHP:
Ver original
  1. <?php
  2.     header("Content-type: application/octet-stream");
  3.     header("Content-Disposition: attachment; filename=\"codigo.sql\"\n");
  4.     echo "INSERT INTO...";
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #14 (permalink)  
Antiguo 24/08/2015, 13:46
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Lo he hecho tal como me dices... pero me sigue descargando la web "index.php" enves de descargarse el codigo sql donde estan los headers
  #15 (permalink)  
Antiguo 24/08/2015, 15:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por TrinityCore Ver Mensaje
Lo he hecho tal como me dices... pero me sigue descargando la web "index.php" enves de descargarse el codigo sql donde estan los headers
Pues sería cuestión de ver exactamente cómo has hecho las cosas, adivinar no se puede.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 24/08/2015, 16:37
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Pues sería cuestión de ver exactamente cómo has hecho las cosas, adivinar no se puede.
Este seria mi codigo, el que se tendria que generar cuando se pulse el boton Generar sql
Código PHP:
<?php
if(isset($_POST['generar_npc'])){
    
$entry=$_POST['entry'];
    
$modelo1=$_POST['modelo1'];
    
$modelo2=$_POST['modelo2'];
    
$modelo3=$_POST['modelo3'];
    
$modelo4=$_POST['modelo4'];
    
$nombre=$_POST['nombre'];
    
$subnombre=$_POST['subnombre'];
    
$menu_id=$_POST['menu_id'];
    
$minlevel=$_POST['minlevel'];
    
$maxlevel=$_POST['maxlevel'];
    
$faccion=$_POST['faccion'];
    
$npcflag=$_POST['npcflag'];
    
$escala=$_POST['escala'];
    
$rango=$_POST['rango'];
    
$damage1=$_POST['damage1'];
    
$damage2=$_POST['damage2'];
    
$unit_class=$_POST['unit_class'];
    
$familia=$_POST['familia'];
    
$tipo=$_POST['tipo'];
    
$resistencia1=$_POST['resistencia1'];
    
$resistencia2=$_POST['resistencia2'];
    
$resistencia3=$_POST['resistencia3'];
    
$resistencia4=$_POST['resistencia4'];
    
$resistencia5=$_POST['resistencia5'];
    
$resistencia6=$_POST['resistencia6'];
    
$mingold=$_POST['mingold'];
    
$maxgold=$_POST['maxgold'];
    
$vida=$_POST['vida'];
    
$mana=$_POST['mana'];
    
$armadura=$_POST['armadura'];
    
$regenvida=$_POST['regenvida'];
echo 
"<center>"."<textarea>"."INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `DamageModifier`, `ExperienceModifier`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`)
VALUES('"
.$entry."',
'0',    
'0',
'0',
'0',
'0',
'"
.$modelo1."',    
'"
.$modelo2."',    
'"
.$modelo3."',    
'"
.$modelo4."',    
'"
.$nombre."',    
'"
.$subnombre."',
NULL,
'"
.$menu_id."',    
'"
.$minlevel."',
'"
.$maxlevel."',
'0',
'"
.$faccion."',    
'"
.$npcflag."',    
'0.91',
'1.14286',
'"
.$escala."',    
'"
.$rango."',    
'0',    
'2000',    
'2000',    
'"
.$damage1."',    
'"
.$damage2."',    
'"
.$unit_class."',    
'0',    
'0',    
'0',
'"
.$familia."',    
'0',
'0',
'0',
'0',
'"
.$tipo."',    
'0',
'0',    
'0',
'0',
'"
.$resistencia1."',
'"
.$resistencia2."',
'"
.$resistencia3."',
'"
.$resistencia4."',
'"
.$resistencia5."',
'"
.$resistencia6."',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',    
'0',    
'"
.$mingold."',    
'"
.$maxgold."',
'',
'0',
'3',
'1',
'"
.$vida."', 
'"
.$mana."',
'"
.$armadura."',
'1',
'1',
'0',
'0',
'0',
'0',
'0',
'0',
'"
.$regenvida."',
'0',
'1',
'',
'0',
'',
'0');"
."</textarea>"."</center>";
    }

?>
<?php
 
if( count($sql) > )
        {
            for( 
$contador=0$contador count($sql); $contador++ )
                echo 
"".$sql[$contador]."<br/>";
        }
?>
podrias explicarme mas o menos donde o en que parte va exactamente los headers del archivo para que no se descargue la pagina de inicio cuando le de en el boton "Generar sql"
  #17 (permalink)  
Antiguo 24/08/2015, 18:14
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 8 meses
Puntos: 319
Respuesta: Generar archivo sql en PHP

Las primeras 33 lineas... Horribles.
Código PHP:
Ver original
  1. <?php
  2.     if($_SERVER['REQUEST_METHOD'] == "POST") {
  3.    
  4.         $template = "INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `DamageModifier`, `ExperienceModifier`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES('[entry]', '0', '0', '0', '0', '0', '[modelo1]', '[modelo2]', '[modelo3]', '[modelo4]', '[nombre]', '[subnombre]', NULL, '[menu_id]', '[minlevel]', '[maxlevel]', '0', '[faccion]', '[npcflag]', '0.91', '1.14286', '[escala]', '[rango]', '0', '2000', '2000', '[damage1]', '[damage2]', '[unit_class]', '0', '0', '0', '[familia]', '0', '0', '0', '0', '[tipo]', '0', '0', '0', '0', '[resistencia1]', '[resistencia2]', '[resistencia3]', '[resistencia4]', '[resistencia5]', '[resistencia6]', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '[mingold]', '[maxgold]', '', '0', '3', '1', '[vida]', '[mana]', '[armadura]', '1', '1', '0', '0', '0', '0', '0', '0', '[regenvida]', '0', '1', '', '0', '', '0');";
  5.        
  6.         foreach($_POST as $key => $value)
  7.             $template = str_replace("[$key]", $value, $template);
  8.        
  9.         header("Content-type: application/octet-stream");
  10.         header("Content-Disposition: attachment; filename=\"codigo.sql\"\n");
  11.         echo $template;
  12.        
  13.     }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #18 (permalink)  
Antiguo 25/08/2015, 08:59
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por NSD Ver Mensaje
Las primeras 33 lineas... Horribles.
Yo agradezco su ayuda... pero estaria bueno que junto a la respuesta me brinde una pequeña explicacion de lo que ha hecho, soy novato en php, recien estoy comenzando a recorrer este camino y no se me hace tan facil, mas cuando solo he visto 40 videos de php/mysql, donde hasta ahora solo he aprendido a hacer sistema de registro, todo lo demas me lo he ingeniado un poco, pero el ingenio es limitado a las herramientas de trabajo que uno posea, por eso me gustaria que explicara que ha hecho asi yo poder cojer mas expe.

Gracias
  #19 (permalink)  
Antiguo 25/08/2015, 11:55
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 8 meses
Puntos: 319
Respuesta: Generar archivo sql en PHP

Código PHP:
Ver original
  1. if(isset($_POST['generar_npc'])){
Eso es como minimo incorrecto, lo que estas preguntando es "Vino el campo generar_npc por por post con algún valor?" en ese if entraras por si a esa pregunta, pero nada dice eso si el request es efectivamente post, solo verifica si esta definida una variable y con el tiempo veras que hay varias formas de que ese if sea verdadero (o falso).
Código PHP:
Ver original
  1. if($_SERVER['REQUEST_METHOD'] == "POST") {
eso lo que pregunta es si el request es POST, no pregunta por los valores enviados, si es un POST entonces se esta solicitando la accion de descargar, los parametros con lo que se solicita tal accion, son otro tema aparte.

Código PHP:
Ver original
  1. $entry=$_POST['entry'];
  2.     $modelo1=$_POST['modelo1'];
  3.     $modelo2=$_POST['modelo2'];
  4.     $modelo3=$_POST['modelo3'];
  5.     $modelo4=$_POST['modelo4'];
  6.     $nombre=$_POST['nombre'];
  7.     $subnombre=$_POST['subnombre'];
  8.     $menu_id=$_POST['menu_id'];
  9.     $minlevel=$_POST['minlevel'];
  10.     $maxlevel=$_POST['maxlevel'];
  11.     $faccion=$_POST['faccion'];
  12.     $npcflag=$_POST['npcflag'];
  13.     $escala=$_POST['escala'];
  14.     $rango=$_POST['rango'];
  15.     $damage1=$_POST['damage1'];
  16.     $damage2=$_POST['damage2'];
  17.     $unit_class=$_POST['unit_class'];
  18.     $familia=$_POST['familia'];
  19.     $tipo=$_POST['tipo'];
  20.     $resistencia1=$_POST['resistencia1'];
  21.     $resistencia2=$_POST['resistencia2'];
  22.     $resistencia3=$_POST['resistencia3'];
  23.     $resistencia4=$_POST['resistencia4'];
  24.     $resistencia5=$_POST['resistencia5'];
  25.     $resistencia6=$_POST['resistencia6'];
  26.     $mingold=$_POST['mingold'];
  27.     $maxgold=$_POST['maxgold'];
  28.     $vida=$_POST['vida'];
  29.     $mana=$_POST['mana'];
  30.     $armadura=$_POST['armadura'];
  31.     $regenvida=$_POST['regenvida'];
Eso... bueno... sin palabras. Es una tacnica mas que obsoleta que viene de PHP 4, cuando $_POST se llamaba $HTTP_POST_VARS y como es muy molesto trabajar con un nombre de variable tan largo se hacia eso.
$_POST tiene una longitud aceptable y es facil de trabajar, no tiene ningun sentido hacer eso.
ademas de que hay mejores formas, por ejemplo:
Código PHP:
Ver original
  1. extract($_POST);
o
Código PHP:
Ver original
  1. $_P = &$_POST;
si lo que se busca es acortar la longitud, pero a mi criterio, ninguna tiene razon de ser salvo en casos particulares, extract por su parte es "peligrosa" si no se toman algunas precauciones.

Código PHP:
Ver original
  1. echo "<center>"."<textarea>"."INSERT INTO .... '0');"."</textarea>"."</center>";
Eso se te indico explicitamente que lo tenias que sacar, nada tiene que ver no saber un lenguaje, si alguien te dice "los <textarea> son innecesarios, pues sólo vas a imprimir texto" y te pone un ejemplo sin los textarea, y tu los sigues dejando, claramente o no estas prestando atencion, o no te interesa, o nos tomas el pelo.

Código PHP:
Ver original
  1. VALUES('".$entry."',
  2. '0',    
  3. '0',
  4. '0',
  5. '0',
  6. '0',
  7. '".$modelo1."',    
  8. '".$modelo2."',    
  9. '".$modelo3."',    
  10. '".$modelo4."',    
  11. '".$nombre."',    
  12. '".$subnombre."',
  13. NULL,
  14. '".$menu_id."',    
  15. '".$minlevel."',
  16. '".$maxlevel."',
  17. '0',
  18. '".$faccion."',    
  19. '".$npcflag."',    
  20. '0.91',
  21. '1.14286',
  22. '".$escala."',    
  23. '".$rango."',    
  24. '0',    
  25. '2000',    
  26. '2000',    
  27. '".$damage1."',    
  28. '".$damage2."',    
  29. '".$unit_class."',    
  30. '0',    
  31. '0',    
  32. '0',
  33. '".$familia."',    
  34. '0',
  35. '0',
  36. '0',
  37. '0',
  38. '".$tipo."',    
  39. '0',
  40. '0',    
  41. '0',
  42. '0',
  43. '".$resistencia1."',
  44. '".$resistencia2."',
  45. '".$resistencia3."',
  46. '".$resistencia4."',
  47. '".$resistencia5."',
  48. '".$resistencia6."',
  49. '0',
  50. '0',
  51. '0',
  52. '0',
  53. '0',
  54. '0',
  55. '0',
  56. '0',
  57. '0',    
  58. '0',    
  59. '".$mingold."',    
  60. '".$maxgold."',
  61. '',
  62. '0',
  63. '3',
  64. '1',
  65. '".$vida."',  
  66. '".$mana."',
  67. '".$armadura."',
  68. '1',
  69. '1',
  70. '0',
  71. '0',
  72. '0',
  73. '0',
  74. '0',
  75. '0',
  76. '".$regenvida."',
  77. '0',
  78. '1',
  79. '',
  80. '0',
  81. '',
Eso... bueno, siendo estrictos esta bien porque funciona, pero de las varias formas de lograr lo mismo es la mas precaria.
Yo (y cualquier otra persona) viendo esa parte del codigo sola, no tengo idea de que es lo que hace ademas de concatenar variables.
Una buena alternativa es crear una plantilla de la query:
Código PHP:
Ver original
  1. $template = "INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `DamageModifier`, `ExperienceModifier`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES('[entry]', '0', '0', '0', '0', '0', '[modelo1]', '[modelo2]', '[modelo3]', '[modelo4]', '[nombre]', '[subnombre]', NULL, '[menu_id]', '[minlevel]', '[maxlevel]', '0', '[faccion]', '[npcflag]', '0.91', '1.14286', '[escala]', '[rango]', '0', '2000', '2000', '[damage1]', '[damage2]', '[unit_class]', '0', '0', '0', '[familia]', '0', '0', '0', '0', '[tipo]', '0', '0', '0', '0', '[resistencia1]', '[resistencia2]', '[resistencia3]', '[resistencia4]', '[resistencia5]', '[resistencia6]', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '[mingold]', '[maxgold]', '', '0', '3', '1', '[vida]', '[mana]', '[armadura]', '1', '1', '0', '0', '0', '0', '0', '0', '[regenvida]', '0', '1', '', '0', '', '0');";
Donde quien la ve se da cuenta que se trata de un modelo de consulta, nada se sabe de los valores puntuales, pero esa es la idea de una plantilla. Hasta podrias poner todas las plantillas en un archivo separado y cargarlas, si dos juegos diferentes soportan "creature_template" solo cargas el template que corresponda al juego y listo, el resto del codigo no se modifica.

Código PHP:
Ver original
  1. foreach($_POST as $key => $value)
  2.             $template = str_replace("[$key]", $value, $template);
Eso no necesita mucha explicacion, puedes ir al manual de str_replace si intuitivamente no lo descifras o al de foreach.
Código PHP:
Ver original
  1. ?>
  2. <?php
  3.  if( count($sql) > 0 )
  4.         {
  5.             for( $contador=0; $contador < count($sql); $contador++ )
  6.                 echo "".$sql[$contador]."<br/>";
  7.         }
  8. ?>
Esto..
1) No tiene sentido cerrar y abrir los tag de php, de hecho una buena practica es abrirlos al inicio del archivo y no cerrarlos nunca.
hacerlo asi puede (ademas de carecer de sentido) traer problemas, ya que entre el cierre y la apertura hay un salto de linea que si trabajaras con sessiones podria darte problemas. fíjate como un detalle tan tonto te puede complicar la vida.
2) Nose que es $sql, nose que es lo que hace eso ademas de lanzar warning y notices.
Código PHP:
Ver original
  1. header("Content-type: application/octet-stream");
  2.         header("Content-Disposition: attachment; filename=\"codigo.sql\"\n");
  3.         echo $template;
este es codigo que vengo repitiendo ya 3 veces desde el inicio del post. en el link de @pateketrueke los primeros 20 resultados te sirven y son similares a este.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #20 (permalink)  
Antiguo 26/08/2015, 18:25
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por NSD Ver Mensaje
NDS
Claro... lo que pasa es que como he dicho, actualmente estoy aprendiendo, y he usado todas esas lineas porque aun no he aprendido (no han comentado en el video), de las nuevas formas de ahorra esas lineas de code...

Ahora ya veo lo que uno puede ahorrarse de tantas lineas de codigo a tener solo esto:

Código PHP:
<?php
    
if($_SERVER['REQUEST_METHOD'] == "POST"){
        
extract($_POST);
        
$template "INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `DamageModifier`, `ExperienceModifier`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES('[entry]', '0', '0', '0', '0', '0', '[modelo1]', '[modelo2]', '[modelo3]', '[modelo4]', '[nombre]', '[subnombre]', NULL, '[menu_id]', '[minlevel]', '[maxlevel]', '0', '[faccion]', '[npcflag]', '0.91', '1.14286', '[escala]', '[rango]', '0', '2000', '2000', '[damage1]', '[damage2]', '[unit_class]', '0', '0', '0', '[familia]', '0', '0', '0', '0', '[tipo]', '0', '0', '0', '0', '[resistencia1]', '[resistencia2]', '[resistencia3]', '[resistencia4]', '[resistencia5]', '[resistencia6]', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '[mingold]', '[maxgold]', '', '0', '3', '1', '[vida]', '[mana]', '[armadura]', '1', '1', '0', '0', '0', '0', '0', '0', '[regenvida]', '0', '1', '', '0', '', '0');";
            foreach(
$_POST as $key => $value)
            
$template str_replace("[$key]"$value$template);
            
header("Content-type: application/octet-stream");
            
header("Content-Disposition: attachment; filename=\"codigo.sql\"\n");
            echo 
$template;
    }

?>
Realmente mi problema al descargar era que: yo tenia el formulario en el mismo lugar donde estaba el codigo...
entonces yo descargaba el formu completo..

La verdad fue una explicacion muy buena y he aprendido tambien nuevas cosas que me ahorraran muchisimo codigo y el no tener que espesificar en el sql el nombre de variables...

agradezco mucho la respuesta que me ha hecho, me ha sido muy util..
como he dicho, disculpa que soy novato y a veces pongo muy cabeza dura hahaha.

Ahora una pregunta rapida y definitiva: "Como podria hacer para que el archivo descargado contenga el nombre que el usuario introduzca en el campo de "Nombre" "?
  #21 (permalink)  
Antiguo 26/08/2015, 18:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Generar archivo sql en PHP

Cita:
Como podria hacer para que el archivo descargado contenga el nombre que el usuario introduzca en el campo de "Nombre"
Pues sí dicha variable viene en el $_POST, y haces extract() entonces sería $Nombre ¿no?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #22 (permalink)  
Antiguo 26/08/2015, 19:33
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 5 meses
Puntos: 11
Respuesta: Generar archivo sql en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Pues sí dicha variable viene en el $_POST, y haces extract() entonces sería $Nombre ¿no?
Hahaha, me confundi!!, pense que era [nombre] como en la query sql xD.
Perdon, no me di cuenta...
Gracias!
  #23 (permalink)  
Antiguo 26/08/2015, 19:37
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 8 meses
Puntos: 319
Respuesta: Generar archivo sql en PHP

Código PHP:
Ver original
  1. <?php
  2.     if($_SERVER['REQUEST_METHOD'] == "POST"){
  3.         extract($_POST);
ese es exactamente el tipo de uso "peligroso" de extract que se debe evitar, un usuario malicioso puede añadir campos a tu formulario con el nombre y el valor que quiera, luego extract reemplazara las variables definidas actualmente por las nuevas ingresadas por el usuario malicioso.
Tal como esta el codigo es totalmente innesesario hacer uso de extract, pero en caso de necesitarlo, la forma segura seria:
Código PHP:
Ver original
  1. extract($_POST, EXTR_SKIP);
para que el archivo se descargue con el nombre de usuario debes reemplazar "codigo.sql" por "nombre.sql" en el header, donde nombre es la variable que contiene el nombre la cual previamente tiene que "sanear" para que solo contenga caracteres validos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: formulario, sql, usuarios
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 11:40.