Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: demonstrator en 7 Abril 2015, 18:18 pm



Título: [Resuelto] mostrar mas de un registro de base de datos mysql en textarea
Publicado por: demonstrator en 7 Abril 2015, 18:18 pm
Saludos googleando y buscando por todos lados no he podido dar con el clavo respecto al problema que aparece cuando trato de mostrar los registros resultados de una consulta a una bd mysql, lo que sucede que trato de mostrar los registros en un textarea pero solo aparece 1 ya revise la consulta y en realidad si saca mas de un registro pero por alguna razon solo muestra 1 les pongo el codigo con la situacion aqui descrita:

primero tengo unos registros  en base de datos asi:

material   fecha                    usuario   cantidad         vence
pluma   23/03/2015 10:55   luis             0               23/03/2015 10:55
pluma   26/03/2015 09:35   angel           1               26/03/2015 09:35
pluma   26/03/2015 09:43   jaime           1               26/03/2015 09:43
pluma   27/03/2015 08:23   martin          1               27/03/2015 08:25
lapiz   28/03/2015 11:52   jaime              1               28/03/2015 11:52
lapiz   31/03/2015 15:37   angel            1               31/03/2015 25:37

con las siguientes inustrucciones en javascript me traigo los valores en un array de otro php llamado checkitemdetailsx.php en realidad solo me traigo 1 ya que estoy haciendo pruebas con ese campo en especifico y le asigno ese valor a una variable llamada mode:

Código
  1. $("#item").blur(function()
  2. {
  3. $.post('checkitemdetailsx.php', {material1: $(this).val() },
  4. function(data){
  5.  
  6. $('#mode').val(data.mode);
  7. }, 'json');
  8. });
  9. mode=document.getElementById('mode').value;

Este es el php del cual saco el campo con el codigo javascript, aqui realizo una consulta a mysql y paso los datos, bueno el array con la columna completa de valores del campo "usuario":

Código
  1. <?php
  2. include_once("init.php");
  3.  
  4. $sql="SELECT *  FROM salidas WHERE material='".$_POST['material1']."'  ";
  5. $result = mysql_query($sql);
  6. while($row = mysql_fetch_array($result))
  7. {
  8. $nombreusuario=$row['usuario'];
  9.  
  10. }
  11.  
  12. if($nombreusuario!=NULL)
  13. {
  14.  
  15. $arr = array ( "mode"=>$nombreusuario);
  16. echo json_encode($arr);
  17.  
  18. }
  19. else
  20. {
  21. $arr1 = array ("no"=>"no");
  22. echo json_encode($arr1);
  23.  
  24. }
  25. ?>
Y aqui esta la parte del html que consta de un input text que al escribirle el nombre de un articulo y desseleccionar dicho input ejecuta el proceso de consulta y asignacion de valores a la variable mode y con el id de mode asignado a un textarea paso ese valor a dicho textarea:
Código
  1. <td><input name=""  type="text" id="item"  maxlength="200"  class="round default-width-input " style="width: 150px"   /></td>
  2. <td><textarea name=""  id="mode" readonly="readonly"   class="round  my_with ac_input" style="width:100px;height:100px;"  /></textarea></td>

Hasta aqui todo funciona de maravilla el problema es que cuando yo hago la consulta manualmente en mysql el resultado son varios registros no 1 solo, y eso precisamente (1 solo registro) es lo que me esta mostrando el textarea en este punto ya he hecho muchas pruebas y no he dado con la solucion asi que les pido amablemente su ayuda no soy muy diestro con esto del javascrypt que es donde sospecho pudiera estar el problema en la parte de la asignacion de la variable mode, o en ultima instancia que el textarea no tenga la posibilidad de mostrar mas de un registro por que cuando ejecuto el php en el navegador reemplazando la variable de entrada del input text item por un valor fijo este se ejecuta y muestra todos los registros mediante un echo correctamente asi que en el php no podria ser el problema como sea quedo en atencion a sus comentarios


Título: Re: mostrar mas de un registro de base de datos mysql en textarea
Publicado por: T. Collins en 7 Abril 2015, 18:34 pm
Estás seguro de que ejecutando el php te devuelve todos los registros?
Según esto:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario=$row['usuario'];
  4.  
  5. }
Solo tendría que mostrar el último usuario que cumple el query.


Título: Re: mostrar mas de un registro de base de datos mysql en textarea
Publicado por: demonstrator en 7 Abril 2015, 19:34 pm
Estás seguro de que ejecutando el php te devuelve todos los registros?
Según esto:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario=$row['usuario'];
  4.  
  5. }
Solo tendría que mostrar el último usuario que cumple el query.

Saludos y gracias por tu atencion, ya habia verificado esta parte y si en efecto solo pasa el ultimo valor se me paso mencionar eso pero al hacer el listado de dichos valores en el while debo incluir dentro del while el guardado de los valores en el array y asi al ejecutar el php checkitemdetailsx.php en el navegador si muestra todos los registros pero en el text area ya no aparece nada. Cuando hago la prueba con el valor insertado desde el input text cambié la parte del while asi por ejemplo:

Código
  1. <?php
  2. include_once("init.php");
  3.  
  4. $sql="SELECT *  FROM salidas WHERE material='".$_POST['material1']."'  ";
  5. $result = mysql_query($sql);
  6. while($row = mysql_fetch_array($result))
  7. {
  8. $nombreusuario=$row['usuario'];
  9.  
  10.  
  11.  
  12. if($nombreusuario!=NULL)
  13. {
  14.  
  15. $arr = array ( "mode"=>$nombreusuario);
  16. echo json_encode($arr);
  17.  
  18. }
  19. else
  20. {
  21. $arr1 = array ("no"=>"no");
  22. echo json_encode($arr1);
  23.  
  24. }}//aqui le cambie el cerrado de llave al bucle while
  25. ?>

en pantalla esto muestra:
Código
  1. {"mode":"luis"}{"mode":"angel"}{"mode":"jaime"}{"mode":"martin"}
pero en el textarea no aparece nada cual podria ser la falla?


Título: Re: mostrar mas de un registro de base de datos mysql en textarea
Publicado por: T. Collins en 7 Abril 2015, 19:49 pm
Ese JSON no es válido porque tienes más de un objeto.

Puedes arreglarlo así:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario .= $row['usuario'];
  4. }

Para que mode sea un string con todos los usuarios.

O así para que sea un array:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario[] = $row['usuario'];
  4. }

Para este último tienes que cambiar el javascript:
Código
  1. $('#mode').val(data.mode[0]);

Ese sería el primer elemento del array, puedes poner un for para imprimirlos todos.


Título: Re: mostrar mas de un registro de base de datos mysql en textarea
Publicado por: demonstrator en 7 Abril 2015, 22:13 pm
Ese JSON no es válido porque tienes más de un objeto.

Puedes arreglarlo así:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario .= $row['usuario'];
  4. }

Para que mode sea un string con todos los usuarios.

O así para que sea un array:
Código
  1. while($row = mysql_fetch_array($result))
  2. {
  3. $nombreusuario[] = $row['usuario'];
  4. }

Para este último tienes que cambiar el javascript:
Código
  1. $('#mode').val(data.mode[0]);

Ese sería el primer elemento del array, puedes poner un for para imprimirlos todos.

Ok funciono perfecto nada mas en la parte de pasarlo como un array me dio un problema en la parte de:
Código
  1. $('#mode').val(data.mode[0]);
lo deje como:
Código
  1. $('#mode').val(data.mode);
y sin el for igual cargo los registros pero igual gracias con esto ya puedo continuar dandole