Actualmente en las paginas web es muy frecuente querer agregar comentarios o mensajes privados. Como me lo han solicitado a mi correo, voy a postear el código.
Espero que les sea útil y de lo comprendan y sino me consultan.
Primero, vamos a crear las tablas en nuestra Base de Datos mysql. En el post anterior explique como crear las tablas y como crear una base. Con el código que les dejo solo deben ejecutarlas y ya tendrán las tablas. Luego les dejare los php para armar el procedimiento.
Paso 1
-- phpMyAdmin SQL Dump
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `comentarios`
--
CREATE TABLE IF NOT EXISTS `comentarios` (
`idcomentario` INT(11) NOT NULL AUTO_INCREMENT,
`idnombre` INT(11) NOT NULL,
`nombre` VARCHAR(11) NOT NULL,
`idperfil` INT(11) NOT NULL,
`fecha` DATE NOT NULL,
`comentario` longtext NOT NULL,
PRIMARY KEY (`idcomentario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=33 ;
--
-- Aplicar en la base de datos para la tabla `comentarios`
--
INSERT INTO `comentarios` (`idcomentario`, `idnombre`, `nombre`, `idperfil`, `fecha`, `comentario`) VALUES
(32, 1, 'Felipe', 2, '0000-00-00', 'Te deje muchos mensajes '),
(31, 3, 'Maria', 2, '0000-00-00', 'si recien me conecto'),
(30, 3, 'Maria', 1, '0000-00-00', 'estas?'),
(29, 2, 'Felipe', 3, '0000-00-00', 'si claro'),
(28, 2, 'Felipe', 1, '0000-00-00', 'Holaaa'),
(27, 1, 'Felipe', 3, '0000-00-00', 'hola, estas ahi?'),
(26, 1, 'Felipe', 2, '0000-00-00', 'Holaaa');
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `mensajes`
--
CREATE TABLE IF NOT EXISTS `mensajes` (
`idmensaje` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` longtext NOT NULL,
`mensaje` longtext NOT NULL,
`asunto` longtext NOT NULL,
`idnombre` INT(11) NOT NULL,
`receptor` longtext NOT NULL,
`idreceptor` INT(11) NOT NULL,
PRIMARY KEY (`idmensaje`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
--
-- Aplicar en la base de datos para la tabla `mensajes`
--
INSERT INTO `mensajes` (`idmensaje`, `nombre`, `mensaje`, `asunto`, `idnombre`, `receptor`, `idreceptor`) VALUES
(11, 'Felipe', 'hola', 'Hola', 1, 'Felipe', 2),
(10, 'Felipe', 'lalalala', 'estas', 2, 'Felipe', 1),
(6, 'maria', 'creo que si', 'Hola', 3, 'Felipe', 2),
(7, 'Felipe', 'sdfasdfasdfasdf', 'Holasdkàsdf', 1, 'Felipe', 2),
(8, 'Felipe', 'afdsfsdfasdfasdfasdf', '131234', 1, 'Felipe', 2),
(9, 'Felipe', 'dasdfsdfsdf', 'juuuujujujujujuj', 1, 'Felirpe', 2);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `pruebas`
--
CREATE TABLE IF NOT EXISTS `pruebas` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nick` VARCHAR(20) NOT NULL,
`pass` VARCHAR(32) NOT NULL,
`mail` VARCHAR(40) NOT NULL,
`codigo` VARCHAR(20) NOT NULL,
`estado` INT(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `nick` (`nick`,`pass`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Aplicar en la base de datos para la tabla `pruebas`
--
INSERT INTO `pruebas` (`id`, `nick`, `pass`, `mail`, `codigo`, `estado`) VALUES
(1, 'Felipe', 'e10adc3949ba59abbe56e057f20f883e', 'felipe_gonza@hotmail.com', '4ea2ffdde8b28', 1),
(2, 'Felipe', 'e10adc3949ba59abbe56e057f20f883e', 'asd@asd.asd', '4ea4c6f353ecb', 1),
(3, 'maria', 'e10adc3949ba59abbe56e057f20f883e', 'maria@hotmail.com', '4ea598a2632ed', 1);
Paso 2
perfil.php
<?php
include("conexion.php");
if($_SESSION['logeado'] == true){
$id = $_GET['id'];
if(isset($id)){//compruebo si id tiene valor
$resultado = mysql_query("SELECT nick, mail FROM pruebas WHERE (id = '$id')");
$fila = mysql_fetch_array($resultado);
if($_SESSION['nick'] == $fila['nick']){/* perfil de usuario logeado cuando id tiene valor, y si la sesion en que estoy logeado coincide con la de los datos trtaidos por la id, estoy en mi perfil*/
echo "Este es su perfil ".$_SESSION['nick'];
?>
</br></br>
<a href="<?php $_SERVER['PHP_SELF']?>?desconectar=1">Salir</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?borrar=1">Eliminar cuenta</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?cambiar=1">Cambiar contrasea</a>
</br>
</br>
<a href="leermensaje.php">Leer mensajes privados</a>
<?php
$idperfil = $_GET['id'];
$resultado = mysql_query("SELECT nombre, fecha, comentario, idnombre FROM comentarios WHERE (idperfil = '$idperfil')");
while($fila = mysql_fetch_array($resultado)){
echo "<br/>";
echo "<br/>";
echo "Nombre: <a href='perfil.php?id=".$fila['idnombre']."'>".$fila['nombre']."</a>";
echo "<br/>";
echo "----";
echo "<br/>";
echo "Comentario: ".$fila['comentario'];
echo "<br/>";
echo "---------------------------------------";
echo "<br/>";
}
}
else{/*perfil de otro usuario, porque el nick, no coincide con el de la persona logeada*/
echo "Este es el perfil de ".$fila['nick'].", y su mail es ".$fila['mail'];
?>
</br>
</br>
<a href="enviarmensaje.php">Enviar mensaje privado</a>
</br>
<?php
$_SESSION['idreceptor'] = $_GET['id'];
if(isset($_POST['mandar'])){
if(isset($_POST['comentario'])){
$comentario = $_POST['comentario'];
$nombre = $_SESSION['nick'];
$fecha = time();
$datofecha = date("d-m-Y" , $fecha);
$idperfil = $_GET['id'];
$idnombre = $_SESSION['id'];
if(mysql_query("INSERT INTO comentarios (comentario,nombre,fecha,idperfil,idnombre) VALUES ('$comentario','$nombre','$datofecha','$idperfil','$idnombre')")){
echo "<br/>";
echo "<br/>";
echo " Comentario subido con exito";
}
else{
echo "Hubo un fallo al poner el comentario, por favor vuelva a intentarlo";
}
}
else{
echo "Debe introducir un comentario";
}
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Perfil</title>
</head>
<body>
<br/>
Deja tu comentario!
<form method="post" action="perfil.php?id=<?php echo $_GET['id']; ?>">
<textarea name="comentario"></textarea>
<input type="submit" name="mandar">
</form>
</body>
</html>
<?php
$idperfil = $_GET['id'];
$resultado = mysql_query("SELECT nombre, fecha, comentario, idnombre FROM comentarios WHERE (idperfil = '$idperfil')");
while($fila = mysql_fetch_array($resultado)){
echo "<br/>";
echo "<br/>";
echo "Nombre: <a href='perfil.php?id=".$fila['idnombre']."'>".$fila['nombre']."</a>";
echo "<br/>";
echo "----";
echo "<br/>";
echo "Comentario: ".$fila['comentario'];
echo "<br/>";
echo "---------------------------------------";
echo "<br/>";
}
}
}
else{//perfil de usuario logeado cuando id no tiene valor
echo "Este es su perfil ".$_SESSION['nick'];
?>
</br></br>
<a href="<?php $_SERVER['PHP_SELF']?>?desconectar=1">Salir</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?borrar=1">Eliminar cuenta</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?cambiar=1">Cambiar contrasea</a>
</br>
</br>
<a href="leermensaje.php">Leer mensajes privados</a>
<?php
$nick = $_SESSION['nick'];
$resultado = mysql_query("SELECT id FROM pruebas WHERE (nick = '$nick')");
$fila = mysql_fetch_array($resultado);
$idperfil = $fila['id'];
$resultado = mysql_query("SELECT nombre, fecha, comentario, idnombre FROM comentarios WHERE (idperfil = '$idperfil')");
while($fila = mysql_fetch_array($resultado)){
echo "<br/>";
echo "<br/>";
echo "Nombre: <a href='perfil.php?id=".$fila['idnombre']."'>".$fila['nombre']."</a>";
echo "<br/>";
echo "----";
echo "<br/>";
echo "Comentario: ".$fila['comentario'];
echo "<br/>";
echo "---------------------------------------";
echo "<br/>";
}
}
}
else{
echo "Tienes que estar logeado para estar aqui";
}
?>
PASO 3
login.php
<?php
include("conexion.php");
if(isset($_POST['enviar']))
{
$nick = $_POST['nick'];
$pass = $_POST['pass'];
if(isset($nick) && isset($pass))
{
$resultado = mysql_query("SELECT nick, pass ,estado, id FROM pruebas WHERE (nick = '$nick') AND (pass = md5('$pass'))");
if(mysql_num_rows($resultado) > 0)
{
$fila = mysql_fetch_array($resultado);
if($fila['estado'] == 1){
$_SESSION['nick'] = $nick;
$_SESSION['logeado'] = true;
$_SESSION['id'] = $fila['id'];
}
else{
echo "Su cuenta no a sido activada";
}
}
else{
echo "Usuario o contraseña incorrectos.";
}
}
else{
echo "Usuario o contraseña incorrectos.";
}
}
?>
<?php
if($_SESSION['logeado'] == true){//abre logeo
echo "Usted ".$_SESSION['nick']." esta logeado";
?>
</br></br>
<a href="<?php $_SERVER['PHP_SELF']?>?desconectar=1">Salir</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?borrar=1">Eliminar cuenta</a>
</br>
</br>
<a href="<?php $_SERVER['PHP_SELF']?>?cambiar=1">Cambiar contraseña</a>
</br>
</br>
<a href="leermensaje.php">Leer mensajes privados</a>
<?php
$nick = $_SESSION['nick'];
$resultado = mysql_query("SELECT id FROM pruebas WHERE (nick = '$nick')");
$fila = mysql_fetch_array($resultado);
$idperfil = $fila['id'];
$resultado = mysql_query("SELECT nombre, fecha, comentario, idnombre FROM comentarios WHERE (idperfil = '$idperfil')");
while($fila = mysql_fetch_array($resultado)){
echo "<br/>";
echo "<br/>";
echo "Nombre: <a href='perfil.php?id=".$fila['idnombre']."'>".$fila['nombre']."</a>";
echo "<br/>";
echo "----";
echo "<br/>";
echo "Comentario: ".$fila['comentario'];
echo "<br/>";
echo "---------------------------------------";
echo "<br/>";
}
}//if donde termina el logeo
else{
?>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="login.php">
Nick:<input type="text" name="nick">
Password:<input type="password" name="pass">
<input type="submit" name="enviar">
</form>
<a href="<?php $_SESSION['PHP_SELF']?>?recordar=1">Recordar contraseña</a>
</body>
</html>
<?php
}
?>
PASO 4
leermensaje.php
<?php
include("conexion.php");
if($_SESSION['logeado'] == true){
if(empty($_GET['idmensaje'])){
$id = $_SESSION['id'];
$nick = $_SESSION['nick'];
$resultado = mysql_query("SELECT * FROM mensajes WHERE (idreceptor = '$id')");
echo "<table width='737' height='31' border='1'>";
echo "<tr>";
echo "<td width='109'>De:</td>";
echo "<td width='265'>Asunto:</td>";
echo "<td width='400'>Mensaje:</td>";
echo "</tr>";
echo "</table>";
while($fila = mysql_fetch_array($resultado)){
echo "<table width='737' height='31' border='1'>";
echo "<tr>";
echo "<td width='109'><a href='leermensaje.php?idmensaje=".$fila['idmensaje']."'>".$fila['nombre']."</a></td>";
echo "<td width='265'>".$fila['asunto']."</td>";
echo "<td width='400'>".$fila['mensaje']."</td>";
echo "</tr>";
echo "</table>";
}
}
else{
$idmensaje = $_GET['idmensaje'];
$resultado = mysql_query("SELECT nombre, mensaje, asunto FROM mensajes WHERE (idmensaje = '$idmensaje')");
$fila = mysql_fetch_array($resultado);
echo "De: ".$fila['nombre'];
echo "<br />";
echo "--------------------------------------------------------------------------------";
echo "<br />";
echo "Asunto: ".$fila['asunto'];
echo "<br />";
echo "--------------------------------------------------------------------------------";
echo "<br />";
echo "Mensaje: ".$fila['mensaje'];
}
}
else{
echo "Debe estar logeado para estar aqui";
}
?>
PASO 5
registro.php
<?php
include("conexion.php");
if(isset($_POST['registro']))
{
if(($_POST['nick'] != '') && ($_POST['pass'] != '') && ($_POST['mail'] != ''))
{
if($_POST['pass'] == $_POST['confpass'])
{
$nick = $_POST['nick'];
$pass = md5($_POST['pass']);
$mail = $_POST['mail'];
$resultado = mysql_query("SELECT nick, mail FROM pruebas WHERE (nick = '$nick') OR (mail = '$mail')");
$fila = mysql_fetch_array($resultado);
if($fila['nick'] == $nick)
{
echo "El nick esta en uso";
}
elseif($fila['mail'] == $mail)
{
echo "El mail esta en uso";
}
else
{
if(eregi("@" , $mail)){
$codigo= uniqid();
mysql_query("insert into pruebas(nick,pass,mail,codigo,estado) values ('$nick','$pass','$mail','$codigo',0)");
echo 'Los datos han sido enviados correctamente';
}
else
echo "Mail no valido";
}
}
else
{
echo 'Las contraseñas no coinciden';
}
}
else
{
echo 'Debera completar todos los campos';
}
}
if($_SESSION['logeado'] == true){
echo "Usted esta logeado";
}
else{
?>
<html>
<head>
<title>Registro</title>
</head>
<body>
<form method="post" action="registro.php">
nick
<input type="text" name="nick" value="<?php echo $_POST['nick'];?>">
pass
<input type="password" name="pass">
confirmar contraseña
<input type="password" name="confpass">
mail
<input type="text" name="mail" value="<?php echo $_POST['mail'];?>">
<input type="submit" value="enviar" name="registro">
</form>
</body>
</html>
<?php
}
?>
PASO 6
enviarmensaje.php
<?php
include("conexion.php");
if($_SESSION['logeado'] == true){
if(isset($_POST['mandar'])){
if(isset($_POST['asunto']) && isset($_POST['mensaje'])){
$id = $_SESSION['idreceptor'];
$resultado = mysql_query("SELECT nick, id FROM pruebas WHERE (id = '$id')");
$fila = mysql_fetch_array($resultado);
$idreceptor = $fila['id'];
$receptor = $fila['nick'];
$idnombre = $_SESSION['id'];
$nombre = $_SESSION['nick'];
$asunto = $_POST['asunto'];
$mensaje = $_POST['mensaje'];
if(mysql_query("INSERT INTO mensajes (nombre,mensaje,asunto,idnombre,receptor,idreceptor) VALUES ('$nombre', '$mensaje', '$asunto', '$idnombre', '$receptor', '$idreceptor')")){
echo "Mensaje enviado con exito";
}
else{
echo "Error al enviar el mensaje, por favor vuelva a intentarlo";
}
}
else{
echo "Debe rellenar todos los campos para enviar un mensaje privado";
}
}
?>
<html>
<head>
<title>Enviar mensaje</title>
</head>
<body>
<form method="post" action="enviarmensaje.php">
Asunto<input type="text" name="asunto" />
Mensaje<textarea name="mensaje"></textarea>
<input type="submit" name="mandar" />
</form>
</body>
</html>
<?php
}
else{
echo "Para enviar un mensaje debe estar logeado";
}
?>
PASO 7
confirmar.php
<?php
include("conexion.php");
$codigo = $_GET['codigo'];
$resultado = mysql_query("SELECT estado FROM pruebas WHERE (codigo = '$codigo')");
$fila = mysql_fetch_array($resultado);
if($fila['estado'] == 0){
$estado = 1;
if(mysql_query("UPDATE pruebas SET estado = '$estado' WHERE (codigo = '$codigo')")){
echo "Su cuenta a sido activada";
}
else{
echo "Se a producido un error, por favor vuelva a cargar la pagina";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Confirmar cuenta</title>
</head>
<body>
</body>
</html>
Este blog esta hecho con la intención de ayudar. Aportes sobre realización de backups y recovery. Métodos de administración de bases, dblinks y migraciones, tablas, indices, estadísticas, etc. Diseño web y plantillas en php.
Mi lista de blogs
martes, 29 de septiembre de 2015
Codigo para hacer un carrito en PHP - Para tu pagina web
Voy a dejar un código con la instrucción para probar en la web como hacer un carrito.
Claro que el código deben de modificarlo para adaptarlo a la web de ustedes.
Esto es muy necesario para las paginas que presentan la carga de productos que luego deben ser seleccionados por el usuario.
Este ejemplo, es bien sencillo y adaptable
CATALOGO.PHP
<?php
ob_start("ob_gzhandler");
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//Las funciones ob_start y ob_end_flush te permiten escojer en qué momento enviar el resultado
// de un script al navegador. Si no las utilizamos estamos
//obligados a que nuestra primera línea de código sea session_start() u obtendremos un error
session_start();
//conectamos a la base de datos
mysql_connect("localhost","root","");
mysql_select_db("carro");
//rescatamos los valores guardados en la variable de sesión (si es que hay alguno, cosa que
//comprobamos con isset) y los asignamos a $carro. Si no existen valores, ponemos a false el
//valor de $carro
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];else $carro=false;
//y hacemos la consulta
$qry=mysql_query("select * from catalogo order by producto asc");
?>
<html>
<head>
<title>CATÁLOGO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.catalogo {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #333333;
}
-->
</style>
</head>
<body>
<table width="272" align="center" cellpadding="0" cellspacing="0" style="border: 1px solid #000000;">
<tr valign="middle" bordercolor="#FFFFFF" bgcolor="#DFDFDF" class="catalogo">
<td width="170"><strong>Producto</strong></td>
<td width="77"><strong>Precio</strong></td>
<td width="25" align="right"><a href="vercarrito.php?<?php echo SID ?>" title="Ver el contenido del carrito"><img src="vercarrito.gif" width="25" height="21" border="0"></a></td>
</tr>
<?php
//mostramos todos nuestros artículos, viendo si han sido agregados o no a nuestro carro de compra
while($row=mysql_fetch_assoc($qry)){
?>
<tr valign="middle" class="catalogo">
<td><?php echo $row['producto'] ?></td>
<td><?php echo $row['precio'] ?></td>
<td align="center"><?php
if(!$carro || !isset($carro[md5($row['id'])]['identificador']) || $carro[md5($row['id'])]['identificador']!=md5($row['id'])){
//si el producto no ha sido agregado, mostramos la imagen de no agregado, linkeada
// a nuestra página de agregar producto y transmitíéndole a dicha
//página el id del artículo y el identificador de la sesión
?><a href="agregacar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productonoagregado.gif" border="0" title="Agregar al Carrito"></a><?php }
else
//en caso contrario mostramos la otra imagen linkeada., a la página que sirve para borrar el artículo del carro.
{?><a href="borracar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productoagregado.gif" border="0" title="Quitar del Carrito"></a><?php } ?></td>
</tr><?php } ?>
</table>
</body>
</html>
<?php
ob_end_flush();
?>
borracar.php
<?php
session_start();
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_GET);
//Como antes, usamos extract() por comodidad, pero podemos no hacerlo tranquilamente
$carro=$_SESSION['carro'];
//Asignamos a la variable $carro los valores guardados en la sessión
unset($carro[md5($id)]);
//la función unset borra el elemento de un array que le pasemos por parámetro. En este
//caso la usamos para borrar el elemento cuyo id le pasemos a la página por la url
$_SESSION['carro']=$carro;
//Finalmente, actualizamos la sessión, como hicimos cuando agregamos un producto y volvemos al catálogo
header("Location:catalogo.php?".SID);
?>
agregacar.php
<?php
session_start();
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_REQUEST);
//la función extract toma las claves de una matriz asoiativa y las convierte en nombres de variable,
//asignándoles a esas variables valores iguales a los que tenía asociados en la matriz. Es decir, convierte a $_GET['id'] en $id,
//sin que tengamos que tomarnos el trabajo de escribir $id=$_GET['ID'];
mysql_connect("localhost","root","");
mysql_select_db("carro");
//incluímos la conexión a nuestra base de datos
if(!isset($cantidad)){$cantidad=1;}
//Como también vamos a usar este archivo para actualizar las cantidades,
//hacemos que cuando la misma no esté indicada sea igual a 1
$qry=mysql_query("select * from catalogo where id='".$id."'");
$row=mysql_fetch_array($qry);
//Si ya hemos introducido algún producto en el carro lo tendremos guardado temporalmente
//en el array superglobal $_SESSION['carro'], de manera que rescatamos los valores de dicho array
//y se los asignamos a la variable $carro, previa comprobación con isset de que $_SESSION['carro']
//ya haya sido definida
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];
//Ahora introducimos el nuevo producto en la matriz $carro, utilizando como índice el id del producto
//en cuestión, encriptado con md5. Utilizamos md5 porque genera un valor alfanumérico que luego,
//cuando busquemos un producto en particular dentro de la matriz, no podrá ser confundido con la posición
//que ocupa dentro de dicha matriz, como podría ocurrir si fuera sólo numérico.
//Cabe aclarar que si el producto ya había sido agregado antes, los nuevos valores que le asignemos reemplazarán
//a los viejos.
//Al mismo tiempo, y no porque sea estrictamente necesario sino a modo de ejemplo, guardamos más de un valor
//en la variable $carro, valiéndonos de nuevo de la herramienta array.
$carro[md5($id)]=array('identificador'=>md5($id),'cantidad'=>$cantidad,'producto'=>$row['producto'],'precio'=>$row['precio'],'id'=>$id);
//Ahora dentro de la sesión ($_SESSION['carro']) tenemos sólo los valores que teníamos (si es que teníamos alguno) antes de ingresar
//a esta página y en la variable $carro tenemos esos mismos valores más el que acabamos de sumar. De manera que
//tenemos que actualizar (reemplazar) la variable de sesión por la variable $carro.
$_SESSION['carro']=$carro;
//Y volvemos a nuestro catálogo de artículos. La cadena SID representa al identificador de la sesión, que, dependiendo
//de la configuración del servidor y de si el usuario tiene o no activadas las cookies puede no ser necesario pasarla por la url.
//Pero para que nuestro carro funcione, independientemente de esos factores, conviene escribirla siempre.
header("Location:catalogo.php?".SID);
?>
Claro que el código deben de modificarlo para adaptarlo a la web de ustedes.
Esto es muy necesario para las paginas que presentan la carga de productos que luego deben ser seleccionados por el usuario.
Este ejemplo, es bien sencillo y adaptable
CATALOGO.PHP
<?php
ob_start("ob_gzhandler");
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//Las funciones ob_start y ob_end_flush te permiten escojer en qué momento enviar el resultado
// de un script al navegador. Si no las utilizamos estamos
//obligados a que nuestra primera línea de código sea session_start() u obtendremos un error
session_start();
//conectamos a la base de datos
mysql_connect("localhost","root","");
mysql_select_db("carro");
//rescatamos los valores guardados en la variable de sesión (si es que hay alguno, cosa que
//comprobamos con isset) y los asignamos a $carro. Si no existen valores, ponemos a false el
//valor de $carro
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];else $carro=false;
//y hacemos la consulta
$qry=mysql_query("select * from catalogo order by producto asc");
?>
<html>
<head>
<title>CATÁLOGO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.catalogo {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #333333;
}
-->
</style>
</head>
<body>
<table width="272" align="center" cellpadding="0" cellspacing="0" style="border: 1px solid #000000;">
<tr valign="middle" bordercolor="#FFFFFF" bgcolor="#DFDFDF" class="catalogo">
<td width="170"><strong>Producto</strong></td>
<td width="77"><strong>Precio</strong></td>
<td width="25" align="right"><a href="vercarrito.php?<?php echo SID ?>" title="Ver el contenido del carrito"><img src="vercarrito.gif" width="25" height="21" border="0"></a></td>
</tr>
<?php
//mostramos todos nuestros artículos, viendo si han sido agregados o no a nuestro carro de compra
while($row=mysql_fetch_assoc($qry)){
?>
<tr valign="middle" class="catalogo">
<td><?php echo $row['producto'] ?></td>
<td><?php echo $row['precio'] ?></td>
<td align="center"><?php
if(!$carro || !isset($carro[md5($row['id'])]['identificador']) || $carro[md5($row['id'])]['identificador']!=md5($row['id'])){
//si el producto no ha sido agregado, mostramos la imagen de no agregado, linkeada
// a nuestra página de agregar producto y transmitíéndole a dicha
//página el id del artículo y el identificador de la sesión
?><a href="agregacar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productonoagregado.gif" border="0" title="Agregar al Carrito"></a><?php }
else
//en caso contrario mostramos la otra imagen linkeada., a la página que sirve para borrar el artículo del carro.
{?><a href="borracar.php?<?php echo SID ?>&id=<?php echo $row['id']; ?>"><img src="productoagregado.gif" border="0" title="Quitar del Carrito"></a><?php } ?></td>
</tr><?php } ?>
</table>
</body>
</html>
<?php
ob_end_flush();
?>
borracar.php
<?php
session_start();
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_GET);
//Como antes, usamos extract() por comodidad, pero podemos no hacerlo tranquilamente
$carro=$_SESSION['carro'];
//Asignamos a la variable $carro los valores guardados en la sessión
unset($carro[md5($id)]);
//la función unset borra el elemento de un array que le pasemos por parámetro. En este
//caso la usamos para borrar el elemento cuyo id le pasemos a la página por la url
$_SESSION['carro']=$carro;
//Finalmente, actualizamos la sessión, como hicimos cuando agregamos un producto y volvemos al catálogo
header("Location:catalogo.php?".SID);
?>
agregacar.php
<?php
session_start();
//error_reporting(E_ALL);
//@ini_set('display_errors', '1');
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_REQUEST);
//la función extract toma las claves de una matriz asoiativa y las convierte en nombres de variable,
//asignándoles a esas variables valores iguales a los que tenía asociados en la matriz. Es decir, convierte a $_GET['id'] en $id,
//sin que tengamos que tomarnos el trabajo de escribir $id=$_GET['ID'];
mysql_connect("localhost","root","");
mysql_select_db("carro");
//incluímos la conexión a nuestra base de datos
if(!isset($cantidad)){$cantidad=1;}
//Como también vamos a usar este archivo para actualizar las cantidades,
//hacemos que cuando la misma no esté indicada sea igual a 1
$qry=mysql_query("select * from catalogo where id='".$id."'");
$row=mysql_fetch_array($qry);
//Si ya hemos introducido algún producto en el carro lo tendremos guardado temporalmente
//en el array superglobal $_SESSION['carro'], de manera que rescatamos los valores de dicho array
//y se los asignamos a la variable $carro, previa comprobación con isset de que $_SESSION['carro']
//ya haya sido definida
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];
//Ahora introducimos el nuevo producto en la matriz $carro, utilizando como índice el id del producto
//en cuestión, encriptado con md5. Utilizamos md5 porque genera un valor alfanumérico que luego,
//cuando busquemos un producto en particular dentro de la matriz, no podrá ser confundido con la posición
//que ocupa dentro de dicha matriz, como podría ocurrir si fuera sólo numérico.
//Cabe aclarar que si el producto ya había sido agregado antes, los nuevos valores que le asignemos reemplazarán
//a los viejos.
//Al mismo tiempo, y no porque sea estrictamente necesario sino a modo de ejemplo, guardamos más de un valor
//en la variable $carro, valiéndonos de nuevo de la herramienta array.
$carro[md5($id)]=array('identificador'=>md5($id),'cantidad'=>$cantidad,'producto'=>$row['producto'],'precio'=>$row['precio'],'id'=>$id);
//Ahora dentro de la sesión ($_SESSION['carro']) tenemos sólo los valores que teníamos (si es que teníamos alguno) antes de ingresar
//a esta página y en la variable $carro tenemos esos mismos valores más el que acabamos de sumar. De manera que
//tenemos que actualizar (reemplazar) la variable de sesión por la variable $carro.
$_SESSION['carro']=$carro;
//Y volvemos a nuestro catálogo de artículos. La cadena SID representa al identificador de la sesión, que, dependiendo
//de la configuración del servidor y de si el usuario tiene o no activadas las cookies puede no ser necesario pasarla por la url.
//Pero para que nuestro carro funcione, independientemente de esos factores, conviene escribirla siempre.
header("Location:catalogo.php?".SID);
?>
viernes, 25 de septiembre de 2015
Entorno para crear tu pagina web en PHP and MYSQL- wampserver
Vamos a comenzar a generar una prueba de pagina web conectada a una base de datos.
Ahora bien, para realizar esto primero debemos tener un ambiente que no sea el productivo. Pero como creamos ese ambiente?, donde y como generamos una base?.
1. Tener el wampserver, sino lo tenemos lo descargamos. En este programa vamos a encontrar como dejar activa la base y que sea utilizada previa a nuestra puesta en producción :
Para abrir phpMyAdmin, haz clic en la opción phpMyAdmin del menú de WampServer que se obtienen al hacer clic sobre su icono. O accede a la dirección http://localhost/phpmyadmin/.
2. Puedes seleccionar un juego de caracteres en el desplegable Cotejamiento, si lo dejas en blanco se tomará el valor por defecto que variará según la configuración de cada servidor.
3. Es recomendable que escojas la opción utf-8_spanish_ci para maximizar la compatibilidad con todos los caracteres especiales del alfabeto en castellano y para que la salida en cualquier navegador sea correcta.
Una vez que ingresamos a la base, vamos a creer una Base de datos
Y ya, una vez que le damos CREAR, ya tenemos nuestra base de datos y podemos comenzar a generar nuestras tablas, procesos,etc.
Próximamente subire como hacer un login, en PHP-
Ahora bien, para realizar esto primero debemos tener un ambiente que no sea el productivo. Pero como creamos ese ambiente?, donde y como generamos una base?.
1. Tener el wampserver, sino lo tenemos lo descargamos. En este programa vamos a encontrar como dejar activa la base y que sea utilizada previa a nuestra puesta en producción :
Para abrir phpMyAdmin, haz clic en la opción phpMyAdmin del menú de WampServer que se obtienen al hacer clic sobre su icono. O accede a la dirección http://localhost/phpmyadmin/.
2. Puedes seleccionar un juego de caracteres en el desplegable Cotejamiento, si lo dejas en blanco se tomará el valor por defecto que variará según la configuración de cada servidor.
3. Es recomendable que escojas la opción utf-8_spanish_ci para maximizar la compatibilidad con todos los caracteres especiales del alfabeto en castellano y para que la salida en cualquier navegador sea correcta.
Una vez que ingresamos a la base, vamos a creer una Base de datos
Y ya, una vez que le damos CREAR, ya tenemos nuestra base de datos y podemos comenzar a generar nuestras tablas, procesos,etc.
Próximamente subire como hacer un login, en PHP-
miércoles, 23 de septiembre de 2015
Hace tu web vos mismo, en pocos pasos
Bueno, si bien este es un ejemplo, pero luego cada uno lo puede adaptar o consultar para modificarlo. Haremos una pequeña prueba, y para ello es necesario que me sigas.
A empezar a diseñar
1-Bajar dreamweaver, entorno de desarrollo donde haremos la pagina.
2-Ingresamos a dreamweaver.
3-Vamos a CREAR NUEVO HTML
4-En titulo ponemos el nombre que queremos que figure en el navegador, yo puse "Mi web".
5-Luego vamos a Insertar, Tabla y dentro de la misma escribimos lo que querramos o bien vamos a la solapa codigo e insertamos :
<table>
<tr>
<td>Estamos trabajando en la web...</td></tr>
<tr>
<td>Un cambio, una imagen, vos, tu propia pagina</td></tr>
<tr>
<td> </td></tr>
<tr>
<td style="font-size: 8pt">dba-mg.blogspot.com.ar</td></tr>
</table>
<br><br>
6- Damos f12 y nos mostrara un mensaje para que la guardemos con un nombre. Siempre a la pagina principal, referencial o home, le colocaremos index.html
¿Como crear una tabla en una base de datos en Mysql php para mi pagina Web?
Bueno, si nos encontramos con el diseño de una pagina web, en la cual es necesario que tengamos una conexión con una base de datos, para realizar por ejemplo el LOGIN, Es importante que contemos, primero con la creación de las tablas en donde iremos a guardar los datos. Como ser, la plantilla de datos de un usuario que se esta resgistrando en nuestra pagina. Haremos entonces la creación de la tabla, luego mostrare como conectar esta base con mi web.
1- Me conecto a la base de datos en la cual, voy a crear la tabla. En este caso a mi tabla la llame Usuarios y los campos que utilice son específicos para el tipo de pagina, ya que la web que diseñe es casi para una interacción de web social y se refiere al trueque, es por ello que contiene tantos campos de localidad. Dichos campos, estan pensados para que los usuarios tengan opciones para juntarse a concretar la operación.
Pero bien, el punto central aqui es que al ingresar a la base, le demos NUEVA para crear la tabla, Alli nos aparecera un campo en blanco que dice NOMBRE DE TABLA y el colocaremos el nombre al cual haremos referencia, cada vez que lo necesitemos.
Luego completaremos los campos, con NOMBRE, nombre del campo como ser "apellido:", en tipo, colocaremos el tipo de dato a ingresar y así iremos completando todos los campos. Los mas importantes, ademas de los mencionados son: si queremos permitir NULOS es decir NULL, que el usuario pueda dejar vació ese campo, luego el del indice, indicar para esa tabla cual sera el campo id indice. Por ultimo, si queremos que sea incremental.
Una vez hecho esto, hacemos click en guardar y listo, tabla creada.
Les quedara algo así:
1- Me conecto a la base de datos en la cual, voy a crear la tabla. En este caso a mi tabla la llame Usuarios y los campos que utilice son específicos para el tipo de pagina, ya que la web que diseñe es casi para una interacción de web social y se refiere al trueque, es por ello que contiene tantos campos de localidad. Dichos campos, estan pensados para que los usuarios tengan opciones para juntarse a concretar la operación.
Pero bien, el punto central aqui es que al ingresar a la base, le demos NUEVA para crear la tabla, Alli nos aparecera un campo en blanco que dice NOMBRE DE TABLA y el colocaremos el nombre al cual haremos referencia, cada vez que lo necesitemos.
Luego completaremos los campos, con NOMBRE, nombre del campo como ser "apellido:", en tipo, colocaremos el tipo de dato a ingresar y así iremos completando todos los campos. Los mas importantes, ademas de los mencionados son: si queremos permitir NULOS es decir NULL, que el usuario pueda dejar vació ese campo, luego el del indice, indicar para esa tabla cual sera el campo id indice. Por ultimo, si queremos que sea incremental.
Una vez hecho esto, hacemos click en guardar y listo, tabla creada.
Les quedara algo así:
Problemas al compilar, herramientas de compilación, errores y formas de solucionar este problema -
Hace poco, sucedió en una complementación que realizo el área de producción, de hacer un cambio sobre algunas tablas. Estos cambios, realizaban insert y update de registros. Por lo tanto, adoptaron la teoría de que no habría ningún problema, pues en el ambiente de test no lo hubo y todo salio exitosamente. Cuando fueron a realizar la compilación de los objetos, se encontraron con algunos errores en la salida. Estos errores claramente mostraban que algunos insert los había realizado y otros no, lo mismo paso con los updates.
¿Que sucedió y porque?
Aquí es donde intervino mi gestión y se comunicaron conmigo. ¿Que paso? al compilar los objetos encontro lineas donde existian caracteres raros, es por ello que algunos registros ingresaron y otros no.
¿Porque sucede esto? en verdad por que paso en el pasaje a producción y no en testing, es por que en testing lo compilaron con una herramienta que difiere a la que utilizaron para aplicarlo en el ambiente productivo. Esto es SUMAMENTE importante que siempre los archivos sean compilados en la misma herramienta. Yo recomiendo que sea en SQLPLUS,
Los dba estamos acostumbrados a utilizar muchas herramientas, en mi caso uso mucho ademas del sqlplus, el toad y el sqldeveloper. Por eso es importante que al momento de compilar un cambio en producción se hagan con sqlplus.
Por otro lado, es fundamental que antes de hacer un cambio se haga un backup de los objetos, en este caso hacer un EXPORT de las tablas era la solución, pero los chicos de producción no lo hicieron :(
Paso que utilice:
Yo tenia un ambiente para probar, en un unix. Entonces lo que hice fue transferirme el backup full de la noche anterior. Yo en mi caso, hago backups full todas las noches luego de la corrida de los procesos batch. En el día, cada 30 minutos hago archive log.
¿Como lo solucione? restaure el backup full, aplique mis archive log previos a este cambio, y realice un export/import de las tablas afectadas. Esta claro, que me hubiese ahorrado todo esto si tenia un export de las tablas previo al cambio, como lo mencione anteriormente.
Entonces, es importante que antes de cualquier cambio:
1- Se tome BACKUP así sea EXPORT, de tablas, esquemas, store procedures, etc, pero tener un resguardo de los cambios sobre los componentes que se modificaran.
2 - Se utilice la misma herramienta de compilación para todos los ambientes.
3 - En caso de incidentes, con el punto 1, restaurar a tiempo los objetos corruptos.
¿Que sucedió y porque?
Aquí es donde intervino mi gestión y se comunicaron conmigo. ¿Que paso? al compilar los objetos encontro lineas donde existian caracteres raros, es por ello que algunos registros ingresaron y otros no.
¿Porque sucede esto? en verdad por que paso en el pasaje a producción y no en testing, es por que en testing lo compilaron con una herramienta que difiere a la que utilizaron para aplicarlo en el ambiente productivo. Esto es SUMAMENTE importante que siempre los archivos sean compilados en la misma herramienta. Yo recomiendo que sea en SQLPLUS,
Los dba estamos acostumbrados a utilizar muchas herramientas, en mi caso uso mucho ademas del sqlplus, el toad y el sqldeveloper. Por eso es importante que al momento de compilar un cambio en producción se hagan con sqlplus.
Por otro lado, es fundamental que antes de hacer un cambio se haga un backup de los objetos, en este caso hacer un EXPORT de las tablas era la solución, pero los chicos de producción no lo hicieron :(
Paso que utilice:
Yo tenia un ambiente para probar, en un unix. Entonces lo que hice fue transferirme el backup full de la noche anterior. Yo en mi caso, hago backups full todas las noches luego de la corrida de los procesos batch. En el día, cada 30 minutos hago archive log.
¿Como lo solucione? restaure el backup full, aplique mis archive log previos a este cambio, y realice un export/import de las tablas afectadas. Esta claro, que me hubiese ahorrado todo esto si tenia un export de las tablas previo al cambio, como lo mencione anteriormente.
Entonces, es importante que antes de cualquier cambio:
1- Se tome BACKUP así sea EXPORT, de tablas, esquemas, store procedures, etc, pero tener un resguardo de los cambios sobre los componentes que se modificaran.
2 - Se utilice la misma herramienta de compilación para todos los ambientes.
3 - En caso de incidentes, con el punto 1, restaurar a tiempo los objetos corruptos.
martes, 22 de septiembre de 2015
A tener en cuenta - Puntos claves para la administración de base de datos
Algunos puntos a tener en cuenta para una administración de base de datos:
Es importante, controlar todos los procesos que se ejecutan en nuestra base, si bien por algunos en particular nos suelen llamar y decirnos "el sistema esta lento" y en ese momento hacemos un monitorio sobre la base. Es muy importante, como ejercicio hacer frecuente los controles sobre por ejemplo: cuanto me consumen los query en mi servidor, cuantas conexiones inactivas tengo, ya que esto es un gran problema, o algún bloqueo que se produce en determinados momentos. Tambien las full scan son un gran dolor de cabeza. Esto es frecuente en nuestros sistemas.
Algunas consideraciones a tener en cuenta son:
Es importante, controlar todos los procesos que se ejecutan en nuestra base, si bien por algunos en particular nos suelen llamar y decirnos "el sistema esta lento" y en ese momento hacemos un monitorio sobre la base. Es muy importante, como ejercicio hacer frecuente los controles sobre por ejemplo: cuanto me consumen los query en mi servidor, cuantas conexiones inactivas tengo, ya que esto es un gran problema, o algún bloqueo que se produce en determinados momentos. Tambien las full scan son un gran dolor de cabeza. Esto es frecuente en nuestros sistemas.
Algunas consideraciones a tener en cuenta son:
- Tener habilitado el informe AWR
- Colocar alarmas o hacer verificaciones sobre el tamaño de tu tablespace.
- Validar el uso de recursos de tus procesos dentro del UNIX o de tu servidor.
- Tener una buena metodología de backup.
- Analizar las query que tienen mayor demora en devolver una salida.
- Verificar la recreación de indices, como una tarea periódica.
- Realizar el calculo de estadísticas periódicamente.
Suscribirse a:
Entradas (Atom)