Foros del Web » Programando para Internet » PHP »

Ayuda Con Error

Estas en el tema de Ayuda Con Error en el foro de PHP en Foros del Web. Hola a todos al momento de subir al servidor mis archivos, me arroja este error, : Warning: Unknown(): Your script possibly relies on a session ...
  #1 (permalink)  
Antiguo 03/08/2006, 07:25
Avatar de Chudux  
Fecha de Ingreso: marzo-2006
Mensajes: 247
Antigüedad: 18 años, 1 mes
Puntos: 3
Ayuda Con Error

Hola a todos
al momento de subir al servidor mis archivos, me arroja este error, :

Warning: Unknown(): Your script possibly relies on a session
side-effect which existed until PHP 4.2.3. Please be advised
that the session extension does not consider global variables
as a source of data, unless register_globals is enabled.
You can disable this functionality and this warning
by setting session.bug_compat_42 or session.bug_compat_warn to off,
respectively.
in Unknown on line 0

pero si lo pruebo en ele localhost funcionan sin ningun problema
favor de explicarme saludos
  #2 (permalink)  
Antiguo 03/08/2006, 10:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
pegá el código para poder ver de dónde sale el aviso....
  #3 (permalink)  
Antiguo 03/08/2006, 10:33
Avatar de Chudux  
Fecha de Ingreso: marzo-2006
Mensajes: 247
Antigüedad: 18 años, 1 mes
Puntos: 3
Código PHP:
function display_cart($cart$change true$images 1)
{
  
// display items in shopping cart
  // optionally allow changes (true or false)
  // optionally include images (1 - yes, 0 - no)

  
global $items;
  global 
$total_price;

  echo 
"<table border = 0 width = 100% cellspacing = 0>
        <form action = show_cart.php method = post>
        <tr><th colspan = "
. (1+$images) ." bgcolor=\"#cccccc\">Item</th>
        <th bgcolor=\"#cccccc\">Price</th><th bgcolor=\"#cccccc\">Quantity</th>
        <th bgcolor=\"#cccccc\">Total</th></tr>"
;

  
//display each item as a table row
  
foreach ($cart as $isbn => $qty)
  {
    
$book get_book_details($isbn);
    echo 
"<tr>";
    if(
$images ==true)
    {
      echo 
"<td align = left>";
      if (
file_exists("images/$isbn.jpg"))
      {
         
$size GetImageSize("images/".$isbn.".jpg");
         if(
$size[0]>&& $size[1]>0)
         {
           echo 
"<img src=\"images/".$isbn.".jpg\" border=0 ";
           echo 
"width = "$size[0]/." height = " .$size[1]/">";
         }
      }
      else
         echo 
"&nbsp;";
      echo 
"</td>";
    }
    echo 
"<td align = left>";
    echo 
"<a href = \"show_book.php?isbn=".$isbn."\">".$book["title"]."</a> by ".$book["author"];
    echo 
"</td><td align = center>$".number_format($book["price"], 2);
    echo 
"</td><td align = center>";
    
// if we allow changes, quantities are in text boxes
    
if ($change == true)
      echo 
"<input type = text name = \"$isbn\" value = $qty size = 3>";
    else
      echo 
$qty;
    echo 
"</td><td align = center>$".number_format($book["price"]*$qty,2)."</td></tr>\n";
  }
  
// display total row
  
echo "<tr>
          <th colspan = "
. (2+$images) ." bgcolor=\"#cccccc\">&nbsp;</td>
          <th align = center bgcolor=\"#cccccc\">
              $items
          </th>
          <th align = center bgcolor=\"#cccccc\">
              \$"
.number_format($total_price2).
          
"</th>
        </tr>"
;
  
// display save change button
  
if($change == true)
  {
    echo 
"<tr>
            <td colspan = "
. (2+$images) .">&nbsp;</td>
            <td align = center>
              <input type = hidden name = save value = true>
              <input type = image src = \"images/save-changes.gif\"
                     border = 0 alt = \"Save Changes\">
            </td>
            <td>&nbsp;</td>
        </tr>"
;
  }
  echo 
"</form></table>";
}

//////////////////////////pagina que lo recibe show_cart.php//////////////
ademas manda un error con el foreach el cual localmente no sucede debe ser por las variables
 globales igual
y no se como arreglarlo por que en el codigo de arriba no entiendo esta linea
 
echo "<input type = text name = \"$isbn\" value = $qty size = 3>";
////////////////////////////////////////////////////
if($save)
  {
    foreach (
$cart as $isbn => $qty)
    {
      if($
$isbn=="0")
        unset(
$cart[$isbn]);
      else
        
$cart[$isbn] = $$isbn;
    }
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);
  } 
ahi esta saludos

Última edición por Cluster; 03/08/2006 a las 10:56
  #4 (permalink)  
Antiguo 03/08/2006, 10:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Parece que usas sesiones y que las manejas en forma "gloabal" (insegura)

Es decir .. haces referencia a tus variables de sesión por $nombre_variable_sesion .. en lugar de $_SESSION['nombre_variable_sesion'] (e incluso usaras session_register() para generarlas).

Puedes seguir la nota que se comenta de cambiar configuración de PHP (directivas mencionadas) para "ocultar" el mensaje de aviso, .. pero realmente lo que deberías es modificar tu código y hacerlo más seguro y compatible.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 03/08/2006, 12:14
Avatar de Chudux  
Fecha de Ingreso: marzo-2006
Mensajes: 247
Antigüedad: 18 años, 1 mes
Puntos: 3
ok gracias tratare de cambiar codigo , pero la ultima consulta= estan estas dos paginas la principal "show_cart.php" que en primera instancia llama a la funcion mostrada arriba "function display_cart" en esta funcion si se fijan hay un formulario que direcciona de vuelta a "show_cart.php" con metodo post, el problema que tengo es que no me manda los valores de vuelta, y se que es por la variables globales pero no se como solucionarlo, cuando se van de vuelta entra al siguiente codigo y me da un error con el foreach (porq ue no le llegan los datos) por favor ayudenme a encontrar el error que ya llevo toda la semana tratando de entenderlo....es que localmente este codigo funciona perfecto pero en el webhosting no quiere na. hay esta linea en la funcion que creo que es la que manda los valores ( echo "<input type = text name = \"$isbn\" value = $qty size = 3>"; ) pero no se como agarrarlo

/////////////////////parte del codigo de pag principal show_cart
if($save)
{
foreach ($cart as $isbn => $qty)
{
if($$isbn=="0")
unset($cart[$isbn]);
else
$cart[$isbn] = $$isbn;
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}
  #6 (permalink)  
Antiguo 03/08/2006, 14:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Chudux
ok gracias tratare de cambiar codigo , pero la ultima consulta= estan estas dos paginas la principal "show_cart.php" que en primera instancia llama a la funcion mostrada arriba "function display_cart" en esta funcion si se fijan hay un formulario que direcciona de vuelta a "show_cart.php" con metodo post, el problema que tengo es que no me manda los valores de vuelta, y se que es por la variables globales pero no se como solucionarlo, cuando se van de vuelta entra al siguiente codigo y me da un error con el foreach (porq ue no le llegan los datos) por favor ayudenme a encontrar el error que ya llevo toda la semana tratando de entenderlo....es que localmente este codigo funciona perfecto pero en el webhosting no quiere na. hay esta linea en la funcion que creo que es la que manda los valores ( echo "<input type = text name = \"$isbn\" value = $qty size = 3>"; ) pero no se como agarrarlo

/////////////////////parte del codigo de pag principal show_cart
if($save)
{
foreach ($cart as $isbn => $qty)
{
if($$isbn=="0")
unset($cart[$isbn]);
else
$cart[$isbn] = $$isbn;
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}
Si no pones todo el código -en su conetexto- es difici ver que te sucede.

"Aparentemente" tu código puede ser que no use los arrays superglobales ($_POST, $_GET .. etc) y tu usas en tu servidor: (php.ini) register_globals a OFF (lo cual es más seguro y lo que debes usar).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 03/08/2006, 18:26
Avatar de Chudux  
Fecha de Ingreso: marzo-2006
Mensajes: 247
Antigüedad: 18 años, 1 mes
Puntos: 3
hola este el el codigo completo desde donde se llama ala funcion y luego se regresa, saludos
<?
include ('book_sc_fns.php');
// El carrito de compra necesita sesiones, así que iniciar una.
session_start();

if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$items = 0;
session_register("items");
$total_price = "0.00";
session_register("total_price");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$total_price = calculate_price($cart);
$items = calculate_items($cart);

}
if($save)
{
foreach ($cart as $isbn => $qty)
{
if($$isbn=="0")
unset($cart[$isbn]);
else
$cart[$isbn] = $$isbn;
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}

do_html_header("Tu carro de compra");

if($cart&&array_count_values($cart))
display_cart($cart);
else
{
echo "<p>No hay artículos en tu carro";
echo "<hr>";
}
$target = "index.php";

// si hemos añadido un artículo al carro, continuar comprando en esa categoría
if($new)
{
$details = get_book_details($new);
if($details["catid"])
$target = "show_cat.php?catid=".$details["catid"];
}
display_button($target, "continue-shopping", "Continue Shopping");
$path = $PHP_SELF;
$path = str_replace("show_cart.php", "", $path);
display_button("http://".$SERVER_NAME.$path."checkout.php", "go-to-checkout", "Go To Checkout");
do_html_footer();
?>
  #8 (permalink)  
Antiguo 04/08/2006, 06:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ya te comenté ...

El uso de sesiones que haces NO ES CORRECTO (ni seguro, ni actualizado)

NO debes usar session_register() .. NO debes acceder a las varialbles de sesión en forma "global": $variable_sesión.

www.php.net/session

Modifica tu código al uso de $_SESSION.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 00:40.