Foros del Web » Programando para Internet » PHP »

Cual es la manera correcta de hacer este codigo

Estas en el tema de Cual es la manera correcta de hacer este codigo en el foro de PHP en Foros del Web. Hola: El caso es una entrevista. En la base de datos debo tener una tabla llamada entrevistas con los siguientes campos: id entrevistado quien respuesta_1 ...
  #1 (permalink)  
Antiguo 12/04/2006, 12:24
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 15 años
Puntos: 0
Cual es la manera correcta de hacer este codigo

Hola:

El caso es una entrevista. En la base de datos debo tener una tabla llamada entrevistas con los siguientes campos:

id
entrevistado
quien
respuesta_1
respuesta_2
respuesta_3
respuesta_4
respuesta_5
respuesta_6
respuesta_7

Ademas, al subir la entrevista, debe subirse tambien 2 o 3 fotos del entrevistado. Como se haria?

1.- En la misma tabla expuesta anteriormente, incluir archivo_binario, archivo_nombre, archivo_peso, archivo_tipo (uso el codigo de este foro para subir a la bd archivos blog y tambien el de las miniaturas)???????

2.- Crear una tabla aparte tipo entrevistas_fotos solo con las imagenes del entrevistado, tipo: id, entrevistado, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo????????????

ACTUALMENTE USO LA SEGUNDA OPCION, PERO NO ESTOY SEGURO SI ES CORRECTO...

La idea seria en el mismo form, subir las los datos del entrevistado y todas sus fotos a la vez.

Actualmente he estado haciendo varias pruebas pero siempre me da errores.. o no me muestra la foto del entrevistado, o si tengo 3 campos para subir fotos y subo solo 2, se me crea un campo en la tabla vacio con el nombre del entrevistado.

Necesito terminar este codigo pero ya lo he intentado todo. Les pongo todos los scripts implicados a ver si pueden ayudarme a corregirlo y perfeccionarlo.

Formulario: form_entrevista.php
Código PHP:
<!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=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="upload_entrevista.php" method="post" enctype="multipart/form-data" name="entrevista" id="entrevista">
  <p>NOMBRE:
    <input name="entrevistado" type="text" id="entrevistado" />
  </p>
  <p>QUIEN:
    <input name="quien" type="text" id="quien" />
  </p>
  <p>RESPUESTA 1 :
    <input name="respuesta_1" type="text" id="respuesta_1" />
</p>
  <p>RESPUESTA 2:
    <input name="respuesta_2" type="text" id="respuesta_2" />
</p>
  <p>RESPUESTA 3:
    <input name="respuesta_3" type="text" id="respuesta_3" />
</p>
  <p>RESPUESTA 4:
    <input name="respuesta_4" type="text" id="respuesta_4" />
</p>
  <p>RESPUESTA 5:
    <input name="respuesta_5" type="text" id="respuesta_5" />
</p>
  <p>RESPUESTA 6:
    <input name="respuesta_6" type="text" id="respuesta_6" />
</p>
  <p>RESPUESTA 7:
    <input name="respuesta_7" type="text" id="respuesta_7" />
</p>
<?php
   $nfotos
=3;
   for(
$i=1;$i<=$nfotos;$i++)
   {
?> 
<p>FOTO <?php echo $i;?>: <input type="file" name="<?php echo 'archivo'.$i;?>" />  </p>  
<?php
   
}
?>
  <p>
    <input type="submit" name="Submit" value="Enviar" />
  </p>
</form>
</body>
</html>
El que sube a la base de datos: upload_entrevista.php
Código PHP:
<?php
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente.
//comprueba si al menos hay un archivo 
if (empty($_FILES['archivo1']['name'])){ 
header("location: form_entrevista.php?proceso=falta_indicar_fichero"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","xxxxxx","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("xxxxxx",$conexion) or die("No se puede seleccionar BD");

//insertamos los datos en la BD. 
   
$consulta_insertar "INSERT INTO entrevistas (id, entrevistado, quien, respuesta_1, respuesta_2, respuesta_3, respuesta_4, respuesta_5, respuesta_6, respuesta_7) VALUES ('', '$entrevistado', '$quien', '$respuesta_1', '$respuesta_2', '$respuesta_3', '$respuesta_4', '$respuesta_5', '$respuesta_6', '$respuesta_7')"
   
mysql_query($consulta_insertar,$conexion) or die(mysql_error());

$nfotos=3;
for(
$i=1;$i<=$nfotos;$i++)
{
   
$myfile="archivo$i";
   
// archivo temporal (ruta y nombre). 
   
$binario_nombre_temporal=$_FILES[$myfile]['tmp_name']; 

   
// leer del archvio temporal .. el binario subido. 
   // "rb" para Windows .. Linux parece q con "r" sobra ... 
   
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

   
// Obtener del array FILES (superglobal) los datos del binario .. nombre, tamaño y tipo. 
 
   
$binario_nombre=$_FILES[$myfile]['name'];  
   
$binario_peso=$_FILES[$myfile]['size']; 
   
$binario_tipo=$_FILES[$myfile]['type'];
   
  
$consulta_insertar_dos "INSERT INTO entrevistas_fotos (id, entrevistado, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$entrevistado', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
   
mysql_query($consulta_insertar_dos,$conexion) or die(mysql_error());
}
header("location: form_entrevista.php");  // si ha ido todo bien 
exit; 
?>
El que deberia mostrar la reseña a la entrevista, en el home: inicio.php
Código PHP:
<?
//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","xxxxxx","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("xxxxxx",$conexion) or die("No se puede seleccionar BD");
    
$sql="SELECT * FROM entrevistas_fotos ORDER BY id DESC LIMIT 0,1"
$result=mysql_query($sql);
 
while(
$row=mysql_fetch_array($result)) 
{
 
echo 
"<div align='center'>";
echo 
"<img src=\"thumbs_entrevista_home.php?id=$row[id]\"><br><br>";

}
    
$sql2="SELECT DISTINCT * FROM entrevistas ORDER BY id DESC LIMIT 0,1"
$result2=mysql_query($sql2);
 
while(
$row=mysql_fetch_array($result2)) 
{

echo 
"<div align='center'>";
echo 
"<font class='title2'>".$row[entrevistado]."</font><br><br>";
echo 
"<font class='body'>".$row[quien]."</font><br>";

}
?>
El de las miniaturas: thumbs_entrevista_home.php
Código PHP:
<?php  

if(isset($_GET['id'])) { 

    
$conexion mysql_connect("localhost","xxxxxx","123456") or die("No se pudo realizar la conexion con el servidor."); 
    
mysql_select_db("xxxxxx",$conexion) or die("No se puede seleccionar BD");
    
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM entrevistas_fotos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario");
    
$type mysql_result($consulta,0,"archivo_tipo"); 

    
// Envio cabeceras al navegador 
    
Header ("Content-type: $type"); 

    
// Generar el thumbnail: 

    // Se crea la imagen desde el campo binario de la BD 
    
$img imagecreatefromstring($imagen); 

    
// Tamaño del Thumbnail 
    
$picsize 100
     
    
// Se obtienen los datos del ancho y alto de la imagen. 
    
$new_w imagesx($img); 
    
$new_h imagesy($img); 

    
// Se calcula la relación alto/ancho 
    
$aspect_ratio $new_h $new_w
     
    
// Se ajusta al nuevo tamaño 
    
$new_w $picsize
    
$new_h abs($new_w $aspect_ratio); 

    
// Se crea la mascara de la imagen nueva 
    
$dst_img ImageCreateTrueColor($new_w,$new_h); 

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen. 
     
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG 
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen. 
    
imagejpeg($dst_img,'',100); 


?>
Asi como lo tengo ahora, se me muestra en el home, el nombre del entrevistado, el campo quien que es una pequeña descripcion de su trabajo y ya, la foto nada que se ve.

En el home, al hacer click en un enlace, ven la entrevista completa en la pagina entrevistas.php pero ese ya es otro cuento...
  #2 (permalink)  
Antiguo 15/04/2006, 05:48
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Ya que lo mencionas, tu ejemplo es perfecto para ilustrar la forma incorrecta de hacerlo.

Cada tabla debería ser un tanto 'autónoma', debe representar algo concreto.

Claro que la normalización de bases de datos es en realidad un arte, el benenficio dependerá de tu aplicación en concreto, pero evidentemente tienes algunos errores graves.

No tengo datos de todos tus valores, pero un ejemplo así rápido podría ser el siguiente:

TABLA ENTREVISTADO
entrevistado_id
nombre
apellido
telefono

TABLA FOTOGRAFIA
foto_id
nombre
tipo_archivo
tamano

TABLA RESPUESTAS
respuesta_id
respuesta_numero (varía del 1 al 7 o tantas como sean)
respuesta_texto
entrevistado_id (indica el id de la persona a quien pertenece la resp)


De hecho, dibujando las tablas en papel es más fácil identificar las relaciones entre las entidades (las tablas). Un cursillo rápido de normalización de bases de datos te daría las herramientas que necesitas.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 15/04/2006, 16:54
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 15 años
Puntos: 0
gracias... seguire intentando y tomare en cuenta tu sugerencia
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 07:39.