Foros del Web » Programando para Internet » PHP »

Saber si la variable viene de POST o de GET

Estas en el tema de Saber si la variable viene de POST o de GET en el foro de PHP en Foros del Web. Hola, tengo una página que puede recibir una variable tanto por GET como po POST y según de donde provenga la variable ha de hacer ...
  #1 (permalink)  
Antiguo 04/09/2006, 09:38
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 11 años, 5 meses
Puntos: 5
Saber si la variable viene de POST o de GET

Hola,
tengo una página que puede recibir una variable tanto por GET como po POST y según de donde provenga la variable ha de hacer una consulta u otra a la base de datos, ejemplo:

Código PHP:
//aki pillo la variable segun de donde venga
$palabra=isset($_POST['palabra'])? trim ($_POST['palabra']): $_GET['palabra']; 
Ahora bien, si viende desde el POST quiero que la consulta sea esta:

Código PHP:
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 
pero si viene del GET quiero que sea esta:

Código PHP:
$res=mysql_query("SELECT * FROM wiki WHERE titulo == "$palabra"); 
¿como puedo hacer para distinguir de donde viene la variable? espero haberme exolicado bien...
  #2 (permalink)  
Antiguo 04/09/2006, 09:57
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 11 años, 10 meses
Puntos: 3
Pues asi como lo estas haciendo...
Código PHP:
if(isset($_POST['bla'])){
  ...
}

if(isset(
$_GET['bla'])){
 ...

__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #3 (permalink)  
Antiguo 04/09/2006, 09:58
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Puedes comprobar con empty

Código PHP:
if(!empty($_GET['palabra']))
{
  
$consulta "SELECT * FROM wiki WHERE titulo = '" mysql_real_escape_string($palabra) . "'";
}
elseif(!empty(
$_POST['palabra']))
{
  
$consulta ="SELECT * FROM wiki WHERE titulo LIKE '%"mysql_real_escape_string($_GET['palabra']) ."%'";
}
else
{
  die(
"Palabra vacía.");
}

mysql_query($consulta); 
Y si quieres complicarte un poco y comprobar más otro ejemplo

Código PHP:
if(!empty($_GET['palabra']))
{
  
$palabra $_GET['palabra'];
  
$where_palabra "palabra = '\$palabra'";
}
elseif(!empty(
$_POST['palabra']))
{
  
$palabra $_POST['palabra'];
  
$where_palabra "palabra LIKE '%\$palabra%'";
}
else
{
  die(
"Palabra vacía");
}

$palabra strval($palabra);

if(
strlen($palabra) < 3)
{
  die(
"Palabra demasiado corta");
}

eval(
"\$where_palabra = \"" $where_palabra "\";");

mysql_query("SELECT * FROM wiki WHERE " $where_palabra); 
  #4 (permalink)  
Antiguo 04/09/2006, 10:00
Avatar de weti  
Fecha de Ingreso: abril-2006
Mensajes: 18
Antigüedad: 11 años, 7 meses
Puntos: 0
se q es un poco chapuza pero puedes mirar la direccion de donde proviene con $_SERVER['HTTP_REFERER'] o REQUEST_URI no recuerdo mal, luego haces un explode con el caracter '?' y si el array resultante tiene algo despues de ? sabras q lo paso por GET.

suerte
  #5 (permalink)  
Antiguo 04/09/2006, 10:10
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 14 años
Puntos: 4
Otra forma de hacerlo es con $_REQUEST que sirve para saber que metodo se utilizo, de esta manera:

<?php
if ($HTTP_SERVER_VARS[REQUEST_METHOD] == "POST")
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'");
else
$res=mysql_query("SELECT * FROM wiki WHERE titulo == "$palabra")
?>

Espero te sirva de algo.
  #6 (permalink)  
Antiguo 04/09/2006, 10:51
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 11 años, 5 meses
Puntos: 5
funciona pero no del todo

Holas, he optado por usar el metodo

Código PHP:
<?php
if ($HTTP_SERVER_VARS[REQUEST_METHOD] == "POST")
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 
else
$res=mysql_query("SELECT * FROM wiki WHERE titulo == "$palabra")
?>
de esta forma el código me queda asi:

Código PHP:
<?php 
    
if ($accion_realizar=="ver"//muestra resultados de la consulta
    
{
    
    
$palabra=isset($_POST['palabra'])? trim ($_POST['palabra']): $_GET['palabra'];
    
    if (
$HTTP_SERVER_VARS[REQUEST_METHOD] == "POST"//compruebo de dd llega la variable
    
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 
    else
    {
    echo 
"AKI LLEGA"//para comprobar que entra en el else
    
echo "$palabra"//para ver si la variable es correcta
    
$res=mysql_query("SELECT * FROM wiki WHERE titulo=$palabra");
    }
    
    
    
//esto muestra los resultados
    
if (mysql_num_rows($res)>0)
    {
       
$num_res=mysql_num_rows($res);
       if (
$num_res==1)
       {
             while (
$row mysql_fetch_array($res))
          {
          echo 
$row['titulo'];
          echo 
"<br>";
          echo 
$row['articulo'];
          }
       }
        else
        {
           echo 
'Se han encontrado los siguientes resultados:';
           echo 
"<br>";
           while (
$row mysql_fetch_array($res))
           {
               
$titulo$row[titulo];
               echo 
"<a href=\"portada.php?accion=ver&palabra=$titulo\">$titulo</a>";
               echo 
"<br>"
           }
         }
    } 
    else 
    {
      echo 
"No hay resultados para $palabra, comprueba que la has escrito bien,<br>";
      echo 
"o colabora <a href=\"portada.php?accion=anadir&termino=$palabra\">insertando</a> el termino";

    } 
    }
Lo que quiero conseguir es que si una busqueda da mas de un resultado muestre los resultados dados y que al clicar en uno de ellos vaya a su descripcion, si solo hay un resultado lo muestra directo y si no hay ninguno da la opcion de agragarlo ( puededes verlo aki : www.edificacionesglobal.com/dani/anait/wiki/ si pones pepe da un resultado, si pones dani da dos)
Bueno, pues la cosa va bien pero cuando hace la consulta

Código PHP:
  $res=mysql_query("SELECT * FROM wiki WHERE titulo=$palabra"); 
no me da ningun resultado y la pagina me dice que no hay resultados.
  #7 (permalink)  
Antiguo 04/09/2006, 12:15
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 14 años
Puntos: 4
No entiendo para utilizas $REQUEST si de cualquier modo el formulario lo envias por metodo POST lo más conveniente sería que compruebes que la variable probenga de este método. En cuanto a eso de que no te muestra nada en:

$res=mysql_query("SELECT * FROM wiki WHERE titulo=$palabra");

A de ser porque no escribes bien la palabra, es decir, escribes la palabra en minúsculas cuando en la base de datos la guardaste en mayúscula por decir algún ejemplo. Suerte
  #8 (permalink)  
Antiguo 04/09/2006, 12:18
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 11 años, 5 meses
Puntos: 0
No se deberá quizás a que faltan las comillas simples al tratarse de un campo de texto?

Código PHP:
$res=mysql_query("SELECT * FROM wiki WHERE titulo='$palabra'"); 
__________________
La muerte es un camino que todos debemos recorrer...
  #9 (permalink)  
Antiguo 04/09/2006, 13:25
Avatar de GaboMaKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Viña del Mar - Chile
Mensajes: 323
Antigüedad: 15 años, 1 mes
Puntos: 2
Cita:
Iniciado por djreficul Ver Mensaje
No se deberá quizás a que faltan las comillas simples al tratarse de un campo de texto?

Código PHP:
$res=mysql_query("SELECT * FROM wiki WHERE titulo='$palabra'"); 
opino lo mismo. fijate en las comillas, no las tienes, siendo que imagino que el campo titulo no es numerico.
__________________
Exito!!
:censura:
Visita Uganet.cl
  #10 (permalink)  
Antiguo 04/09/2006, 13:26
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 11 años, 10 meses
Puntos: 0
Cita:
Iniciado por kennyhp Ver Mensaje
Holas, he optado por usar el metodo

Código PHP:
<?php
if ($HTTP_SERVER_VARS[REQUEST_METHOD] == "POST")
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 
else
$res=mysql_query("SELECT * FROM wiki WHERE titulo == "$palabra")
?>
de esta forma el código me queda asi:

Código PHP:
<?php 
    
if ($accion_realizar=="ver"//muestra resultados de la consulta
    
{
    
    
$palabra=isset($_POST['palabra'])? trim ($_POST['palabra']): $_GET['palabra'];
    
    if (
$HTTP_SERVER_VARS[REQUEST_METHOD] == "POST"//compruebo de dd llega la variable
    
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 
    else
    {
    echo 
"AKI LLEGA"//para comprobar que entra en el else
    
echo "$palabra"//para ver si la variable es correcta
    
$res=mysql_query("SELECT * FROM wiki WHERE titulo=$palabra");
    }
    
    
    
//esto muestra los resultados
    
if (mysql_num_rows($res)>0)
    {
       
$num_res=mysql_num_rows($res);
       if (
$num_res==1)
       {
             while (
$row mysql_fetch_array($res))
          {
          echo 
$row['titulo'];
          echo 
"<br>";
          echo 
$row['articulo'];
          }
       }
        else
        {
           echo 
'Se han encontrado los siguientes resultados:';
           echo 
"<br>";
           while (
$row mysql_fetch_array($res))
           {
               
$titulo$row[titulo];
               echo 
"<a href=\"portada.php?accion=ver&palabra=$titulo\">$titulo</a>";
               echo 
"<br>"
           }
         }
    } 
    else 
    {
      echo 
"No hay resultados para $palabra, comprueba que la has escrito bien,<br>";
      echo 
"o colabora <a href=\"portada.php?accion=anadir&termino=$palabra\">insertando</a> el termino";

    } 
    }
Lo que quiero conseguir es que si una busqueda da mas de un resultado muestre los resultados dados y que al clicar en uno de ellos vaya a su descripcion, si solo hay un resultado lo muestra directo y si no hay ninguno da la opcion de agragarlo ( puededes verlo aki : www.edificacionesglobal.com/dani/anait/wiki/ si pones pepe da un resultado, si pones dani da dos)
Bueno, pues la cosa va bien pero cuando hace la consulta

Código PHP:
  $res=mysql_query("SELECT * FROM wiki WHERE titulo=$palabra"); 
no me da ningun resultado y la pagina me dice que no hay resultados.
tu codigo es completamente inseguro (sql injection)...
  #11 (permalink)  
Antiguo 04/09/2006, 14:46
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 11 años, 5 meses
Puntos: 5
Holas, algo he leido sobre sql injection, que si poner una sentencia sql en el post puedes acceder a la base de datos o algo así.
Te agradeceria que que comentases el por que es inseguro y como podria solucinarlo...
  #12 (permalink)  
Antiguo 04/09/2006, 15:17
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 11 años, 10 meses
Puntos: 0
es inseguro porque no validas lo que el usuario te envia, lo solucionas usando mysql_real_escape_string (tal como belero te indico en un mensaje anterior)
  #13 (permalink)  
Antiguo 05/09/2006, 03:42
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 11 años, 5 meses
Puntos: 5
Ok, me he documentado un poquillo y he visto que con mysql_real_escape_string lo que haces es que validas que el texto que te mandan no contenga caracteres especiales, con lo cual deduzco que no pueden mandar consultas SQL por el post y por lo tanto evitas el SQL injection.
Ahora lo implementare para evitarme futuros "incidentes"

Por cierto tb usé lo de las comillas que me dicen en el post anterior solucionando lo de la bussqueda.

GRACIAS!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:04.