Erros comúns

De Manuais Informática - IES San Clemente.
Revisión del 16:49 11 ene 2013 de Veiga (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda


Un dos erros máis comúns cando se utilizan sesións é deixar liñas en branco antes da inicialización de PHP ou enviar algunha saída á pantalla.

Para probalo crea unha liña en branco ou con calquera cousa antes de <?php

Se tes os cookies activados, atoparasche un erro deste tipo:

Warning: Cannot send session cookie - headers already sent by (output started at /home/session.php:2) in /home/session.php en liña 4

PHP está informando de que non pode activar os cookies no navegador do usuario, porque as cabeceiras xa foron enviadas. Simplemente pola existencia dunha liña en branco. Como medida práctica, non deixes espazos nin antes do inicio do script, nin logo da finalización. Aforrarache moitos desgustos.

Se logo de todo o comentado aínda non entendes para que serven as sesións, vexamos un exemplo práctico.

Carriño de compra

Imaxina que quixeses crear un sistema de cesta da compra, na súa forma básica podería ser algo así:

<?php
session_start(); 
session_register('itemsEnCesta'); 
if ($item){ 
   if (!isset($itemsEnCesta)){ 
      $itemsEnCesta[$item]=$cantidade; 
   }else{ 
      foreach($itemsEnCesta as $k => $v){ 
         if ($item==$k){ 
         $itemsEnCesta[$k]+=$cantidade; 
         $atopado=1; 
         } 
      } 
      if (!$atopado) $itemsEnCesta[$item]=$cantidade; 
   } 
} 
?> 
<html> 
<body> 
<tt> 

<form action="<?=$PHP_SELF."?".SID?>" method="post"> 
Dime o produto <input type="text" name="item" size="20"><br> 
Cantas unidades <input type="text" name="cantidade" size="20"><br> 
<input type="submit" value="Engadir á cesta"><br> 
</form> 
<? 
if (isset($itemsEnCesta)){ 
   echo'O contido da cesta da compra é:<br>'; 
   foreach($itemsEnCesta as $k => $v){ 
      echo 'Artigo: '.$k.' ud: '.$v.'<br>'; 
   } 
} 
?> 
</tt> 
</body> 
</html>

Unha breve explicación:

Na liña 4 comprobamos se o usuario pasou algún artigo, desde o formulario. Na 5 se o array itemsEnCesta non existe, creámolo co novo produto e a cantidade indicada. Se o array existe percorremos o seu contido, entre as liñas 8 e 13, e se atopamos un artigo igual, engadimos a cantidade na liña 10. Se non o atopamos, é un novo artigo, polo tanto, engadimos o novo produto coa correspondente cantidade a itemsEnCesta na liña 14.

E a continuación imprimimos o formulario e os resultados, se os houbese, a partir da liña 18, onde empeza o HTML.

Imaxina as posibilidades dun sistema de almacenamento de información destas características?. Non necesitas ficheiros, nin bases de datos, nin tes que andar pasando valores dunha páxina a outra. PHP vai xestionando estes datos por nós, ata o momento en que decidamos almacenar a información onde máis nos interese.

Outra forma de evitar que se amosen os warnings no inicio da Sesión é mediante a liña: @session_start(); Pero deste xeito non vemos o erro, pero sigue estando. Así que é un mero parche visual.

Estas son as funcionalidades básicas das sesións, espero que che fora ilustrativo e non esquezas consultar o resto de funcións asociadas ao uso de sesións no manual de PHP.


--Rafael Veiga 12:57 24 mar 2011 (GMT)