Consulta en Base de Datos PHP

Acá continuando con mis proyectos y siguen surgiendo las dudas, te paso a detallar lo que me sucede.
Tengo 2 Bases de Datos subidas ya al servidor
La Base 1 tiene 2 campos: código y nombre
La Base 2 tiene varios campos entre ellos el campo código que es el mismo que esta en la Base 1
Con Dreamweaver hago la consulta de acuerdo a algunos criterios y muestro en una página el listado con los resultados.
Ya tengo los Recorset y los accesos a las bases de datos..
Todo bien hasta acá...
En la página resultado que muestro el resultado de la consulta, muestros varios campos que están en la Base 2 pero también me interesa poder mostrar el campo nombre que SOLO esta en la base 1
Hice lo siguiente que NO funciona:
1- Conecte con la Base 1
2- Hice el Recorset con la base de datos 1
3- Dentro del Recorset Filtre por código y que sea igual a una variable de sesión que defino en la página resultado.
El Código es el siguiente:
<?php do { ?>
<tr>
<td bgcolor="#DDDDDD" class="style7 texto"><?php echo $row_Base2['codigo']; $variable=$row_Base2['codigo'];?> -<strong><strong><strong><strong>
<?php $_SESSION['MM_codigo'] = $variable; echo $_SESSION['MM_codigo']; ?>
</strong></strong></strong></strong>-<span class="style14"><?php echo $row_ObraSociales['nombre'];?> <span class="style15">- <?php echo $obrasocial;?></span></span></td>
..
</tr>
<?php } while ($row_Base2 = mysql_fetch_assoc($Base2)); ?>
</table>
Te explico ma idea mía ( QUE NO FUNCIONO )
¿Luego qué muestro con <? Php echo $row_Base2['codigo'] (del Recorset Base2)
Guardo en una variable $variable el valor del código que tengo en ese momento, ya que durante la consulta este valor ira cambiando mientras se haga el lazo do.
Luego defino una variable de sesion con $_SESSION['MM_codigo'] = $variable
Esto lo hice para poder en el Recorset de la Base 1 que tiene los campos código y nombre poder filtrar por la variable de sesión MM_codigo.
Yo puse en el código un echo para que me muestre los valores que va tomando la variable de sesión y veo que va cambiando y coinciden con los valores que va tomando el código y por otro lado hago un test en el Recorset con distintos valores y los resultados son los correctos.
Pero en la consulta mostrada no cambia el valor que da como resultado de la consulta en la base 1

1 Respuesta

Respuesta
1
¿Arrancas la spágina con session_start de php?... saca con un echo la consulta por pantalla para que veas exactamente lo que se está mandando como consulta, seguro que eso te ayuda
Hola Experto, acá te mando las ultimas modificaciones que hice pero tampoco anda..
Te comento algunas cosas..
En la primera consulta que te hice.. yo tenia dos tablas creadas en bases de datos distintas..
Es decir en la base 1 tenia la tabla 1.. etc
Ahora eso lo modifique y puse en una sola Base de datos las 2 tablas.
Y tengo dos recorset configurados.. uno con los datos que necesito de la tabla y otro con los datos de la tabla 1 ( en este ultimo filtro por una variable de sesión que defino )
Pero tampoco funciona
Te envío el código que tengo armado
Los 2 Recorset se llaman Base2 y Recorset1
El Recorset1 toma los datos de la tabla 1 y los filtro por una variable de sesión que se define: $_SESSION['MM_Obra_Social']
***************************
<?php do { ?>
<tr>
<td bgcolor="#DDDDDD" class="style7 texto"><?php echo $row_Base2['codigo_obra_social']; ?> -
                <?php $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social'];?>
              -<span class="style14"><?php echo $row_Recordset1['Nombre_Obra_Social'];$_SESSION['MM_Obra_Social'] = NULL ?><span class="style15"></span></span></td>
<td nowrap="nowrap" bgcolor="#DDDDDD" class="style8"> <strong><?php echo $row_Base2['nombre_paciente']; ?></strong> </td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $row_Base2['total_codigo'];$subtotal=$subtotal + $row_Base2['total_codigo'];?> </div>
</td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $subtotal; ?></div>
</td>
</tr>
<tr>
<td height="3" colspan="4" bgcolor="#D2D2D2" class="style7 texto">
<div align="center"></div>
<div align="center"></div>
</td>
</tr>
<?php } while ($row_Base2 = mysql_fetch_assoc($Base2)); ?>
</table>
****************************
la idea de $_SESSION['MM_Obra_Social'] = NULL es limpiar la variable de sesion y que se cargue con otro valor en el proximo lazo del do
Pero no funciona !
Gracias por la ayuda
Hola Si, arranco con
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}?>
Ademas puse un echo para ver si me iba cambiando los valores de la variable de sesion
<?php $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social']; echo $_SESSION['MM_Obra_Social'];?>
Y veo que para cada lazo del do la variable de sesión va cambiando..
Lo que no puede hacer es que el Recorset1 tome de la tabla1 los valores en función de lo que le paso como filtro en la variable de sesión.
Lo que noto es que el valor que me pone como resultado del recorset siempre es el mismo para todos los resultados de la búsqueda que se hace en el lazo do y cuando hago un refresh ( F5) aveces los valores cambian .. pero siempre es el mismo para toda la consulta
Gracias y espero tu ayuda
Te comento las pruebas que estoy haciendo
Le estoy dando valores a la variable de sesión y el recorset1 me devuelve el valor correcto
<?php $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social'];$_SESSION['MM_Obra_Social'] = '000B1'; echo $_SESSION['MM_Obra_Social'];?>
                </strong>-<span class="style15"><?php echo $row_Recordset1['Nombre_Obra_Social'];?></span></td>
LO QUE NO ANDA ES ( CREO ) la siguente asignación en tiempo real $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social']
Como veras estoy "medio" perdido
Espero tu ayuda
Saludos y mil gracias
Este valor:
echo $_SESSION['MM_codigo']; ?>
A la hora de hacer el Do_while, ¿tiene algún valor?. Si es un valor de Bd lo que sacas, no debes utilizar SESSION!
En Realidad el codigo echo $_SESSION['MM_codigo'];?> Lo puse par ver que valores iba tomando la variable de sesión.. pero en el programa no hace nada, solo es un control..
Ahora limpie todo el código sin ningún echo y me queda así
****************************************************
<?php do { ;?>
<tr>
<td bgcolor="#DDDDDD" class="style7 texto"><?php echo $row_Base2['codigo_obra_social']; ?> -
                <strong>
                <?php $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social'];?>
                </strong>-<span class="style15"><?php echo $row_Recordset1['Nombre_Obra_Social'];?></span></td>
<td nowrap="nowrap" bgcolor="#DDDDDD" class="style8"> <strong> <?php echo $row_Base2['nombre_paciente'];?></strong> </td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $row_Base2['total_codigo'];$subtotal=$subtotal + $row_Base2['total_codigo'];?> </div>
</td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $subtotal; ?></div>
</td>
</tr>
<tr>
<td height="3" colspan="4" bgcolor="#D2D2D2" class="style7 texto">
<div align="center"></div>
<div align="center"></div>
</td>
</tr>
<?php } while ($row_Base2 = mysql_fetch_assoc($Base2)); ?>
</table>
*****************************************************************
Lo qué sigo notando es que al abrir la página de resultado el valor que me muesta <? php echo $row_Recordset1['Nombre_Obra_Social'];?> Va cambiando en cada refresco de la página y siempre es el mismo valor para toda la página de consulta
El recordset1 esta configurado de la siguiente manera:
Connection:Base2_Conn ( NOTA: en la Base2 tengo las 2 tablas - tabla y tabla1)
Tabla:tabla1
Columnas:All
Filter:codigo_obra_social
que es = a Sesiona Variable MM_Obra_Social
Sort:none
----------------
¿Es necesario que en la etiqueta donde doy de alta los Recordset también defina ahí la variable de sesión? En realidad si le doy de alta ahí tampoco cambia nada.
Muchas gracias
Hola acá sigo dándole vuelta a la cosa..
Te consulto esto..
¿Esta bien definir la variable de sesión de esta manera en el lazo do?
<?php $_SESSION['MM_Obra_Social'] = $row_Base2['codigo_obra_social']
Y Luego en el recorset Filtrar por la variable de sesión y ponerle MM_Obra_Social
Gracias espero tu ayuda
Saludos
Si, no hay problema, siempre que empieces la página iniciando la sesión en PHP
session_start();
Hola .. te mando todo el código de la página para ver si vos le encontrás el error..
Y ademas unas imágenes que muestran como esta configurado el recorset1 y lo que me muestra la página de resultado.
Gracias
Acá va el código:
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}?>
<?php require_once('Connections/Usuarios_Conn.php'); ?>
<?php require_once('Connections/Base2_Conn.php'); ?><?php mysql_query ("SET NAMES 'utf8'");?>
<?php
// ** Logout the current user. **
$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
  $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){
  //to fully log out a visitor we need to clear the session varialbles
  $_SESSION['MM_Username'] = NULL;
  $_SESSION['MM_UserGroup'] = NULL;
  $_SESSION['PrevUrl'] = NULL;
  unset($_SESSION['MM_Username']);
  unset($_SESSION['MM_UserGroup']);
  unset($_SESSION['PrevUrl']);
  $logoutGoTo = "profesional.php";
  if ($logoutGoTo) {
    header("Location: $logoutGoTo");
    exit;
  }
}
?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
$colname_Socio = "-1";
if (isset($_SESSION['MM_Username'])) {
  $colname_Socio = $_SESSION['MM_Username'];
}
mysql_select_db($database_Usuarios_Conn, $Usuarios_Conn);
$query_Socio = sprintf("SELECT * FROM tabla WHERE numero_socio = %s", GetSQLValueString($colname_Socio, "int"));
$Socio = mysql_query($query_Socio, $Usuarios_Conn) or die(mysql_error());
$row_Socio = mysql_fetch_assoc($Socio);
$totalRows_Socio = mysql_num_rows($Socio);
$colname_Base2 = "-1";
if (isset($_SESSION['MM_Username'])) {
  $colname_Base2 = $_SESSION['MM_Username'];
}
mysql_select_db($database_Base2_Conn, $Base2_Conn);
$query_Base2 = sprintf("SELECT * FROM tabla WHERE nro_socio = %s ORDER BY fecha_factura ASC", GetSQLValueString($colname_Base2, "int"));
$Base2 = mysql_query($query_Base2, $Base2_Conn) or die(mysql_error());
$row_Base2 = mysql_fetch_assoc($Base2);
$totalRows_Base2 = mysql_num_rows($Base2);
$colname_Recordset1 = "-1";
if (isset($_SESSION['MM_Obra_Social'])) {
  $colname_Recordset1 = $_SESSION['MM_Obra_Social'];
}
mysql_select_db($database_Base2_Conn, $Base2_Conn);
$query_Recordset1 = sprintf("SELECT codigo_obra_social, Nombre_Obra_Social FROM tabla1 WHERE codigo_obra_social = %s", GetSQLValueString($colname_Recordset1, "text"));
$Recordset1 = mysql_query($query_Recordset1, $Base2_Conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!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>Hospital Privado de San Juan</title>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<style type="text/css">
<!--
body {
    background-color: #D7D7D7;
}
.Nombre {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    color: #FF3300;
    border: 0px none #000000;
    background-position: right top;
}
.texto {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    color: #000000;
}
.style1 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    font-weight: bold;
}
.style5 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; color: #0000FF; }
.style6 {
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}
.style7 {font-size: 10px}
.style8 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; }
#cerrar {
}
.style11 {font-size: 14px}
.style12 {
    font-weight: bold;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
}
.style13 {
    color: #0000FF;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
}
.style19 {color: #336600}
-->
</style>
<script type="text/javascript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
//-->
</script>
</head>
<body>
<table width="780" border="0" align="center">
<tr>
<td>
<div align="center">
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','780','height','315','src','index_servcios al profesional','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','index_servcios al profesional' ); //end AC code
      </script>
<noscript>
      <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="780" height="315">
        <param name="movie" value="index_servcios al profesional.swf" />
        <param name="quality" value="high" />
        <embed src="index_servcios al profesional.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="780" height="315"></embed>
      </object>
      </noscript>
    </div>
</td>
</tr>
<tr>
<td valign="top" nowrap="nowrap" bgcolor="#e5e5e5"><a href="<?php echo $logoutAction ?>">
<div class="style1" id="cerrar">
<div align="right">Cerrar Sesion <br />
      </div>
</div>
</a>
<div align="right"></div>
<form id="form1" name="form1" method="post" action="">
<span class="style1">Cuenta: </span>  <span class="style5"><?php echo $row_Socio['numero_socio']; ?></span> <span class="style1">Nombre: <span class="style5"><?php echo $row_Socio['nombre_socio']; ?></span> </span> <span class="style1">Filtrar por mes:</span>
        <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,1)">
          <option>Seleccione Mes</option>
          <option value="produccion_enero.php">Enero</option>
          <option value="produccion_feb.php">Febrero</option>
          <option value="produccion_mar.php">Marzo</option>
          <option value="produccion_abril.php">Abril</option>
          <option value="produccion_mayo.php">Mayo</option>
          <option value="produccion_junio.php">Junio</option>
          <option value="produccion_julio.php">Julio</option>
          <option value="produccion_agos.php">Agosto</option>
          <option value="produccion_sep.php">Septiembre</option>
          <option value="produccion_octubre.php">Octubre</option>
          <option value="produccion_nov.php">Noviembre</option>
          <option value="produccion_dic.php">Diciembre</option>
        </select>
        <span class="style1"><br />
        </span>
      </form>
<table width="931" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="222" bgcolor="#CCCCCC" class="style1">
<div align="center"><strong><span class="style6">Codigo y Nombre de Obra Soci</span></strong>al</div>
</td>
<td width="151" nowrap="nowrap" bgcolor="#CCCCCC" class="style1">
<div align="center"><strong>Nombre Paciente</strong></div>
</td>
<td width="151" nowrap="nowrap" bgcolor="#CCCCCC" class="style1">
<div align="center">Fecha Factura</div>
</td>
<td width="151" bgcolor="#CCCCCC" class="texto">
<div align="center"><strong class="style1">Importe</strong></div>
</td>
<td width="256" bgcolor="#CCCCCC" class="texto">
<div align="center"><strong class="style1">Total Obra Social</strong></div>
</td>
</tr>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}?>
        <?php do { ?>
<tr>
<td bgcolor="#DDDDDD" class="style7 texto"><?php echo $row_Base2['codigo_obra_social']; $_SESSION['MM_Obra_Social']=$row_Base2['codigo_obra_social']?>-<?php echo $_SESSION['MM_Obra_Social'] ?> - <span class="style19"><?php echo $row_Recordset1['Nombre_Obra_Social']; ?></span></td>
<td nowrap="nowrap" bgcolor="#DDDDDD" class="style8"> <strong><?php echo $row_Base2['nombre_paciente']; ?></strong> </td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $row_Base2['fecha_factura']; ?></div>
</td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $row_Base2['total_codigo'];$subtotal=$subtotal + $row_Base2['total_codigo'];?></div>
</td>
<td bgcolor="#DDDDDD" class="style8">
<div align="center"><?php echo $subtotal; ?></div>
</td>
</tr>
<tr>
<td height="3" colspan="5" bgcolor="#D2D2D2" class="style7 texto">
<div align="center"></div>
<div align="center"></div>
</td>
</tr>
<?php } while ($row_Base2 = mysql_fetch_assoc($Base2)); ?>
</table>
<p class="style11"><span class="style12">Total Producción: $ </span><span class="style13"><?php echo $subtotal; ?></span> </p>
<p> </p>
</td>
</tr>
</table>
</body>
</html>
<?php
mysql_free_result($Socio);
mysql_free_result($Base2);
mysql_free_result($Recordset1);
?>
Podes ver la como queda la consulta en y el recordset 1 en
En la página de salida vas a ver que se repiten los códigos dos veces eso es por que puse un :<? php echo $_SESSION['MM_Obra_Social']?> ( En negrita en el código )
Espero encontrar el error
Gracias
Marcelo
¿Pero cuál es el error que te sale exactamente?
Hola te paso estos vínculos para que veas lo que me pasa
En este vinculo esta lo que tengo en Dreamweaver:

y en esta esta el resultado de la consulta:


Estas 2 salidas distintas se logran simplemente haciendo un refresco de la página
Es como que el valor de la variable de sesión no cambia durante todo el lazo do y
Solamente cambia en el caso de una actualización de la página.
El lazo do ( Comportamiento Repeat Región ) se hace sobre el recordset Base2.

Como podes ver lo que esta en verde ( en resultado.jpg)
Se repite siempre el mismo valor y no debería ser así.
Tomemos como ejemplo la primera linea
000XG es un valor que se muestra por el código:
<?php echo $row_Base2['codigo_obra_social'];
El segundo 000XG sale ya que puse el codigo:
$_SESSION['MM_Obra_Social']=$row_Base2['codigo_obra_social']?>-<?php echo $_SESSION['MM_Obra_Social'] ?>
Para verificar que la variable de sesión este correctamente definida
Luego lo que esta en verde corresponde a:
<?php echo $row_Recordset1['Nombre_Obra_Social'];
y le recordset1 esta configurado tal como se ve aca:

Por otro lado si hago un test al recordset1 y le doy valores el resultado es el correcto de acuerdo a lo cargado en la base de datos
Nota:
En las base de datos tengo una Base de datos llamada Base2 y dentro de esta tengo 2 tablas ( tabla y tabla1)
El recordset1 se hace con la tabla1 y
El Recordset llamado Base2 se hace con la tabla
Espero que me entiendas y desde ya te sigo agradeciendo por la disposición y las ganas de ayudarme
Gracias

Recién puse este código:
$_SESSION['MM_Obra_Social']=NULL; para limpiar el valor de la variable de sesion y noto que si lo pongo dentro del lazo do , en cualquier lugar, los valores que antes salian en verde ahora desaparecen es decir que SIEMPRE ME MUESTRA NULL
es decir que el codigo:
$_SESSION['MM_Obra_Social']=$row_Base2['codigo_obra_social']
Solo se ejecuta una sola vez !?
Gracias
Si estás usando 2 consultas, deberás poner una dentro de la otra.
Te repito que utilices "echo" para ver lo que valen las variables... Si te digo la verdad, es tan largo tu mail que me he perdido!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas