Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: reenurya en 21 Febrero 2017, 13:56 pm



Título: Envío de valores a variable PHP en Wordpress
Publicado por: reenurya en 21 Febrero 2017, 13:56 pm
Cordial saludo. Soy nuevo en esto de programación y estoy haciendo una página en wordpress que realiza una consulta en SQL Server y envía los datos a una tabla.

Al hacer clic en el botón de "Consultar", la página se redirecciona a un 404 porque no procesa ni envía el valor de variable. Igualmente en la consulta SQL devuelve un Warning porque le es desconocido el valor de la variable name

Este es el código que estoy utilizando.
Supongo que debo validar primero para que la primera vez que cargue la página haga la consulta, pero aunque coloque la validación al principio, me genera un warning:

Warning: mssql_query(): message: Incorrect syntax near the keyword ‘order’. (severity 15) in /var/www/html/intraser/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 89

Y al hacer clic en consultar sigue redireccionando a un 404. Efectivamente necesito que el resultado de la consulta la cargue en la misma página en una tabla HTML para poder exportar a un XLS luego.

Envío nuevamente el código en espera de alguna otra idea sobre qué es lo que pasa. Gracias nuevamente por colaborar.


Código
  1. <?php if(isset($_POST['name'])){ $name = $_POST['name']; } ?>
  2. <div>
  3.  
  4.    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']) ?>">
  5.       <div>
  6.            Seleccione periodo:
  7.            <select name="name">
  8.                <option value="0" selected>Haga clic aquí</option>
  9.                <option value="1" <?php if($_POST['name']=='1') echo 'selected="selected" ';?>> ENERO</option>
  10.                <option value="2"  <?php if($_POST['name']=='2') echo 'selected="selected" ';?>>FEBRERO</option>
  11.                <option value="3"  <?php if($_POST['name']=='3') echo 'selected="selected" ';?>>MARZO</option>
  12.                <option value="4"  <?php if($_POST['name']=='4') echo 'selected="selected" ';?>>ABRIL</option>
  13.                <option value="5"  <?php if($_POST['name']=='5') echo 'selected="selected" ';?>>MAYO</option>
  14.                <option value="6"  <?php if($_POST['name']=='6') echo 'selected="selected" ';?>>JUNIO</option>
  15.                <option value="7"  <?php if($_POST['name']=='7') echo 'selected="selected" ';?>>JULIO</option>
  16.                <option value="8"  <?php if($_POST['name']=='8') echo 'selected="selected" ';?>>AGOSTO</option>
  17.                <option value="9"  <?php if($_POST['name']=='9') echo 'selected="selected" ';?>>SEPTIEMBRE</option>
  18.                <option value="10"  <?php if($_POST['name']=='10') echo 'selected="selected" ';?>>OCTUBRE</option>
  19.                <option value="11"  <?php if($_POST['name']=='11') echo 'selected="selected" ';?>>NOVIEMBRE</option>
  20.                <option value="12"  <?php if($_POST['name']=='12') echo 'selected="selected" ';?>>DICIEMBRE</option>
  21.            </select>
  22.            <input type="submit" name="submit" value="Consultar">
  23.            <input type="button" onclick=" generateexcel('testTable') " value="Exportar a Excel">
  24.        </div>
  25.     </form>
  26. </div>
  27.  
  28.  
  29.  
  30. <?php
  31.  
  32.  
  33.  
  34. echo "<table class='peq' id='testTable'>";
  35.  
  36. echo "<tr>";
  37.  
  38. echo "<th class='peq'>Codigo</th>";
  39.  
  40. echo "<th class='peq'>Apellidos</th>";
  41.  
  42. echo "<th class='peq'>Nombres</th>";
  43.  
  44. echo "<th class='peq'>Fecha_nacimiento</th>";
  45.  
  46. echo "<th class='peq'>Direccion_domicilio</th>";
  47.  
  48. echo "<th class='peq'>Ciudad</th>";
  49.  
  50. echo "</tr>";
  51.  
  52. $name = $_POST['name'];
  53.  
  54.  
  55. ini_set('mssql.charset', 'UTF-8');
  56.  
  57.  
  58.  
  59. $msconnect=mssql_connect("ECOSOL","logfuncionario","F3s3r2017_");
  60.  
  61. $msdb=mssql_select_db("solido",$msconnect);
  62.  
  63. $msquery = "Select
  64.    asociados.codigo,
  65.    asociados.nombre,
  66.    asociados.apellido,
  67.    (CONVERT (char(10),asociados.fecha_nacimiento, 103)) as fecha_nacimiento,
  68.    asociados.direccion,
  69.    asociados.ciudad
  70.    from (
  71.            SELECT
  72.              CAST(CAST(sys_maenit.CODIGOTER AS float(53)) AS decimal(10, 0))as codigo,
  73.              sys_maenit.APELLIDO AS apellido,
  74.              sys_maenit.NOMBRE AS nombre,
  75.              sys_maenit.DIRECCION AS direccion,
  76.              sys_ciudad57.NOMBRE_CIUDAD AS ciudad,
  77.              sys_maenit.FECNACEM as fecha_nacimiento,
  78.              sys_maenit.empresa as empresa
  79.           FROM (solido.dbo.sys_maenit
  80.              CROSS JOIN solido.dbo.sys_ciudad57)
  81.           WHERE (
  82.              (sys_maenit.ESTADO = 'A') AND
  83.              (sys_maenit.CLASE = '5') AND
  84.              (sys_maenit.DPTO_CIUDAD = sys_ciudad57.CIUDAD))
  85.            ) as asociados
  86.    where asociados.empresa != '0099'
  87.    and month(asociados.fecha_nacimiento)=".$name." order by day(asociados.fecha_nacimiento);";
  88.  
  89. $msresults= mssql_query($msquery);
  90. while ($row = mssql_fetch_array($msresults)){
  91.  
  92. echo "<tr>";
  93. echo "<td class='peq'>$row[0]</td>";
  94. echo "<td class='peq'>$row[1]</td>";
  95. echo "<td class='peq'>$row[2]</td>";
  96. echo "<td class='peq'>$row[3]</td>";
  97. echo "<td class='peq'>$row[4]</td>";
  98. echo "<td class='peq'>$row[5]</td>";
  99.  
  100.  
  101.  
  102. echo "</tr>";
  103.  
  104. }
  105. echo "</table>";
  106. ?>




Hola y gracias por las respuestas.

Supongo que debo validar primero para que la primera vez que cargue la página haga la consulta, pero aunque coloque la validación al principio, me genera un warning:

Warning: mssql_query(): message: Incorrect syntax near the keyword ‘order’. (severity 15) in /var/www/html/intraser/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 89

Y al hacer clic en consultar sigue redireccionando a un 404. Efectivamente necesito que el resultado de la consulta la cargue en la misma página en una tabla HTML para poder exportar a un XLS luego.

Gracias nuevamente por colaborar.

Mod: No hacer doble post.


Título: Re: Envío de valores a variable PHP en Wordpress
Publicado por: #!drvy en 21 Febrero 2017, 18:45 pm
Hola,

En un principio, no has validado nada en la linea 1 de tu código dado que en las siguientes sigues utilizando el $_POST que no sabemos si esta vació o no. Una forma fácil de validarlo seria comprobar si existe, y si no existe darle valor 0.

Código
  1. <?php
  2.  
  3. // Comprobar si name esta enviado y si lo esta, ponerlo. Si no, 0 por defecto.
  4. $name = (isset($_POST['name']) ? $_POST['name'] : '0');
  5.  
  6. ?>

En el html (en los option) le das selected constante al valor 0 y eso debería ir como los demás (con un if). Además, si quieres que el formulario se ejecute en la misma pagina, te basta con dejar el action= vació.

Código
  1. <div>
  2.    <form method="post" action="">
  3.       <div>
  4.            Seleccione periodo:
  5.            <select name="name">
  6.                <option value="0" <?php if($name=='0') echo 'selected'; ?> >Haga clic aquí</option>
  7.                <option value="1" <?php if($name=='1') echo 'selected'; ?> >ENERO</option>
  8.                <option value="2" <?php if($name=='2') echo 'selected'; ?> >FEBRERO</option>
  9.                <option value="3" <?php if($name=='3') echo 'selected'; ?> >MARZO</option>
  10.                <option value="4" <?php if($name=='4') echo 'selected'; ?> >ABRIL</option>
  11.                <option value="5" <?php if($name=='5') echo 'selected'; ?> >MAYO</option>
  12.                <option value="6" <?php if($name=='6') echo 'selected'; ?> >JUNIO</option>
  13.                <option value="7" <?php if($name=='7') echo 'selected'; ?> >JULIO</option>
  14.                <option value="8" <?php if($name=='8') echo 'selected'; ?> >AGOSTO</option>
  15.                <option value="9" <?php if($name=='9') echo 'selected'; ?> >SEPTIEMBRE</option>
  16.                <option value="10" <?php if($name=='10') echo 'selected'; ?> >OCTUBRE</option>
  17.                <option value="11" <?php if($name=='11') echo 'selected'; ?> >NOVIEMBRE</option>
  18.                <option value="12" <?php if($name=='12') echo 'selected'; ?> >DICIEMBRE</option>
  19.            </select>
  20.            <input type="submit" name="submit" value="Consultar">
  21.            <input type="button" onclick=" generateexcel('testTable') " value="Exportar a Excel">
  22.        </div>
  23.     </form>
  24. </div>

Lo mismo para el resto del codigo. Deberias realmente validar que $name NO esta vacio antes de ejecutar la query.

Código
  1. <?php
  2.  
  3. echo "<table class='peq' id='testTable'>",
  4.  "<tr>",
  5.  "<th class='peq'>Codigo</th>",
  6.  "<th class='peq'>Apellidos</th>",
  7.  "<th class='peq'>Nombres</th>",
  8.  "<th class='peq'>Fecha_nacimiento</th>",
  9.  "<th class='peq'>Direccion_domicilio</th>",
  10.  "<th class='peq'>Ciudad</th>",
  11.  "</tr>";
  12.  
  13. // Comprobar si el nombre ha sido enviado // Vacio o 0.
  14. if(!empty($name)) {
  15.  
  16.  // con (int) nos aseguramos de coger solo integros.
  17.  $name = (int) $name;
  18.  
  19.  ini_set('mssql.charset', 'UTF-8');
  20.  $msconnect=mssql_connect("ECOSOL","logfuncionario","F3s3r2017_");
  21.  $msdb=mssql_select_db("solido",$msconnect);
  22.  
  23.  $msquery = "Select
  24.    asociados.codigo,
  25.    asociados.nombre,
  26.    asociados.apellido,
  27.    (CONVERT (char(10),asociados.fecha_nacimiento, 103)) as fecha_nacimiento,
  28.    asociados.direccion,
  29.    asociados.ciudad
  30.    from (
  31.            SELECT
  32.              CAST(CAST(sys_maenit.CODIGOTER AS float(53)) AS decimal(10, 0))as codigo,
  33.              sys_maenit.APELLIDO AS apellido,
  34.              sys_maenit.NOMBRE AS nombre,
  35.              sys_maenit.DIRECCION AS direccion,
  36.              sys_ciudad57.NOMBRE_CIUDAD AS ciudad,
  37.              sys_maenit.FECNACEM as fecha_nacimiento,
  38.              sys_maenit.empresa as empresa
  39.           FROM (solido.dbo.sys_maenit
  40.              CROSS JOIN solido.dbo.sys_ciudad57)
  41.           WHERE (
  42.              (sys_maenit.ESTADO = 'A') AND
  43.              (sys_maenit.CLASE = '5') AND
  44.              (sys_maenit.DPTO_CIUDAD = sys_ciudad57.CIUDAD))
  45.            ) as asociados
  46.    where asociados.empresa != '0099'
  47.    and month(asociados.fecha_nacimiento)=".$name." order by day(asociados.fecha_nacimiento);";
  48.  
  49.  $msresults= mssql_query($msquery);
  50.  while ($row = mssql_fetch_array($msresults)){
  51.  
  52.    echo "<tr>",
  53.      "<td class='peq'>$row[0]</td>",
  54.      "<td class='peq'>$row[1]</td>",
  55.      "<td class='peq'>$row[2]</td>",
  56.      "<td class='peq'>$row[3]</td>",
  57.      "<td class='peq'>$row[4]</td>",
  58.      "<td class='peq'>$row[5]</td>",
  59.      "</tr>";
  60.  }
  61.  
  62. } else {
  63.  echo '<tr><td>No has selecionado ningun mes!</td></tr>';
  64. }
  65.  
  66. echo "</table>";
  67. ?>



El error que te tira el mssql es porque tienes un error de sintaxis cerca del order by. Yo la verdad no tengo ni idea de mssql así que a ver si viene algún compañero y te ayuda.

Citar
Hola y gracias por las respuestas.

No esperes muchas respuestas en apenas 2 horas. Esto es un foro, no un chat y la gente no se conecta 24/7. También mencionarte que existe el botón modificar, que el doble post esta prohibido a no ser que el tema haya pasado a segunda pagina y que los temas sobre PHP van al subforo de PHP.

Estas normas que acabo de comentar las tienes explicadas en el post con chincheta en este mismo subforo.

(https://foro.elhacker.net/Themes/converted/images/topic/normal_post_locked_sticky.gif) [Obligatorio] Normas del subforo de Desarrollo Web.
https://foro.elhacker.net/desarrollo_web/obligatorio_normas_del_subforo_de_desarrollo_web_13102015-t407889.0.html

Saludos