Comunidad de diseño web y desarrollo en internet online

procedimientos almacenados mysql php

Citar            
MensajeEscrito el 01 Dic 2011 01:55 am
Hola buenas noches.
soy nuevo en el foro y también un poco nuevo programando PHP y MYSQL.
tengo este inconveniente quiero hacer una guía de remisión para lo cual estoy usando 3 procedimientos almacenados.
le voy a contar un poquito mas del sistema.
este lo estoy haciendo en C# para clientes windows pero la base de datos esta en Linux/Centos. el sistema esta por buen camino ahora estoy en la parte de imprimir la guía de remisión para lo cual estaba usando la herramienta que ofrece Visual studio. crystal Report los dejo este link para que vean mas o menos lo que quiero lograr.
cuando presente esta parte al usuario que usara esta parte del sistema me iso una observacion que algunas guías tienen muchas series de manera que con el cristal report no fue lo mejor solución pues estas (las series) se listan verticalmente.
entonces opte por exportar la data de estos procedimientos a un Excel.. ahi ya esta ok.
Pero jajajaja ese pero ayer el gerente vio el sistema y el quiere que la imprecion no dependa del Excel ya que las pcs clientes no siempre tendrán instalado el Excel.
entonces se me ocurrió hacer con una pagina web, y en eso estoy ahora y por eso es que los visito al foro.


Código PHP :


<body >
<?php
//error_reporting(0);

if(  isset($_GET['serverx']) &&  $_GET['serverx']!=''){
$serverx = $_GET['serverx'];
}else{   $serverx = '0.0.0.0';   }
if(  isset($_GET['usuariox']) &&  $_GET['usuariox']!=''){
$usuariox = $_GET['usuariox'];
}else{   $usuariox = 'no user';   }

if(  isset($_GET['passwdx']) &&  $_GET['passwdx']!=''){
$passwdx = $_GET['passwdx'];
}else{   $passwdx = '';   }

if(  isset($_GET['bdx']) &&  $_GET['bdx']!=''){
$bdx = $_GET['bdx'];
}else{   $bdx = 'no bd';
}

if(  isset($_GET['numguiax']) &&  $_GET['numguiax']!=''){
$numguia = $_GET['numguiax'];
}else{   $bdx = 'nn';
}
?>


// http://localhost:81/ComTel/sistema/Guiasalida.php?serverx=192.168.0.0&usuariox=USER&passwdx=111111&bdx=NOMBD&numguiax=N1

<?php
$conexion = mysql_connect($serverx, $usuariox, $passwdx);
mysql_select_db($bdx, $conexion);
?>


<div >

    
    
    <?php
    $queEmp = "CALL excel_listacabeseraguiasalida('$numguia')";
    //$query = mysql_query($queEmp, $conexion) or die(mysql_error());
   $query = mysql_query($queEmp) or die(mysql_error());
    $consulta = mysql_num_rows($query);
?>
   
     <?php do{?>       
     <?php echo $consulta['Persomal'] ?>           
     <?php echo $consulta['Cliente'] ?>       
     <?php echo $consulta['Ruc'] ?>
     <?php echo $consulta['Almacen'] ?>
     <?php echo $consulta['direccion Alma'] ?>
     <?php echo $consulta['Destino'] ?>
     <?php echo $consulta['fechaemicion'] ?>
     <?php echo $consulta['Enpresa de Transporte'] ?>
     <?php echo $consulta['Ruc Emp transporte'] ?>
     <?php echo $consulta['Uni Trans Marca'] ?>
     <?php echo $consulta['Uni Trans Placa'] ?>
     <?php echo $consulta['licencia conducir'] ?>
    
  <?php }while($consulta = mysql_fetch_assoc($query)); ?>
    
    <?php
 $detale = "CALL excel_detalleguiasalida('$numguia')";
 $querydet = mysql_query($detale) or die(mysql_error());
 $consultadet = mysql_num_rows($querydet);
?>        
      <?php do{?>
  
     <?php echo $consultadet['descripcion'] ?>           
     <?php echo $consultadet['PartNumber'] ?>       
     <?php echo $consultadet['cantidad'] ?>
     <?php echo $consultadet['peso'] ?>
     <?php echo $consultadet['unidadmedida'] ?>  
    
////////////////// dentro de esre wile tengo que ejecutar otro sp para las series


  <?php }while($consultadet = mysql_fetch_assoc($querydet));?>
                    
</div>
</body>
</html>


ese es el codigo y cuando lo ejecuto lista el primero y para el sgundo sale este mensaje

Commands out of sync; you can't run this command now

el problema no es del procedimiento ya que si cambio de posiciones ejecuta el primero y para el otro ya no.

Espero me puedan ayudar GRACIAS.

Por eldavan

12 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Dic 2011 10:09 pm
Hola

Prueba usar mysql_free_result($consulta); después de extraer los datos de cada consulta de la base de datos para evitar problemas como el que tienes.

Además (cuando sea posible) deberías cambiar el uso de la extensión MySQL por MySQLi (excepto si usas MySQL server 4.1 o inferior).

Espero que te sirva y espero respuesta si te sirvió o no

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 01 Dic 2011 11:02 pm
Muchísimas gracias por su respuesta, pues como era urgente que resuelva este tema formule la pregunta también en estos otro foros.

aqui y aqui
y en ellos me dieron la misma sugerencia que use MySQLi. pero como no se usarlo opte por cambiar los procedimientos los los select. y funciona bien.

pero ahora tengo un pequeño problema en esta parte del código.

Código PHP :

 $conta=0;     
     do{          
     ?> 
                                                      
     <td width="122PX" bgcolor="#00CCFF"  >
    <?php echo ( $consultapart['Numero'] ) ?>     
      </td>
     
      <?php  if($conta>2){ 
        $conta=0; ?>    
      </tr>      
      <?php  }   
   $conta+=1;
    }while($consultapart = mysql_fetch_assoc($querypart));  
    ?>


esa parte lo que hace es listar las series pero no se por que la primera impresión la hace vacía de manera que queda una celda vacía como se ve en la foto. (eso pasa paro los tres listado)



aqui los dejo todo el codigo que estoy usando.
por favor si puedieran ayudarme a pasar ese MySQL a--> MySQLi los agradecerá muchísimo.

=======================

Código PHP :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<title>Documento sin título</title>
      <script> 
function Print(){document.body.offsetHeight;window.print()};
</script>
 

<style type="text/css">
#fondo {
   padding-left:80px;
   
   background:url(Guiaremicon.jpg) no-repeat;
}
#cabesera{
   padding-left:0px;
   
   }
#divfecha {
   position:absolute;
   left:185px;
   top:208px;
   width:677px;
   height:23px;
   z-index:1;
}
#divdirecalmacen {
   position:absolute;
   left:186px;
   top:230px;
   width:671px;
   height:20px;
   z-index:2;
}
#divdireciondestino {
   position:absolute;
   left:182px;
   top:252px;
   width:677px;
   height:17px;
   z-index:3;
}

#divempresadestino {
   position:absolute;
   left:89px;
   top:300px;
   width:381px;
   height:32px;
   z-index:4;
}
#divrucempdestino {
   position:absolute;
   left:320px;
   top:313px;
   width:155px;
   height:26px;
   z-index:5;
}

#divrazonsocialemptrans {
   position:absolute;
   left:478px;
   top:300px;
   width:389px;
   height:34px;
   z-index:6;
}
#divrucemptrans {
   position:absolute;
   left:714px;
   top:313px;
   width:153px;
   height:22px;
   z-index:7;
}
#divmarcaplaca {
   position:absolute;
   left:224px;
   top:350px;
   width:294px;
   height:26px;
   z-index:8;
}
#divLicenciaconducir {
   position:absolute;
   left:691px;
   top:350px;
   width:176px;
   height:17px;
   z-index:9;
}
</style>
</head>

<!--<body onload="Print()">      imprimir automaticamente -->
<body >
<?php




//error_reporting(0);

if(  isset($_GET['serverx']) &&  $_GET['serverx']!=''){
$serverx = $_GET['serverx'];
}else{   $serverx = '0.0.0.0';   }
if(  isset($_GET['usuariox']) &&  $_GET['usuariox']!=''){
$usuariox = $_GET['usuariox'];
}else{   $usuariox = 'no user';   }

if(  isset($_GET['passwdx']) &&  $_GET['passwdx']!=''){
$passwdx = $_GET['passwdx'];
}else{   $passwdx = '';   }

if(  isset($_GET['bdx']) &&  $_GET['bdx']!=''){
$bdx = $_GET['bdx'];
}else{   $bdx = 'no bd';
}

if(  isset($_GET['numguiax']) &&  $_GET['numguiax']!=''){
$numguia = $_GET['numguiax'];
}else{   $bdx = 'nn';
}
?>


<?php

// http://localhost:81/ComTel/sistema/Guiasalida.php?serverx=192.168.1.34&usuariox=comtel&passwdx=123456&bdx=comtelperu&numguiax=N3

$conexion = mysql_connect($serverx, $usuariox, $passwdx);
mysql_select_db($bdx, $conexion);
mysql_query("SET NAMES 'utf8'");
?>




<div  id="fondo">    
  

  <?php
  //  $queEmp = "CALL excel_listacabeseraguiasalida('$numguia')";
// select para la cabecera de la guía      
$queEmp = "select `g`.`nunmerodeguia` AS `nunmerodeguia`, concat(`p`.`nombre`,_latin1' ',`p`.`apellidos`) AS `Persomal`,`pc`.`nombreComercial` AS `Cliente`,........................`from (((((((((((`guiaremicion_salida` `g` join `detalleguiaremicion_salida` `dg` on((`.............................................`))) ))where `g`.`nunmerodeguia`='$numguia'group by `g`.`nunmerodeguia`   ;";   
   $query = mysql_query($queEmp) or die(mysql_error());
    $consulta = mysql_num_rows($query);
   ?>
  
  <?php do{?>
<div id="divfecha"> <a href="javascript:Print();">   <?php echo $consulta['fechaemicion'] ?>      </a></div>
<div id="divdirecalmacen"><?php echo $consulta['direccion Alma'] ?> </div>
<div id="divdireciondestino">   <?php echo $consulta['Destino'] ?> </div>
<div id="divempresadestino"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    <?php echo $consulta['Cliente'] ?>    </div>
<div id="divrucempdestino">    <?php echo $consulta['Ruc'] ?></div>
<div id="divrazonsocialemptrans"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <?php echo $consulta['Enpresa de Transporte'] ?> </div>
<div id="divrucemptrans"> <?php echo $consulta['Ruc Emp transporte'] ?>    </div>
<div id="divmarcaplaca"> <?php echo $consulta['Uni Trans Marca'] ?> </div>
<div id="divLicenciaconducir"><?php echo $consulta['licencia conducir'] ?></div>
<?php $personal= $consulta['Persomal'] ;?>  
 <?php }while($consulta = mysql_fetch_assoc($query));           ?>    
  
  <!--  fin cabesera -->
  <table width="788" height="370" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <th scope="col">&nbsp;
    </th>
  </tr>
</table>

  <!-- para el estapcio de la cabesera -->
 <?php
 //$queEmp = "CALL excel_detalleguiasalida('$numguia')";
/// select para los productos de la guia
$queEmp = " SELECT  `dg`.`descripcion` AS  `descripcion` ,  `dg`.`PartNumber` AS  `PartNumber` ,  `dg`.`cantidad` AS  `cantidad` ,  `dg`.`peso` AS  `peso` ,  `dg`.`unidadmedida` AS  `unidadmedida`
FROM ...........................) ))where`g`.`nunmerodeguia`='$numguia'group by `dg`.`PartNumber`    ;";

 $query = mysql_query($queEmp) or die(mysql_error());
 $consulta = mysql_num_rows($query);
 
?>
</p>
<div style="padding-top:15px; height:637PX;"> 
    <table  width="780"   border="0" cellpadding="0" cellspacing="0"> 
    
       <tr > 
      <?php 
     $item=0;
     do{?> 
   
      <td valign="top" bgcolor="#999999" width="47px" align="center">
      
    <?php if($item==0){
      }else{
          print($item);
         }  ?>
    
      </td>
        <td valign="top"  bgcolor="#33FFFF" width="492">
             <?php echo $consulta['descripcion'];
           $partn= $consulta['PartNumber'];    
          ?>           
            
        
        
        
        <?php
 //$queEmp = "CALL excel_detalleguiasalida('$numguia')";
// select para las series de los productos de la guia
$partnam = "select cast(`ns`.`Numero` as char(50) charset utf8) AS `Numero` ..............................o`))) where`g`.`nunmerodeguia`='$numguia' and     `dg`.`PartNumber`= '$partn' ;";
 $querypart = mysql_query($partnam) or die(mysql_error());
 $consultapart = mysql_num_rows($querypart);
  
?>
                <table width="490" bgcolor="#99FF33">        
      
         <tr >
      <?php 
     
     $conta=0;     
     do{          
     ?> 
                                                      
     <td width="122PX" bgcolor="#00CCFF"  >
    <?php echo ( $consultapart['Numero'] ) ?>     
      </td>
     
      <?php  if($conta>2){ 
        $conta=0; ?>    
      </tr>      
      <?php  }   
   $conta+=1;
    }while($consultapart = mysql_fetch_assoc($querypart));  
    ?>
  </table>
        
  
        
        
         </td>       
     
     <td valign="top" bgcolor="#CCFF99" width="80" align="center">
    <?php echo $consulta['cantidad'] ?>
     </td>
     
      <td valign="top" bgcolor="#66FFCC" width="73" align="center">
    <?php echo $consulta['unidadmedida'] ?>       
     </td>
     <td valign="top" bgcolor="#999999" width="85" align="center">
    <?php echo $consulta['peso'] ?>
    </td> 
    
          
  
  </tr>
       <tr>
  <td>&nbsp;</td>
  </tr>
  
  <?php 
  $item+=1;
  }while($consulta = mysql_fetch_assoc($query));  ?>
    
  </table>         

</div>

</div>
</body>
</html>

Por eldavan

12 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Dic 2011 01:26 am
Hola
:shock:
Definitivamente... antes de continuar, hay que hacer algo que vamos a llamar: "Operación limpieza de código"

Para eso:
1º Saca todo lo que tienes entre las etiquetas <style></style>, y guárdalo en un archivo con el nombre que quieras con la extensión .css
Nota: Asegúrate de eliminar las etiquetas <style></style>

2º Insertas una etiqueta link donde relacionas la hoja que creaste en el punto anterior, algo parecida a esta:
<link rel="stylesheet" type="text/css" href="main.css" />
Donde main.css es el nombre del archivo del punto anterior

3º Organiza tu Cabecera del reporte en una tabla (aprovecha las capacidades de colspan y rowspan donde sea necesario)

Con eso creo que todo va a ser más legible, limpio y eficiente

Ahora lo de MySQLi: realmente no es mucha la diferencia, pero te recomiendo separar la forma de manejar los comandos como si estuvieras manejando MySQL en consola.

Por ejemplo puedes eliminar una linea de código agregando el parámetro de la base de datos en mysql_connect, ahora quedaría así:

$conexion = mysql_connect($bdx, $serverx, $usuariox, $passwdx);

Y el resto de funciones las manejas agregando "i" a todas las funciones mysql, quedando la conexión así:

$conexion = mysqli_connect($bdx, $serverx, $usuariox, $passwdx);

Es más, cuando pueda visualizar mejor el código, podríamos analizar la posibilidad de usar mysqli_multi_query

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 02 Dic 2011 01:55 am
Gracias por tus sugerencias de "Operación limpieza de código". las tomare muy en cuenta (aunque la pagina la voy a usar dentro de un formulario windows.).
y con respecto a la cabecera no pienses que a ala primera elegí los divs resulta que probando con las tablas realice una guía con un producto que tenia un nombre un poco largo y este movió toda las otras columnas y como esto se va imprimir en una hoja ya impresa ya no coincidían las posiciones y con los divs puedo ir probando hasta que lleguen a su posición exacta.
no es que quiera justiciar ese des orden y los errores que hay pero quiero que me den una manito en como hacer eso de que no aparezca ese espacio vacío.
Gracias.

Por eldavan

12 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Dic 2011 04:14 am
Mira, creo que toca primero despejar dudas si es problema de css, así que pruébalo sin estilo a ver si sale bien todo...

otra cosa... ubica todo el código php no estético arriba[antes de las etiquetas <html> (consultas más que todo)] y puedes guardarlos con ciclos for o while (o do... while pero replanteando la condición) en arrays y los muestras con ciclos for o foreach según sea el caso en el lugar que te toca mostrarlo algo parecido a esto:

for($i=0; $i<mysqli_num_rows($query); $i++) {
$fila=mysqli_fetch_array($query);
$asignatura[]= $fila['nom_asignatura'];
$grupo[]= $fila['num_grupo'];
$detalle[]= $fila['id_detalle'];
}

si el problema no es de css el problema puede ser de la condición do... while

Cuéntanos que tal fue el asunto :)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 02 Dic 2011 02:58 pm
Hola buenos días, mira he echo las modificaciones del codigo que tu me dices. pero sigue el problemita.
en esta dirección estoy dejando los archivos y la base de datos (me cree una de tres tablitas para que se pueda ver mejor el ejemplo).

https://docs.google.com/open?id=0B-8TsvuVmDtVYjc3MGJmNWYtMzNjYi00M2E4LWI4MjctNTlkNTE3NWY4NTBk
espero me ayudes con este temita.

Muy agradecido por la ayuda que me estas brindando.
Daván Palma Elí

Por eldavan

12 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Dic 2011 04:52 pm
Hola

La solución inmediata para ese problema es que en el código original (el que mostraste en tu 2º post) modifiques todos tus bucles do{... }while por bucles while{... } y se te quitarán los espacios en blanco, debido a que cuando realiza por primera vez el código no encuentra la respuesta y el resultado de la primera ejecución es un campo NULL.

Además no olvides usar mysqli_free_result después de cada consulta

RECOMENDACIONES FINALES:
Por ahora (Por ahora), deja tu css así, pero debes mejorarlo y encerrar la cabecera en una tabla valiéndote de las propiedades padding, margin y border.

Los datos de conexión no los manejes vía GET sino vía POST o mejor aún en otro archivo php

Monta tus consultas con mysqli_musti_query en la parte superior (sin dejar espacio antes de la etiqueta <?php )

Chao y espero que se te solucione todo (Esperamos respuesta)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 02 Dic 2011 05:52 pm
Esta fue la solución.
"La solución inmediata para ese problema es que en el código original (el que mostraste en tu 2º post) modifiques todos tus bucles do{... }while por bucles while{... } y se te quitarán los espacios en blanco, debido a que cuando realiza por primera vez el código no encuentra la respuesta y el resultado de la primera ejecución es un campo NULL. "

Como dije al principio esta pagina esta echa para mostrarla dentro de unormulario Windows Forms de c# de manera que el método de envió aquí es irrelevante pues el usuario quizá ni se entere que lo que esta viendo es una pagina web.

aquí el código modificado.

Código PHP :

 <?php    if ($row = mysql_fetch_array($querypart)){   
 ?>     
    <table width="490" >        
 
  <tr>
   <?php
    $conta=0;
   do{     ?> 
     <td width="122PX"  >
         <?php echo ($row['numserie'] ) ?>     
      </td>     
      <?php  if($conta==3){ 
        $conta=-1; ?>    
      </tr>  <tr>    
      <?php  }   
   $conta+=1;
    } while ($row = mysql_fetch_array($querypart)); ?>
    </tr>
    
 </table>
    <?php     } ?>  



Se que pronto voy a estar programando paginas ahí si los voy a estar visitando mas seguido.
Por ahora gracias y hasta la vista.

Por eldavan

12 de clabLevel



 

chrome

 

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