Cree un gestor de contenidos, básico para que el usuario pueda actualizar una sección de su web.
La web esta creada en flash y el formulario en php.
Primero el formulario guarda los datos en una base de datos Mysql,las imagenes se redimensionan automaticamente mediante php y gd, se genera un xml y la flash recoje los datos del xml y muestra los productos de oferta. todo funciona bien , pero al cabo de un tiempo , todo sigue funcionando menos las imagenes que no se redimensionan.
Cuando me sucede esto la unica solucion es eliminar toda la base de datos y volverla a crear logicamente volver a poner todas las ofertas.
Los scripts funcionan bien ya que si no de primeras ya me fallarian, si exporto la db, y cuando falla la importo, no me vale, tengo que eliminarla, volver a crear la tabla, la estructura y meter todos los datos desde cero.
Al final de productos.php, tengo una flash que es con la que navego por los registros de la DB y donde elimino y actualizo las ofertas (pero no las imagenes solo, solo el texto).
Vuelvo a insistir que si creo hoy la DB funciona todo correctamente y al cabo de un tiempo deja de funcionar la redimension de las imagens , pero los registros en la DB los guarda bien.
*** codigo del formulario llamado productos.php
Código :
<html>
<head>
<title>Productos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<style type="text/css">
<!--
#apDiv1 {
position:absolute;
left:20px;
top:26px;
width:245px;
height:300px;
z-index:1;
}
.style2 {color: #FFFF00}
.style4 {color: #FFFF00; font-weight: bold; }
.style5 {
color: #FFFFFF;
font-weight: bold;
}
.style6 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
}
.style7 {font-family: Verdana, Arial, Helvetica, sans-serif}
.style8 {font-size: medium}
.style9 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
font-weight: bold;
}
.style10 {font-size: x-small}
.style11 {font-size: small}
.style12 {font-size: 12px}
.style13 {font-size: 14px}
.style14 {
color: #FFFF00;
font-weight: bold;
font-size: 13px;
}
.style15 {font-size: 13px}
.style19 {font-size: 13px; font-weight: bold; }
.style20 {
font-size: 20px
}
.style21 {
margin-left: 39px;
margin-right: 33px;
margin-top: 44px;
}
.style22 {
font-size: 13px;
font-family: Verdana, Arial, Helvetica, sans-serif;
}
.style23 {
cursor:pointer;
}
-->
</style>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<table width="903" height="800" border="0" bordercolor="#FFFF00">
<tr bordercolor="#FFFF00" bgcolor="#666666">
<td height="20" colspan="2" valign="middle"><div align="center" class="style6 style20">
<p><u><font color="#FFFF00">Formulario para añadir nuevos productos</font></u></p>
</div></td>
</tr>
<tr bordercolor="#FFFF00" bgcolor="#666666">
<td bordercolor="#FFFF00" style="width: 464px; padding-right: 10px;">
<form action="" method="post" enctype="multipart/form-data" name="form" id="form">
<p align="right"> </p>
<p align="right" class="style12 style15">
<label> <span class="style4"><span class="style7">Adjuntar imágen</span></span><strong>
<input name="archivo" type=file class="style23" id="archivo" size="30">
</strong></label>
</p>
<p align="right" class="style19">
<label><span class="style2"><span class="style7">Categoría</span></span>
<input name="categoria" type="text" id="categoria" value="" size="45">
</label>
</p>
<p align="right" class="style19">
<label><span class="style2"><span class="style7">Descripción</span></span>
<textarea name="descripcion" cols="35" rows="2" wrap="physical" id="descripcion"></textarea>
</label>
</p>
<p align="right" class="style19">
<label><span class="style2"><span class="style7">Fabricante</span></span>
<input name="fabricante" type="text" id="fabricante" value="" size="45">
</label>
</p>
<p align="right" class="style19">
<label><span class="style2"><span class="style7">Calidad</span></span>
<input name="calidad" type="text" id="calidad" value="" size="45">
</label>
</p>
<p align="right" class="style19">
<label></label>
<label></label>
</p>
<p align="center" class="style19">
<label>
<span class="style2"><span class="style7">Observaciones<br>
</span></span>
<span class="style7">
<textarea name="observaciones" cols="45" rows="5" id="observaciones" onKeyDown="if(this.value.length > 100){this.value=this.value.substring(0,99); alert('Has superado el tamaño máximo permitido');}"></textarea>
</span>
</label>
</p>
<p align="center" class="style19 style23">
<label>
<span class="style2"><span class="style7">Marcar como nueva oferta</span></span>
<input name="oferta" type="checkbox" id="oferta" value="imagenes/splash2.jpg">
</label>
</p>
<p align="center" class="style19">
<label><span class="style2"><span class="style7">Precio</span></span>
<input name="precio" type="text" id="precio" value="" size="20">
</label>
</p>
<p align="center" class="style15 "><strong>
<input name="submit" type="submit" class="style23" value="Guardar">
<input name="Reset" type="reset" class="style23" value="Limpiar">
</strong></p>
<p align="center" class="style12 style15"> </p>
</form> </td>
<td width="447" height="10" valign="top">
<blockquote class="style21" style="width: 369px; height: 357px">
<p align="left"><span class="style7"><span class="style8"><span class="style10"><span class="style11"><span class="style12"><span class="style13"><span class="style14"><u>Instrucciones:</u></span></span></span></span></span></span></span></p>
<p align="left" class="style9"> Formatos válidos de imagenes <span class="style2">.jpg</span> y <span class="style2">.jpeg</span>.</p>
<p align="left" class="style9">Las imagenes se redimensionan automáticamente a la medida necesaria.</p>
<p align="left" class="style9">Las imagenes <span class="style2">no podrán superar los 2 Megas</span>.</p>
<p align="left" class="style9">El tiempo que tarda en guardar el nuevo producto depende del peso de la imágen subida y de la conexión del cliente</p>
<p align="left" class="style9">Una vez guardado el producto, aparecerá abajo de último, en caso de haber borrado uno aparecerá en el lugar del producto borrado.</p>
<p align="left" class="style9">En el menú <span class="style2">Navegar</span>, podrá buscar y borrar los productos.</p>
<p align="left" class="style9">Tenga en cuenta que el primer producto es el 0.</p>
</blockquote>
<p align="left" class="style15"> </p></td>
</tr>
<tr bordercolor="#FFFF00" bgcolor="#666666">
<td height="10" colspan="2" bordercolor="#FFFF00" bgcolor="#494949"><div align="center" class="style5">
<?php
$extensiones=array("jpg","jpeg");
$dbuser="david"; //usuario de la base de datos
$dbpass="hcebolla123"; // password para la base
$categoria=$_REQUEST["categoria"];
$descripcion=$_REQUEST["descripcion"];
$fabricante=$_REQUEST["fabricante"];
$calidad=$_REQUEST["calidad"];
$observaciones=$_REQUEST["observaciones"];
$precio=$_REQUEST["precio"];
$oferta=$_REQUEST["oferta"];
if (isset($_FILES['archivo']['name'])){ // si estoy subiendo el archivo o es la primera carga de la pagina
$path="imagenes/"; // path adonde la voy a guardar, en este caso mi_ubicacion_actual/imagenes
$path2="imagenes/";
$nombre=$_FILES['archivo']['name'];
$tamanio=$_FILES['archivo']['size'];
$tipo=$_FILES['archivo']['type'];
$var = explode(".","$nombre");
$num = count($extensiones);
$valor = $num-1;
$admitido=false;
for($i=0; $i<=$valor; $i++) {
if($extensiones[$i] == $var[1]) {
$admitido=true;//es una extension valida
break;
}
}
if ($admitido){
$link=mysql_connect("localhost",$dbuser,$dbpass);
mysql_select_db("ocasion");
$tamanio=round($tamanio/1024,0); //redondeo y paso a kb
$sql="Insert Into ofer (tipo,size,categoria,descripcion,fabricante,calidad,observaciones,precio,oferta,path2,path) values ('" .$tipo. "'," .$tamanio. ",'".$categoria. "','" .$descripcion. "','" .$fabricante. "','" .$calidad. "','" .$observaciones. "','" .$precio. "','" .$oferta. "','" .$path2. "','" .$path. "')";
mysql_query($sql);
$lastid=mysql_insert_id();
$path.=$lastid . "-" . $nombre;
$ql = "SELECT MAX(id) FROM ofer";
$resultado = mysql_query($ql);
$max_id=mysql_result($resultado,0);
$path2.= $max_id . "g-" . $nombre;
$sql="Update ofer set path='" . $path . "',path2='" . $path2 . "' Where id=$lastid";
mysql_query($sql);
if (is_uploaded_file($_FILES['archivo']['tmp_name']))
{
copy($_FILES['archivo']['tmp_name'], "$path");
copy($_FILES['archivo']['tmp_name'], "$path2");
require ("redimensionar_imagenes.php");
echo "<META HTTP-EQUIV='refresh' CONTENT='0; URL=$PHP_SELF'>";
require ("generar_xml.php");
?>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">El
archivo se ha subido correctamente al servidor.</font>
<?php
if (mysql_affected_rows($link)==0){?>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrio un error guardando
en la base de datos. </font>
<?php
}
}
else
{ ?>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Error
al subir el archivo.</font>
<?php
}
}else{?>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tipo
de archivo no admitido, debe ser .jpg ó .jpeg</font>
<?php
}
}
mysql_close($link);
?>
</div></td>
</tr>
<tr bordercolor="#FFFF00" bgcolor="#333333">
<td colspan="2" style="width: 900; height: 550"><div align="center">
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0','width','870','height','500','src','forma','quality','high','pluginspage','http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash','movie','forma' ); //end AC code
</script>
<noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="870" height="500">
<param name="movie" value="forma.swf">
<param name=quality value=high>
<embed src="forma.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="870" height="500"></embed>
</object></noscript>
<br>
</div></td>
</tr>
</table>
</body>
</html>
este a su vez llama a redimensionar.php y generar_xml.php
*** codigo redimensionar.php
Código :
<?php
$dbuser="david"; //usuario de la base de datos
$dbpass="hcebolla123"; // password para la base
$link=mysql_connect("localhost",$dbuser,$dbpass);
mysql_select_db("ocasion");
$sql = "SELECT MAX(path) FROM ofer";
$resultado = mysql_query($sql);
$max_id=mysql_result($resultado,0);
$origen= $max_id;
$sql2 = "SELECT MAX(path2) FROM ofer";
$resultado2 = mysql_query($sql2);
$max_id2=mysql_result($resultado2,0);
$origen2= $max_id2;
//$prefijo = substr(md5(uniqid(rand())),0,6);
//$destino="imagenes/".$prefijo."_".$origen;
$destino= $origen;
$destino2=$origen2;
$destino_temporal=tempnam("tmp/","tmp");
redimensionar_jpeg($origen, $destino_temporal, 150, 150, 100);
$destino_temporal2=tempnam("tmp/","tmp");
redimensionar_jpeg2($origen2, $destino_temporal2, 350, 250, 100);
// guardamos la imagen
$fp=fopen($destino,"w");
fputs($fp,fread(fopen($destino_temporal,"r"),filesize($destino_temporal)));
fclose($fp);
$fp2=fopen($destino2,"w");
fputs($fp2,fread(fopen($destino_temporal2,"r"),filesize($destino_temporal2)));
fclose($fp2);
function redimensionar_jpeg($img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
{
// crear una imagen desde el original
$img = ImageCreateFromJPEG($img_original);
// crear una imagen nueva
$thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);
// redimensiona la imagen original copiandola en la imagen
ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));
// guardar la nueva imagen redimensionada donde indicia $img_nueva
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
ImageDestroy($img);
/*
// Mostrar la nueva imagen
imagejpeg($thumb);
*/
}
unlink($destino_temporal);
function redimensionar_jpeg2($img_original2, $img_nueva2, $img_nueva_anchura2, $img_nueva_altura2, $img_nueva_calidad2)
{
// crear una imagen desde el original
$img2 = ImageCreateFromJPEG($img_original2);
// crear una imagen nueva
$thumb2 = imagecreatetruecolor($img_nueva_anchura2,$img_nueva_altura2);
// redimensiona la imagen original copiandola en la imagen
ImageCopyResized($thumb2,$img2,0,0,0,0,$img_nueva_anchura2,$img_nueva_altura2,ImageSX($img2),ImageSY($img2));
// guardar la nueva imagen redimensionada donde indicia $img_nueva
ImageJPEG($thumb2,$img_nueva2,$img_nueva_calidad2);
ImageDestroy($img2);
/*
// Mostrar la nueva imagen
imagejpeg($thumb);
*/
}
unlink($destino_temporal2);
mysql_close($link);
?>
*** codigo generar_xml.php
Código :
<?php
$dbuser="david"; //usuario de la base de datos
$dbpass="hcebolla123"; // password para la base
$link=mysql_connect("localhost",$dbuser,$dbpass);
mysql_select_db("ocasion");
$imagen = mysql_query("SELECT * FROM ofer ORDER BY id DESC") ;
$xml = fopen ("archivo_datos.xml", "w");
if (!$xml) {
echo "No se pudo abrir el archivo XML.";
exit;
}
fwrite ($xml, '<?xml version="1.0"' . '?' .'> <ofertas>');
while ($row = mysql_fetch_array($imagen)){
$contenidoxml = ' <imagenes nombre = "'. $row["path"] .'"';
$contenidoxml .=' categoria = "'. $row["categoria"] .'"';
$contenidoxml .=' descripcion = "'. $row["descripcion"] .'"';
$contenidoxml .=' fabricante = "'. $row["fabricante"] .'"';
$contenidoxml .=' calidad = "'. $row["calidad"] .'"';
$contenidoxml .=' observaciones = "'. $row["observaciones"] .'"';
$contenidoxml .=' oferta = "'. $row["oferta"] .'"';
$contenidoxml .=' path2 = "'. $row["path2"] .'"';
$contenidoxml .=' precio = "'. $row["precio"] .'"/>';
fwrite ($xml, $contenidoxml);
}
fwrite ($xml, " </ofertas> ");
if (fclose ($xml)){
//echo "Archivo escrito con exito";
} else {
exit ("Error escribiendo el XML");
}
mysql_close($link);
?>
</node>
*** codigo de la DB ocasion.(en path se guarda la ruta de la imagen de 150x150 y en path2 de guarda la ruta de la imagen de 350x250
Código :
-- Base de datos: `ocasion` -- -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `ofer` -- CREATE TABLE `ofer` ( `id` int(11) NOT NULL auto_increment, `tipo` varchar(100) NOT NULL, `size` int(11) NOT NULL , `path` varchar(400) default NULL, `categoria` varchar(100) NOT NULL, `descripcion` varchar(400) NOT NULL, `fabricante` varchar(100) NOT NULL, `calidad` varchar(100) NOT NULL, `observaciones` varchar(500) NOT NULL, `precio` varchar(100) NOT NULL, `oferta` varchar(300) default NULL, `path2` varchar(400) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; --
