[Resuelto] Problemas con Paso de Variables

Iniciado por Slikp, 3 Diciembre 2014, 17:15 PM

0 Miembros y 1 Visitante están viendo este tema.

Slikp

- Buenas la verdad vengo un tanto apenado dado que recientemente me ayudaron con un problema mas o menos parecido, pero la verdad es que he intentado de todo por mi cuenta y nada de nada por otro lado es mucho codigo si me pongo a detallar por completo las cosas asi que intentare ser lo mas preciso sin embargo si es necesario mostrar mas codigo lo puedo hacer.

- Veran tengo una funcion que me hace por asi decirlo un 95% de lo que busco, pero esa funcion la necesito implementar en otro modulo eliminando un par de variables y agregando otra a parte de eso esa segunda funcion o modulo que trato de implementar requiere conectarse a otro motor de bd especificamente a Mysql el 1er modulo del cual me estoy guiando se conecta a Microsoft Sql Server.

- Veran yo tengo lo siguiente.

- En la fila de izquierda se observa unos codigos(OG0001, OG0002) y unos nombres estan contenidos en un select si yo doy  click en cualquiera de ellos al lado derecho se genera otra fila mediante una peticion Ajax y en la parte superior se visualiza un tanto mas detallado valores del usuario al que le di click ahora bien como ven en esa segunda fila hay otro Select pero vacio, en ese select yo quiero cargar Unos nombres de documentos que tengo de ese Usuario, he de mencionar que el primer proceso que muestra la informacion del usuario en las dos filas las saco de Sql Server y los que quiero mostrar en el segundo Select osea el que esta en blanco es una Data que tengo en Mysql.

- El problema radica en que no logro cargar el select con la info del usuario al que selecciono he intento hacerlo de la siguiente manera. Tengo este formulario.

Código (php) [Seleccionar]

<!DOCTYPE html>
<html lang="es">
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="css/style.css">
<script src="script/jquery-2.1.1.min.js"></script>
<script src="script/ajax.js"></script>
</head>
<body>
<section id="criterio">
<div id="crit-form">
<h3>
Criterio de Busquedas
 <p>          
Proyecto:
<?php
                    
foreach($datos as $fila):
                  
                    
echo $fila['desc_empresa'];
                  
                    endforeach; 
                  
?>

 </p>
</h3>
<fieldset>
<form class="crit-form" method="post" name="search_form" id="search_form">
<small> El Total de Filas en Base de Datos: <?php echo $total ?> </small>

<div id="resultados"></div>

<small>Por Ficha</small>
<input type="text" name=".ficha" class="parse" placeholder="introduzca igo Ficha Ej: Ch001">
<small>Por Cedula</small>
<input type="text" name="ci" class="parse" placeholder="Cedula Use Puntos Ej: 49.781.190">
<small>Por Nombre</small>
<input type="text" id="search" name="nombre" class="parse" placeholder="introduzca un Nombre Ej: Antonio">
<small>Por Estatus</small>
<select class="parse" class="slp">
<option value="A" selected>Activo</option>
<option value="I">Inactivo</option>
<option value="PL">Por Liquidar</option>
<option value="L">Liquidado</option>
</select>
</form><br>
<a href="#" id="btn-sub">Configuración</a>
</fieldset>
</div>
</section>
<section id="detalles">
<div class="wrap-image">
<form method="post" name="doc" class="docarc">
<div id="result"></div>
</form>
</div>
</section>
<section id="cnf-g">
<div id="config">
</div>
</section>
<section id="visualice">
<div class="wrap-visual">
<div id="visual"></div>
</div>
</section>

</body>
</html>


- Dentro del Form veran este <div id="resultados"></div> alli se carga la primera columna que les mostre y aqui.

Código (php) [Seleccionar]

<section id="detalles">
<div class="wrap-image">
<form method="post" name="doc" class="docarc">
<div id="result"></div>
</form>
</div>
</section>


- Se carga la segunda fila que tiene el Select en blanco fila que se genera al seleccion un usuario a partir del primer select. Esa segunda fila esta construida de la siguiente manera.

Código (php) [Seleccionar]

<?php 
session_start
();

$codigo addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = $codigo;

require_once "../php/Clases/conexion/conexion.class.php";
require_once "../php/Clases/crud/crud.php";
require_once "../php/Clases/crud/crud2.php";

$modelo = new Ibee();
$modelo->Leer();
$filaa $modelo->row;

$model = new Crud();
$model->Search_select();
$filas $model->rows;

foreach ($filas as $fila) { 
echo "<h4>" $fila['ci'] . $fila['nombres'] ." "$fila['apellidos'];
echo "<br>Estatus: "$fila['status'];
echo "  Cargo: "$fila['des_cargo'] ."</h4>";
echo '
<div class="image" id="style-5">
    <div class="force-overflow">'
;
    echo "<img src='img/imgpdf.png' width='45px'/>";
?>

<select size="10" name="nomarch" id="sel">
<?php 
foreach ($filaa as $fila
{
?>

<option id='vis' value="<?php echo $fila['nombre_archivo']; ?>">
<?php 

echo $fila['nombre_archivo'];
?>

</option>
<?php

?>

   </select>

<?php
echo '</div>
</div>
<div id="foimg">
  <center>
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<strong><small> Total Imagenes: <span> 567 </span></small></strong><br>

<a id="btn-upp" href="upf.php?cod='
.$codigo.'">Subir Archivo</a>
<a id="cancel-upp" href="#">Cancelar Busqueda</a>
  </center>
</div>
'

}

?>



- Disculpen si parte del codigo esta echo un arroz con mango pero es que tratado muchas cosas. En conexion.class.php esta lo siguiente

Código (php) [Seleccionar]

<?php
class Conexion
{
    public 
$ndatabase ="";
   
    public function 
conectar($cod_empresa)
       {
            
$this->ndatabase $cod_empresa;
            
$server 'sbvbieloven';
            
$database $this->ndatabase;
            
$username 'profit';
            
$password 'profit';
            return 
$conexion = new PDO('sqlsrv:Server=' $server ';Database='$database$username$password);
    
}  
}

class 
Msqli
{
    public function 
conec()
    {
        
$server 'localhost';
        
$database 'sismic';
        
$username 'root';
        
$password '';
       return 
$conn = new PDO('mysql:host=' $server ';dbname='$database$username$password);        
    }

?>



- Donde la 1era class Conexion es la conexion con Sql Server y la 2da class Msqli es la conexion a Mysql, que existe en crud.php pues lo siguiente Ojo este pertenece al primer Foreach.

Código (php) [Seleccionar]

<?php 
class 
Crud
{
public $rows;

public function Search_select()
{

$model = new Conexion();
$conexion $model->conectar($_SESSION['cod_empresa']);
$codigo $_REQUEST['cod'];
$sql "SELECT *
FROM snemple A 
INNER JOIN sncargo B 
ON A.co_cargo = B.co_cargo 
WHERE A.cod_emp LIKE '%"
.$codigo."%'";

$consulta $conexion->prepare($sql);
$consulta->execute();

while ($filas $consulta->fetch())
{
$this->rows[] = $filas;
}
}
}
?>





- Y este pertenece al segundo Foreach, Aclaro que $_SESSION['cod_empresa'] ya esta definida muuucho antes en otra sección del sistema, y como veran esta clase es muy parecida a la de arriba, pero no entiendo porque no me funciona y me muestra el select en blanco.
Código (php) [Seleccionar]

<?php 
class 
Ibee 
{
public $row;
public function Leer()
{
$model = new Msqli();
$conexion $model->conec();
$codigo $_REQUEST['cod'];
$sql "SELECT * FROM expedientes WHERE cod_emp LIKE '%".$codigo."%'";

$consulta $conexion->prepare($sql);
$consulta->execute();

while ($filaa $consulta->fetch())
{
$this->row[] = $filaa;
}
}
}

?>

.



- Ahora Bien Cosas que intente, yo pense que esto no se estaba ejecutando.

Código (javascript) [Seleccionar]

$sql = "SELECT * FROM expedientes WHERE cod_emp LIKE '%".$codigo."%'";


- Especificamente que $codigo esta Null y por eso el select se mostraba en blanco otra cosa el.
Código (php) [Seleccionar]

$codigo = $_REQUEST['cod'];


- Que se encuentra en las dos clases (class Crud y class Ibee) se obtiene del primer Select que se cargo en la primera fila y yo dije bueno a lo mejor la clase Ibee no esta tomando bien el $codigo = $_REQUEST['cod']; y es por eso que hice esto $_SESSION['exp'] = $codigo; y luego hice esto.

Código (php) [Seleccionar]

<?php 
class 
Ibee 
{
public $row;
public function Leer()
{
$model = new Msqli();
$conexion $model->conec();
$codigo $_REQUEST['cod'];
$sql "SELECT * FROM expedientes WHERE cod_emp LIKE '%".$_SESSION['exp']."%'";
 
$consulta $conexion->prepare($sql);
$consulta->execute();
 
while ($filaa $consulta->fetch())
{
$this->row[] = $filaa;
}
}
}
 
?>





- Notar que substitui el $codigo del SELECT por el $_SESSION y esto me dio el mismo resultado el Select se muestra en Blanco, entonces por cosas que me vinieron me dije sera que no se esta cargando bien la data en el Select y decidi eliminar el select del segundo Foreach osea hice esto.


Código (php) [Seleccionar]

<?php 
session_start
();

$codigo addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = $codigo;

require_once "../php/Clases/conexion/conexion.class.php";
require_once "../php/Clases/crud/crud.php";
require_once "../php/Clases/crud/crud2.php";

$modelo = new Ibee();
$modelo->Leer();
$filaa $modelo->row;

$model = new Crud();
$model->Search_select();
$filas $model->rows;

foreach ($filas as $fila) { 
echo "<h4>" $fila['ci'] . $fila['nombres'] ." "$fila['apellidos'];
echo "<br>Estatus: "$fila['status'];
echo "  Cargo: "$fila['des_cargo'] ."</h4>";
echo '
<div class="image" id="style-5">
    <div class="force-overflow">'
;
    echo "<img src='img/imgpdf.png' width='45px'/>";
?>

    <!-- COMENTE ESTA LINEA -->
<!--<select size="10" name="nomarch" id="sel">-->
<?php 
foreach ($filaa as $fila
{
?>

<option id='vis' value="<?php echo $fila['nombre_archivo']; ?>">
<?php 

echo $fila['nombre_archivo'];
?>

</option>
<?php

?>

<!-- COMENTE ESTA LINEA -->
   <!--</select> -->

<?php
echo '</div>
</div>
<div id="foimg">
  <center>
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<small class="cheking">Imagen</small>
<input class="check" type="checkbox">
<strong><small> Total Imagenes: <span> 567 </span></small></strong><br>

<a id="btn-upp" href="upf.php?cod='
.$codigo.'">Subir Archivo</a>
<a id="cancel-upp" href="#">Cancelar Busqueda</a>
  </center>
</div>
'

}

?>




- Y para mi sorpresa.




- Investigando encontre que ese error es resultante de dos posibles causas Uno que la variable que esta recibiendo el Foreach esta Nula o Dos que no sea un arreglo, y bueno en mi ignorancia imposible que no sea un arreglo entonces intente lo siguiente.

Código (php) [Seleccionar]

     <!-- COMENTE ESTA LINEA -->
<!--<select size="10" name="nomarch" id="sel">-->
<?php 
foreach ((array)$filaa as $fila
{
?>

  <option id='vis' value="<?php echo $fila['nombre_archivo']; ?>">
<?php 

echo $fila['nombre_archivo'];
?>

</option>
<?php

?>

<!-- COMENTE ESTA LINEA -->
<!--</select> -->


- Resulta pues Nada se muestra en Blanco, vi tambien que para estos casos a veces se puedo solucionar aplicando un For en lugar de Foreach intente eso y nada tampoco.

- Hice esto pasarle directamente a la consulta un valor para descartar posibles fallos de la sentencia Sql que estaba usando.

Código (php) [Seleccionar]

<?php 
class 
Ibee 
{
public $row;
public function Leer()
{
$model = new Msqli();
$conexion $model->conec();
$codigo $_REQUEST['cod'];
$sql "SELECT * FROM expedientes WHERE cod_emp LIKE '%OG0001%'";

$consulta $conexion->prepare($sql);
$consulta->execute();

while ($filaa $consulta->fetch())
{
$this->row[] = $filaa;
}
}
}

?>



- Y como resultado.


- Eso quiere decir que la instruccion y la BD y la conexion y la clase todo eso esta bueno entonces sera la variable que no se pasa? porque yo use $_SESSION y no funciono y la imprimi con echo y me retorna el codigo del usuario que selecciono y entonces hice esto para seguir probando.

Código (php) [Seleccionar]

<?php 
class 
Ibee 
{
public $row;
public function Leer()
{
$model = new Msqli();
$conexion $model->conec();
$codigo $_REQUEST['cod'];
$sql "SELECT * FROM expedientes WHERE cod_emp LIKE '%'".$_SESSION['exp']."'%'";

$consulta $conexion->prepare($sql);
$consulta->execute();

while ($filaa $consulta->fetch())
{
$this->row[] = $filaa;
}
}
}

?>



- Aqui Modifique Esto.

Código (php) [Seleccionar]

<?php 
session_start
();
 
$codigo addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = $codigo;
 
require_once "../php/Clases/conexion/conexion.class.php";
require_once "../php/Clases/crud/crud.php";
require_once "../php/Clases/crud/crud2.php";
 
$modelo = new Ibee();
$modelo->Leer();
$filaa $modelo->row;
 
$model = new Crud();
$model->Search_select();
$filas $model->rows;
 



- Por Esto

Código (php) [Seleccionar]

<?php 
session_start
();
 
$codigo addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = 'OG0002';
 
require_once "../php/Clases/conexion/conexion.class.php";
require_once "../php/Clases/crud/crud.php";
require_once "../php/Clases/crud/crud2.php";
 
$modelo = new Ibee();
$modelo->Leer();
$filaa $modelo->row;
 
$model = new Crud();
$model->Search_select();
$filas $model->rows;
 


- Y que paso? pues me mostro la fila dos los archivos del Usuario dos, entonces porque si yo hago esto, no sirve.

Código (php) [Seleccionar]

$codigo = addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = $codigo;


- Pero si hago esto si sirve.

Código (php) [Seleccionar]

$codigo = addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = 'OG0003';


- Si yo mando a Imprimir $codigo el me retornar Codigos del usuario que selecciono si yo clickeo en el user OG0009 cuando Ajax me muestra la fila 2 se imprime el OG0009 si clikeo al OG0052 se imprime... Entonces no se que estoy haciendo mal.

- De antemano Saludos al Valiente que se atreva a leer todo esto y de ya muchasimas gracias.

- Saludos

#!drvy

Cuando haces esto:

Código (php) [Seleccionar]
$codigo = addslashes(htmlspecialchars($_POST["cod"]));
$_SESSION['exp'] = $codigo;


Estas seguro que tienes $_POST['cod'] ? Lo digo porque en ninguna parte veo que mandes un POST con el campo "cod". Haces un GET pero en todo caso tendrias que recogerlo con $_GET o con $_REQUEST (que personalmente no te recomiendo utilizar).

Haz una comprobacion.

Código (php) [Seleccionar]
if(empty($_POST['cod'])){ die('no se ha mandando el cod'); }
$codigo = addslashes(htmlspecialchars($_POST["cod"]));
if(empty($codigo)){ die('$codigo esta vacia.'); }
$_SESSION['exp'] = $codigo;


Saludos

Slikp

#2
- Muy buenas #!drvy, si tengo el $_POST['cod'], ese $_POST['cod']  lo recibo del primer formulario especificamente del primer select, este el codigo del primer select, Recuerda que esto lo cargo via Ajax como ya habia comentado.

Código (php) [Seleccionar]

if ($total>0 && $search!='')
 {
?>
<select size="10" name="cod" id="display-lps">
<?php 
foreach ($filas as $fila
{
?>
<option id="resultados" value="<?php echo $fila['cod_emp']; ?>">
<?php echo $fila['cod_emp'] . $fila['nombres'] ." "$fila['apellidos'];
?>
</option>
<?php

?>

</select>

<?php 
  
}


- Como veras lo recibo del Name de ese select por otro lado si funciona bien o por lo menos funciona bien en la Clase que tengo destinada para SQL Server por que esa misma variable $_POST la uso aqui.

Código (php) [Seleccionar]

<?php 
class 
Crud
{
public $rows;
 
public function Search_select()
{
 
$model = new Conexion();
$conexion $model->conectar($_SESSION['cod_empresa']);
$codigo $_REQUEST['cod'];
$sql "SELECT *
FROM snemple A 
INNER JOIN sncargo B 
ON A.co_cargo = B.co_cargo 
WHERE A.cod_emp LIKE '%"
.$codigo."%'";
 
$consulta $conexion->prepare($sql);
$consulta->execute();
 
while ($filas $consulta->fetch())
{
$this->rows[] = $filas;
}
}
}
?>



- Y Eso me muestra informacion en la Fila derecha en la Parte Roja


- Osea el 18.455.724 CARLOS JOSE FLORES GUERRA ESTATUS: A CARGO: OBRERO SISMOGRAFICO. (G) es Info que se genera a partir del $_POST['cod'].

- Creo que no es necesario hacer la comprobacion que sugieres porque algo me dice que dara el mismo resultado en la fila Dos osea no traera nada, de igual forma por comprobar eso no me voy a morir asi que lo hare y te estare comentando.

- Muchas gracias.

- OK EDITO:

- realize la comprobacion como Sugeristes.

Código (php) [Seleccionar]
if(empty($_POST['cod'])){ die('no se ha mandando el cod'); }
$codigo = addslashes(htmlspecialchars($_POST["cod"]));
if(empty($codigo)){ die('$codigo esta vacia.'); }


- Resultado: No se mostro nada en pantalla, Inverti la comprobacion  de la siguiente manera.

Código (php) [Seleccionar]

if(isset($_POST['cod'])){ die('no se ha mandando el cod'); }
$codigo = addslashes(htmlspecialchars($_POST["cod"]));
if(!empty($codigo)){ die('$codigo esta vacia.'); }


- Resultado Ambos Mensajes se imprimieron en pantalla eso quiere decir que Uno si esta llegando el $_POST y Dos que no esta Vacio :/, Ya no se que hacer.

MinusFour

¿Puedes decirnos que tiene $codigo?

Código (php) [Seleccionar]

var_dump($codigo);

Slikp

#4
- Buenas MinusFours, Pues seleccione el tercer usuario y me retorno "string(17) "OG0003 " ".

- De verdad ya este problema me tiene desconcertado de verdad no entiendo el porque del problema...

MinusFour

Cita de: Slikp en  3 Diciembre 2014, 19:29 PM
- Buenas MinusFours, Pues seleccione el tercer usuario y me retorno "string(17) "OG0003 " ".

- De verdad ya este problema me tiene desconcertado de verdad no entiendo el porque del problema...

Veo un espacio extra ahi, ¿puede ser eso?

Código (sql) [Seleccionar]

SELECT * FROM expedientes WHERE cod_emp LIKE '%OG0003 %


¿Esa consulta funciona? Pruebala desde tu cliente SQL (creo que estas usando MS SQL en este caso).

Slikp

#6
- MinusFour ud tiene una vista de Aguila.

Código (php) [Seleccionar]

SELECT * FROM expedientes WHERE cod_emp LIKE '%OG0003 %


- Eso imprime lo siguiente. Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\sismica\script\process.php on line 31.

- Mientras que esto si trae resultados.

Código (php) [Seleccionar]

SELECT * FROM expedientes WHERE cod_emp LIKE '%OG0003%


- No estoy seguro pero creo saber donde esta el problema, por otro lado directamente en la BD no pareciera tener un espacio el Codigo al final, ire hacer unas pruebas y te comento.

- EDITO

- Igual eso no explica porque aqui me sirve.

Código (php) [Seleccionar]

<?php 
class 
Crud
{
public $rows;
 
public function Search_select()
{
 
$model = new Conexion();
$conexion $model->conectar($_SESSION['cod_empresa']);
$codigo $_REQUEST['cod'];
$sql "SELECT *
FROM snemple A 
INNER JOIN sncargo B 
ON A.co_cargo = B.co_cargo 
WHERE A.cod_emp LIKE '%"
.$codigo."%'";
 
$consulta $conexion->prepare($sql);
$consulta->execute();
 
while ($filas $consulta->fetch())
{
$this->rows[] = $filas;
}
}
}
?>



- Y aqui no.

Código (php) [Seleccionar]

<?php 
class 
Ibee 
{
public $row;
public function Leer()
{
$model = new Msqli();
$conexion $model->conec();
$codigo $_REQUEST['cod'];
$sql "SELECT * FROM expedientes WHERE cod_emp LIKE '%".$codigo."%'";
 
$consulta $conexion->prepare($sql);
$consulta->execute();
 
while ($filaa $consulta->fetch())
{
$this->row[] = $filaa;
}
}
}
 
?>


MinusFour

Son diferentes DBMS asi que bien podria ser que para MSSQL si funciona y para MySQL no (o talvez la informacion es diferente).

Slikp

- Muchisimas gracias MinusFour, Si no fuera por tu ojo de Aguila aun siguiera con este dilema, la verdad intente unas cuantas cosas en donde pense que era la raiz del problema y no di con la solucion asi que me fui por otra via he hice lo siguiente.

Código (php) [Seleccionar]
$_SESSION['exp'] = trim($codigo);

- Y santo remedio, de verdad muchas gracias...