Comunidad de diseño web y desarrollo en internet online

Ejecutar líneas de php antes que otras en un mismo archivo

Citar            
MensajeEscrito el 01 Jun 2010 07:00 am
Saludos,

quisiera saber cómo puedo hacer para ejecutar un código php antes de que se ejecute otro contenido en el mismo archivo.

Para graficar más claramente mi problema, es así cómo está contenido el código de mi archivo:

Código PHP :

código html
<? 
// El código que quiero que se ejecute primero (inserta datos en la BDD)
?>
código html
<?
// El código que quiero que se ejecute segundo (Muestra los datos de la BDD)
?>
código html


El problema está que aún manteniendo ese orden, primero se ejecuta el segúndo código php y luego el primero y se imprime la página sin los nuevos datos ingresados, sin embargo en la BDD si están ingresados los nuevos datos.

El primero me inserta datos en MySQL
El segundo código me extrae datos de MySQL

Si se ejecuta primero el segundo código no se me muestra los datos que se suponen fueron ingresados por el primer código.

Perdón la insistencia, pero espero dejar todo bien claro, alguien puede ayudarme para hacer que se me muestre el dato ingresado en la BDD teniendo en cuenta q todo se hace en el mismo archivo?

Anticipadamente, gracias x su atención.

Por carlosteranviteri

16 de clabLevel



Genero:Masculino  

Quito - Ecuador

firefox
Citar            
MensajeEscrito el 01 Jun 2010 08:01 pm
podrias poner el codigo? esta extraño eso...
pero tambien otra cosa que podrias hacer... en tu consulta agregar algo que se llama last insert id
el ultimo id insertado... solo muestra ese... podria serte de gran ayuda...





te recomiendo que separes el codigo phpy html...
podrias poner cada funcion ke vallas a hacer en php en archivos distintos ejemplo:

Código :

código html <?  // El código que quiero que se ejecute primero (inserta datos en la BDD) ?>

el de insertar datos supongamos que lo tienes en datos.php
dentro del codigo html aria esto...

Código HTML :

<form name="d" action="datos.php" method="post">

de esa manera estas mandando llamar que lo que esta en datos.php se ejecute... despues de igual manera mandas llamar a los demas dandole el orden que gustes...
o bien dentro del php podrias desirle ke despues de ke se ejecute el datos.php se mande a donde lo vas a mostrar...

suerte y si no me explike bien asmelo saber...

Por marioparra

43 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Jun 2010 08:20 pm
Lo tuyo se pude resolver con AJAX o JQuery... mmm pero si quiers algo sencillo pues te doy una idea rapida...

Supongamos que tenemos una base de datos con 2 campos, id,nombre...

ahora con este codigo

Código PHP :

<?php

//include('conexion.php'); //tu archivo para conectar a la DB

$envio = (isset($_POST['envio'])) ? false : true;

if($envio){
  if(isset($_GET['id'])){
    //Aqui haces la consulta y con una condicion WHERE usar el parametro que pasas por GET
    //asi extraes el ultimo dato insertado y lo muestras...
  }else{
    echo "<form name=\"agregar\" method=\"POST\" action=\"".$_SERVER[PHP_SELF]."\"/>
    Ingresa un nombre: <input type=\"text\" name=\"nombre\"/>
    <input type=\"submit\" name=\"envio\" value=\"agregar\"/></form>";
  }
}else{
  $query = mysql_query("INSERT INTO tabla (nombre) VALUES ($_POST[nombre])");
  $ultimoId = mysql_insert_id($query);
  echo "<script language='JavaScript'>location.href='".$url."?id=".$ultimoId."'; </script>";
}

?>


Esta algo rustico pero te puede dar una idea

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2010 08:23 pm
Se me olvidaba, antes de pasar a insertar el dato recuerda primero pasarlo por algun "filtro" para evitar inyecciones a tu base de datos... es parecido a lo que mariposa dice (me ganaste en el post ;) )

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2010 12:25 am
Gracias por sus respuestas.

last insert id, ya lo utilicé en ese código y cumplió con mi objetivo. Relataré el problema más a detalle.

todo el código está en miarchivo.php el cuál, en resumen tiene el siguiente código:

Código PHP :

<script language="JavaScript" src="js/switchParaCampos.js"></script>
<script type="text/javascript" src="js/validacion_viva.js"></script>
<link rel="stylesheet" type="text/css" href="css/validacion_viva.css" />
<?
include 'includes/funciones/conexion.php';
include 'includes/funciones/mensaje.php';
include 'includes/funciones/fechas.php';
include 'includes/clases/class.ciudad.php';
include 'includes/clases/class.usuario.php';
include 'includes/clases/class.ofertaLaboral.php';
include 'includes/clases/class.categoriaDeConocimiento.php';
include 'includes/clases/class.especialidadDeConocimiento.php';
include 'includes/clases/class.conocimiento.php';
include 'includes/clases/class.ofertalaboral_has_conocimiento.php';

$ciudades=new ciudad();
$ciudades=$ciudades->listarCiudades();
$cantidadDeCiudades=count($ciudades);

$usuario=$_SESSION['usuario'];
$empresa=new usuario();
$empresa->buscarIdUsuario($nombreUsuario);
$txtIdEmpresa=$empresa->idUsuario;

$ofertas=new ofertaLaboral();
$ofertas=$ofertas->buscarOfertasLaboralesDeEmpresa($txtIdEmpresa);
$cantidadDeOfertas=count($ofertas);

/************ Operaciones para Formulario de Oferta Laboral *************/
// Crear nueva oferta
if(isset($btn_guardar)){
   if($txtPreguntas==0){
      if($txtSiOtroConocimiento=0){
            $insertarOfertaLaboral=new ofertaLaboral();
            $insertarOfertaLaboral->crearOfertaLaboral('',$txtTituloOferta,'no publicado',$txtSector,$txtDireccion,$txtContrato,$txtSalario,$txtBeneficios,$txtOtrosBeneficios,$txtVacantes,$txtDuracion,$txtSexo,$txtLicencia,$txtEstadoCivil,$txtViajar,$txtNivelViaje,$txtResidencia,$txtNivelEducativo,$txtCargo,$txtPersonasACargo,'','','','',$txtDescripcion,'','','','','','','','','','','','','',$txtIdEmpresa,$txtCiudad);
            $id_oferta=$insertarOfertaLaboral->id_oferta;
      }
      elseif($txtSiOtroConocimiento=1){
            $insertarOfertaLaboral=new ofertaLaboral();
            $insertarOfertaLaboral->crearOfertaLaboral('',$txtTituloOferta,'no publicado',$txtSector,$txtDireccion,$txtContrato,$txtSalario,$txtBeneficios,$txtOtrosBeneficios,$txtVacantes,$txtDuracion,$txtSexo,$txtLicencia,$txtEstadoCivil,$txtViajar,$txtNivelViaje,$txtResidencia,$txtNivelEducativo,$txtCargo,$txtPersonasACargo,$txtOtroConocimiento,$txtNivelOtroConocimiento,$txtExperienciaOtroConocimiento,$txtDescripcionOtroConocimiento,$txtDescripcion,'','','','','','','','','','','','','',$txtIdEmpresa,$txtCiudad);
            $id_oferta=$insertarOfertaLaboral->id_oferta;
      }
   }
   elseif($txtPreguntas==1){
      if($txtPregunta1==''||$txtPregunta2==''||$txtPregunta3==''||$txtPregunta4==''||$txtPregunta5==''){
          mensajeAlerta("Usted no ha formulado todas las preguntas para los candidatos, de todas maneras su oferta fue guardada");
         if($txtSiOtroConocimiento=0){
               $insertarOfertaLaboral=new ofertaLaboral();
               $insertarOfertaLaboral->crearOfertaLaboral('',$txtTituloOferta,'no publicado',$txtSector,$txtDireccion,$txtContrato,$txtSalario,$txtBeneficios,$txtOtrosBeneficios,$txtVacantes,$txtDuracion,$txtSexo,$txtLicencia,$txtEstadoCivil,$txtViajar,$txtNivelViaje,$txtResidencia,$txtNivelEducativo,$txtCargo,$txtPersonasACargo,'','','','',$txtDescripcion,$txtPregunta1,$txtRespuesta1,$txtPregunta2,$txtRespuesta2,$txtPregunta3,$txtRespuesta3,$txtPregunta4,$txtRespuesta4,$txtPregunta5,$txtRespuesta5,'','','',$txtIdEmpresa,$txtCiudad);
            $id_oferta=$insertarOfertaLaboral->id_oferta;
         }
         elseif($txtSiOtroConocimiento=1){
               $insertarOfertaLaboral=new ofertaLaboral();
               $insertarOfertaLaboral->crearOfertaLaboral('',$txtTituloOferta,'no publicado',$txtSector,$txtDireccion,$txtContrato,$txtSalario,$txtBeneficios,$txtOtrosBeneficios,$txtVacantes,$txtDuracion,$txtSexo,$txtLicencia,$txtEstadoCivil,$txtViajar,$txtNivelViaje,$txtResidencia,$txtNivelEducativo,$txtCargo,$txtPersonasACargo,$txtOtroConocimiento,$txtNivelOtroConocimiento,$txtExperienciaOtroConocimiento,$txtDescripcionOtroConocimiento,$txtDescripcion,$txtPregunta1,$txtRespuesta1,$txtPregunta2,$txtRespuesta2,$txtPregunta3,$txtRespuesta3,$txtPregunta4,$txtRespuesta4,$txtPregunta5,$txtRespuesta5,'','','',$txtIdEmpresa,$txtCiudad);
            $id_oferta=$insertarOfertaLaboral->id_oferta;
         }
      }
   }
   
   
   //Insertar los conocimientos de la oferta   
   $categorias=new categoriaDeConocimiento();
   $categorias=$categorias->listarCategoriasDeConocimiento();
   $num_Categorias=count($categorias);
   
   $sinConocimientos=0;
   
   for($k=0;$k<$num_Categorias;$k++){
   $idCategoriaDeConocimiento[$k]=$categorias[$k]->idCategoriaDeConocimiento;
      $especialidades=new especialidadDeConocimiento();
      $especialidades=$especialidades->listarEspecialidadesDeConocimiento($idCategoriaDeConocimiento[$k]);
      $num_Especialidades=count($especialidades);
        
      for($j=0;$j<$num_Especialidades;$j++){
         $conocimientos=new conocimiento();
         $conocimientos=$conocimientos->listarConocimientos($especialidades[$j]->idEspecialidadDeConocimiento);
         $num_Conocimientos=count($conocimientos);
         
         for($i=0;$i<$num_Conocimientos;$i++){
            if(${"txtConocimiento".$conocimientos[$i]->idConocimiento}==true){
               $insertarOfertaLaboral_has_Conocimiento=new ofertalaboral_has_conocimiento();
               $insertarOfertaLaboral_has_Conocimiento->crearConocimientoDeOfertaLaboral(${"txtNivel".$conocimientos[$i]->idConocimiento},${"txtExperiencia".$conocimientos[$i]->idConocimiento},${"txtDescripcionConocimiento".$conocimientos[$i]->idConocimiento},$conocimientos[$i]->idConocimiento,$id_oferta);
            }
            elseif(${"txtConocimiento".$conocimientos[$i]->idConocimiento}==false){
               ++$sinConocimientos;
            }
         }
      }
   }
   // FIN de Insertar los conocimientos de la oferta
   
   // Mensaje para advertir la no existencia de conocimientos en una oferta guardada
   $sinConocimientos=$sinConocimientos-1;
   $num_Conocimientos=new conocimiento();
   $num_Conocimientos=$num_Conocimientos->cantidadDeConocimientos();
   if($sinConocimientos==$num_Conocimientos){
      mensajeAlerta("Usted no ha seleccionado ningún CONOCIMIENTO, de todas maneras su oferta fue guardada");
   }
}
/********* FIN de Operaciones para Formulario de Oferta Laboral **********/

$ACCION=$_GET['accion'];
?>
<table border="0" cellpadding="0" cellspacing="0" width="795">
  <tbody>
    ........
...... 
<?   
//En este PHP muestro las ofertas insertadas
?>
.....
 <? 
if($ACCION==insertarOferta){
 ?>
<!--Formulario para ingreso de Oferta Laboral -->
      <form name="ofertaLaboral" method="post" action="">
             <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
                     --------
                    ------ (datos del formulario)
                 -----
                   ---
      </form>
<?
}
?>
........
........
........
  </tbody>
</table>


Notar que el formulario tiene action="", lo cual llama a la misma página para insertar todos los datos del formulario, y es ahí donde está el problema.

En el código donde inserto conocimientos está una llamada a funciones en donde tomo last_insert_id() y con ello insertar los conocimientos que pertenecen a la misma oferta q se insertan en el formulario que llama a la misma página.

Todo funciona bien, los datos de la oferta se insertan y los conocimientos q pertenecen a esa oferta, utilizando last_insert_id() también se ingresan, el problema está en que, si se fijan, luego del primer bloque de php donde se inserta todo, viene HTML y luego otro código PHP donde muestro todas las ofertas insertadas (*las ofertas sí se muestran excepto la última insertada), luego más HTML, luego el mismo formulario con el que podré ingresar otra oferta y finalizo con el cierre de una condición de PHP donde todo el formulario se muestra si la acción es igual a "insertarOferta".

*La última oferta insertada SÍ consta en la BDD, sin embargo no se muestra en la publiacación de todas las ofertas insertadas.

Por fa, si no lo entienden me avisan pa subir la aplicación a un hosting y puedan entenderlo mejor.

Gracias por su ayuda.

Por carlosteranviteri

16 de clabLevel



Genero:Masculino  

Quito - Ecuador

firefox
Citar            
MensajeEscrito el 02 Jun 2010 04:11 pm
no entiendo pk en el form en el action tengas vacio osea tienes action="" qe no deberias en el action hacer referencia a una pagina que es la que va a ejecutar el form?.....
en ese caso (no se si ya lo tengas) podrias tener una clase la cual unica y exclusivamente aga la consulta ala base de datos y al hacer la consulta imprima los datos y ya esa clase la mandas llamar en el formulario ejemplo:

Código HTML :

<form name="consulta" method="post" action="consulta.class.php">

y asi cuando este en esa linea ya habras insertado los datos en la base de datos... asi ke el consulta.class.php ya vera tu nuevo registro y lo incluira en donde lo imprima

Por marioparra

43 de clabLevel



 

msie8
Citar            
MensajeEscrito el 02 Jun 2010 07:08 pm
ya hice eso, pero el problema persiste.

En el action le he dejado vacío porque las funiciones de insertado de datos están en la misma página, entonces cuando se presiona el botón de enviar datos los datos se envían a esa misma página y hago la comprobación de que si se presionó el botón entonces realizo la inserción, fíjate en mi código, casi al inicio dice

Código PHP :

if(isset($btn_guardar))


Una solución efectiva sería mandar los datos otra página y luego de la inserción con un header("Location:......"); regresar a mi página, pero jústament eso no kiero hacerlo.

En un principio, sí me funcionaba la página, primero insertaba y luego leía los datos, lo que no entiendo es q d un momento a otro le servidor ya no leyó el código en orden y primero leía el código dond se extraen los datos de la base y luego insertaba el dato.

Estuve buscando más en foros y me topé con una explicación en donde usan "ob_start", no sé si eso sea una respuesta válida a mi problema pues ya lo utilicé tal como se mencionaba en un ejemplo y el problema persistió.

Por carlosteranviteri

16 de clabLevel



Genero:Masculino  

Quito - Ecuador

firefox
Citar            
MensajeEscrito el 02 Jun 2010 08:38 pm
que raro etsa eso...

y si al isertar los datos y mostrarlos...
por que mejor no imprimes los datos ingresados... osea que los guarde en la base de datos pero ala ves ke imprima las variables donde estaban alojados esos datos... en lugar de jalarlos desde la bade de datos... lo validas mediante un if para si el guardado fue exitoso imprima esas variables... si me expliko? io lo ise asi mediante este codigo:


Código PHP :

<?php
include_once("./bdmysql.class.php");
$bd=new BDMySQL();
$a=$_POST["txtid"];
$b=$_POST["txtmarca"];
$c=$_POST["txtusuario"];
$d=$_POST["txttargetamadre"];
$e=$_POST["txtmonitor"];
$f=$_POST["txtred"];
$g=$_POST["txtvideo"];
$h=$_POST["txtaudio"];
//foreach($elementos as $elemento)
//{

 if($bd->error==FALSE)
 {
  $sql= "INSERT INTO compus (id, marca, usuario, targetamadre, monitor, red, video, audio) VALUES ('$a','$b','$c','$d','$e','$f','$g','$h');";
$bd-> execute($sql);
  
  echo"DATOS GUARDADOS";
 echo $a ."<br/>";
 echo $b ."<br/>";
 echo $c ."<br/>";
 echo $d ."<br/>";
 echo $e ."<br/>";
 echo $f ."<br/>";
 echo $g ."<br/>";
 echo $h ."<br/>";
  
echo"<br/><br/><a href='../iframe/txtcompus.html'>Ingresar otro registro</a>";
  //echo 'id';
 }ELSE{
 echo "error de conexion";
 }
//}
?>

Por marioparra

43 de clabLevel



 

msie8
Citar            
MensajeEscrito el 02 Jun 2010 09:19 pm

marioparra escribió:

por que mejor no imprimes los datos ingresados... osea que los guarde en la base de datos pero ala ves ke imprima las variables donde estaban alojados esos datos... en lugar de jalarlos desde la bade de datos

ufff, pero si soy un menso!

A veces las respuestas más simples, son las que más demoro en solucionar. Es una excelente idea, gracias, ya logré que me funcione el mostrar el último dato que ingreso.

Sencillamente mandé a imprimir las variables del último registro y luego la consulta a la base y me da como resultado como si todo fuera cosultado.

No era tan grave el problema pero para la situación de llegar a peliar 2 días con eso, pa mi ERES UN GENIO!! :) Lo gracioso de todo es que esa solución alguna vez ya dí a una aplicación que hice hace unos 2 años y no lo recordé :(

Por carlosteranviteri

16 de clabLevel



Genero:Masculino  

Quito - Ecuador

firefox
Citar            
MensajeEscrito el 02 Jun 2010 09:56 pm
jajaja aveces unos soms utiles para otros... ami tambien me an sido util aqui y con respuestas sensillas... muchas veces nos enfrascamos en elgo sensillito pero siempre ahy quien nos de un a pekeña palmada de ayuda... lo qe se ofresca aqui estamos cuidate:D y suerte

Por marioparra

43 de clabLevel



 

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.