Pregunta

Soy bastante nuevo en PHP y estoy creando un sitio web para mi empresa. Estoy utilizando un código existente que he obtenido pero parece que no puedo hacerlo funcionar correctamente. ¡Cualquier ayuda sería muy apreciada!

Tengo una variable, $ id , que identifica el tipo de categoría de producto que se muestra en la página. Primero necesito verificar que la variable de identificación se haya establecido y, de lo contrario, establecer la variable predeterminada en la categoría 0.

El código que tengo es el siguiente:

setdefault($id, 0);

function setdefault(&$var, $default="") 
{
   if (!isset($var)) 
   {
      $var = $default;
   }
}

Entonces, con la dirección www.website.com/browse.php, esperaría que su valor predeterminado sea $ id = 0; con la dirección www.website.com/browse.php?id=3, esperaría que configurara $ id a 3 y mostrara los productos relevantes. Sin embargo, a pesar de haber configurado $ id, todavía tiene un valor predeterminado de 0. ¿Hay algo obviamente incorrecto con mi código?

¿Fue útil?

Solución

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

setdefault(

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

$id = array_key_exists('id', 

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

setdefault(

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

<*>

o incluso más simple (utilizando el operador ternario):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

o incluso más simple (utilizando el operador ternario):

<*>GET) ?

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

setdefault(

Probablemente esté esperando que PHP use $ _POST y $ _GET como variables globales. PHP se configuraba de esta manera, en el pasado, pero las versiones más nuevas requieren que haga referencia explícita a estas variables.

Puedes probar esto:

<*>

o incluso más simple (utilizando el operador ternario):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

o incluso más simple (utilizando el operador ternario):

<*>GET['id'] : 0;

o incluso más simple (utilizando el operador ternario):

<*>GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } }

o incluso más simple (utilizando el operador ternario):

<*>

Otros consejos

Primero que nada, si es PHP 5.X, te recomiendo que no pases las variables por referencia usando & amp ;. Habiendo dicho eso. la llamada a la función isset siempre será verdadera dentro de la función. Pero recibirá una advertencia de variable no definida en el setdefault ($ id, 0);

Intenta esto en su lugar.

$id = isset($id) ? $id : 0;

Si $ id no está establecido, la llamada a setdefault ($ id, 0) generará una advertencia. Una función como setdefault no funciona en PHP. Usa esto en su lugar.

if (!isset($id)) $id = 0;

Si está haciendo esto para variables de matriz, como $ _GET y $ _POST, puede hacer esto:

function getuservar($A, $index, $default = '') {
    if (!isset($A[$index])) return $default;
    if (get_magic_quote_gpc()) return stripslashes($A[$index]);
    return $A[$index];
}

$clean_id = getuservar(

Si $ id no está establecido, la llamada a setdefault ($ id, 0) generará una advertencia. Una función como setdefault no funciona en PHP. Usa esto en su lugar.

if (!isset($id)) $id = 0;

Si está haciendo esto para variables de matriz, como $ _GET y $ _POST, puede hacer esto:

<*>

Este formulario de devolución es mejor porque deja de usar la matriz $ _GET inmediatamente y solo usa las variables que se limpian en el resto del código. Limpias tus variables externas una vez y nunca más tocas las variables externas en tu código. $ A puede ser $ _GET, $ _POST, $ _REQUEST o $ _COOKIE.

También maneja las molestas cosas de magic_quote por ti para que sepas que los datos en la variable son el texto enviado por el usuario. Solo recuerde limpiarlo nuevamente cuando se lo envíe al usuario oa la base de datos.

GET, 'id', 0);

Este formulario de devolución es mejor porque deja de usar la matriz $ _GET inmediatamente y solo usa las variables que se limpian en el resto del código. Limpias tus variables externas una vez y nunca más tocas las variables externas en tu código. $ A puede ser $ _GET, $ _POST, $ _REQUEST o $ _COOKIE.

También maneja las molestas cosas de magic_quote por ti para que sepas que los datos en la variable son el texto enviado por el usuario. Solo recuerde limpiarlo nuevamente cuando se lo envíe al usuario oa la base de datos.

¿Cómo se configura $ id ? Si register_globals está desactivado (y está desactivado de manera predeterminada en PHP 4.2 y más reciente), debe consultar $ _GET ['id'] o $ _POST [ 'id'] en su lugar (o $ _REQUEST ['id'] , pero hay razones para evitarlo).

El código para establecer $ id en algún momento de la cadena de consulta ( browse.php? id = 3 ) también debería incluirse. Puede estar pensando en la configuración de register_globals que tiene PHP que creará variables automáticamente cuando se incluya en la cadena de consulta. NO vuelva a habilitar esa función, ya que durante varios años se ha demostrado que es una muy mala idea.

Cualquier variable que esté extrayendo de la cadena de consulta debe verificarse para saber si hay tipo / seguridad antes de usarla. Entonces, por ejemplo, puede extraer la variable del $ _GET super global, verifique si es numérica, si no es así, establezca el valor predeterminado:

if (!is_numeric(El código para establecer  $ id  en algún momento de la cadena de consulta ( browse.php? id = 3 ) también debería incluirse. Puede estar pensando en la configuración de  register_globals  que tiene PHP que creará variables automáticamente cuando se incluya en la cadena de consulta. NO vuelva a habilitar esa función, ya que durante varios años se ha demostrado que es una muy mala idea. 

Cualquier variable que esté extrayendo de la cadena de consulta debe verificarse para saber si hay tipo / seguridad antes de usarla. Entonces, por ejemplo, puede extraer la variable del $ _GET super global, verifique si es numérica, si no es así, establezca el valor predeterminado:

<*>GET['id']) { setdefault(El código para establecer $ id en algún momento de la cadena de consulta ( browse.php? id = 3 ) también debería incluirse. Puede estar pensando en la configuración de register_globals que tiene PHP que creará variables automáticamente cuando se incluya en la cadena de consulta. NO vuelva a habilitar esa función, ya que durante varios años se ha demostrado que es una muy mala idea.

Cualquier variable que esté extrayendo de la cadena de consulta debe verificarse para saber si hay tipo / seguridad antes de usarla. Entonces, por ejemplo, puede extraer la variable del $ _GET super global, verifique si es numérica, si no es así, establezca el valor predeterminado:

<*>GET['id'], 0); }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top