Nueva pregunta

Pregunta:

Fecha: 09-07-2017 16:15:43 (En Español)

Error: Undefined variable y undefined offset[Resuelta]

Saludos, les comento que estoy desarrollando una tienda en línea, en el primer archivo muestro la lista de productos, el código es este:

Archivo de conexion "conexion2.php":
<?php 
 function conectar() {
try {

  $con = new PDO("mysql:host=localhost;dbname=tienda", "root", "");
  $con->query("SET NAMES 'utf-8'");

} catch (Exception $e) {
    echo "No se ha podido conectar con la base de datos";
    exit();
}

return $con;
}

function todos() {
	$con = conectar();
try {
	$resultado = $con->query("SELECT * FROM producto ORDER BY CodigoProd");

} catch (Exception $e) {
	echo "La consulta no se ha realizado";
	exit();
}

$productos = $resultado->fetchAll(PDO::FETCH_ASSOC);

return $productos;

}
?>



<?php 
include("conexion2.php");

function portada23($producto_id, $producto){


 $salida = ""; 
 $salida = $salida . '<div class=" col-lg-4">';
 $salida = $salida . '<img src="/' . $producto["img"] . '"  alt="' . $producto["NombreProd"] . '" class="img-rounded">';
 
 $salida = $salida . '<p>' . utf8_encode($producto["NombreProd"]) . '</p>';
 $salida = $salida . '<p><a class="btn-danger" href="carro.php?action=add&id='. $producto["CodigoProd"] .'">Comprar</strong> </a></p>';
 
 $salida = $salida . '</div>'; 
 
 
return $salida;
}

$productos = todos();

foreach ($productos as $producto_id => $producto) {
	echo portada23($producto_id, $producto);
}

?>


Archivo carro.php:
<?php 
session_start();
?>

<?php 
include("conexion2.php");
?>

<?php 
if (isset($_SESSION['carrito'])) {
   $carrito = $_SESSION['carrito']; // nombre de sesion
}

if (isset($_GET['id'])) {
   $sessionProducto_id = $_GET['id']; // recuperamos la id del producto
}
  if (isset($_GET['action'])) {
    $action = $_GET['action']; // recuperamos la accion que vamos a realizar
  }
   

     // switch con las acciones a realizar
   switch ($action) {
   	case 'add':
   		$carrito[$sessionProducto_id]++; // sumamos cantidad al producto con la id de la ruta
   		break;
   	
   	case 'remove':
   		$carrito[$sessionProducto_id]--; // restamos cantidad al producto con la id de la ruta
   		if ($carrito[$sessionProducto_id] == 0) {
   			unset($carrito[$sessionProducto_id]); // si la cantidad es cero lo eliminamos directamente
   		}
   		break;

   		case 'empty':
   			unset($carrito); // vaciamos el carrito
   		
   		break;
   	}   
?>

<?php 
if (!$carrito) {
   
echo '<table border=\"1\" padding=\"4\" width=\"40%\">';

foreach ($carrito as $sessionProducto_id => $cantidad) {
	try {
       $con = conectar();
       $resultado = $con->query("SELECT NombreProd, CodigoProd, descripcion, precio FROM producto WHERE CodigoProd = '$sessionProducto_id'");

	} catch (Exception $e) {
    echo "No se ha podido conectar con la base de datos";
    exit();
}
 
 $productos = $resultado->fetchAll(PDO::FETCH_ASSOC);  

foreach ($productos as $producto_id => $producto) { // foreach 2
   $precio = $producto["precio"];
   $costo = $precio * $cantidad;
   $total = $total + $costo;
   echo "<tr>";
   echo "<td align=\"center\">{$producto["NombreProd"]}</td>";
    echo "<td align=\"center\">$cantidad <a href=\"$_SERVER[PHP_SELF]?action=remove&$sessionProducto_id\">X</a></td>";
    echo "<td align=\"center\">$costo</td>";

    echo "</tr>";

}
    

} // final foreach 1


// mostramos el total

echo "<tr>";
echo "<td colspan=\"2\" align=\"right\">Total</td>";
echo "<td align=\"right\">Total</td>";
echo "</tr>";

echo "<tr>";
echo "<td colspan=\"3\" align=\"right\"><a href=\"$_SERVER[PHP_SELF]?action=empty\" onclick=\"return confirm('Eliminar Productos?');\">Vaciar Carrito</a></td>";
echo "</tr>";

echo "<tr>";
echo "<td colspan=\"3\" align=\"right\"><a href=\"pago.php\">Comprar</a></td>";
echo "</tr>";
echo "</table>";


} // final if
else {
  echo "No hay Productos en la cesta";
}

?>
<a href="index2.php">Volver a la Página Principal</a>


Aquí es donde me salen dos errores:
* Undefined variable $carrito
* Undefined offset 1234, "1234" es el código del producto que pretendo incluir al carrito.

Gracias de antemano.
Etiquetas: Error - PHP - Pregunta - Variables Votos: 0 - Respuestas: 3 - Vistas: 11 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 10-07-2017 06:08:32 Esto te esta indicando que la variable $carrito no esta declarada o definida, eso es porque condicionas la creacion de esta si hay otra creada ($_SESSION['carrito']), por ende debes indicar que valor va a contener esta variable en caso de que la variable de session no este declarada:

    if(isset($_SESSION['carrito']){
      $carrito = $_SESSION['carrito'];
    }else{
      $carrito = "";
    }
    
      Votos: 3 - Link respuesta
     
  • Fecha: 11-07-2017 13:33:13 No has declarado la variable $carrito como global, y la estás queriendo invocar dentro del bloque.   Votos: 1 - Link respuesta
     
  • Fecha: 12-07-2017 08:31:01 Perfecto, gracias, lo relacionado con la variable $carrito ya se solucionó, aún falta el offset   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com