elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  FORO en PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: FORO en PHP  (Leído 1,849 veces)
inquilin@19

Desconectado Desconectado

Mensajes: 81



Ver Perfil
FORO en PHP
« en: 10 Enero 2012, 12:44 pm »

Estoy haciendo un foro en php, ya tengo todo lo que queria, ahora me falta que, al responder a un post, pueda subir un archivo, tengo los scripts para ello pero no sé como hacer que, al dar a subir archivo y la respuesta me salga en la lista de posts la respuesta y el archivo aparte de que, cuando lo borro, tiene que borrarme también el archivo que se insertó con el post pero no me lo hace, aquí pongo los scripts para contestar el post y subir el archivo.

Código:
<?php
session_start();
$mysqli = mysqli_connect("localhost", "root", "", "foro_2");
if (!$_POST) {
if (!isset($_GET["id_post"])) {
header("Location: lista_temas.php");
exit;
}
$verify_sql = "SELECT ft.id_tema, ft.titulo_tema FROM posts
AS fp LEFT JOIN temas AS ft ON fp.id_tema =
ft.id_tema WHERE fp.id_post = '".$_GET["id_post"]."'";
$verify_res = mysqli_query($mysqli, $verify_sql)
or die(mysqli_error($mysqli));
if (mysqli_num_rows($verify_res) < 1) {
header("Location: lista_temas.php");
exit;
} else {
while($topic_info = mysqli_fetch_array($verify_res)) {
$id_tema = $topic_info['id_tema'];
$titulo_tema = stripslashes($topic_info['titulo_tema']);
}
echo "
<html>
<head>
<title>Responde a ".$titulo_tema."</title>
</head>
<body>
<h1>Responde a $titulo_tema</h1>
<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">
<p><strong>Texto del post</strong><br/>
<textarea name=\"texto_post\" rows=\"8\" cols=\"40\"
wrap=\"virtual\"></textarea>
<input type=\"hidden\" name=\"id_tema\" value=\"$id_tema\">
<p><input type=\"submit\" name=\"submit\" value=\"Añadir post\"></p>
</form>
</body>
</html>";
echo "
<html>
<body>
<form action=\"subida_archivo.php\" enctype=\"multipart/form-data\" method=\"POST\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"500\" />
<p><strong>Selecciona un archivo</strong>
<input type=\"file\" name=\"fileupload\" /></p>
<p><input type=\"submit\" name=\"submit\" value=\"Añadir post y archivos\"></p>
</form>
</body>
</html>";
}
mysqli_free_result($verify_res);
} else if ($_POST) {
if ((!$_POST["id_tema"]) || (!$_POST["texto_post"])) {
header("Location: lista_temas.php");
exit;
}
$obtener_email_sql="SELECT email FROM sesion WHERE
id_sesion='".session_id()."'";
$obtener_email_res = mysqli_query($mysqli, $obtener_email_sql) or
die(mysqli_error($mysqli));
$ret=mysqli_fetch_array($obtener_email_res);
$email=$ret['email'];
if ($email=="") {
header("Location: lista_temas.php");
exit;
}
$add_post_sql = "INSERT INTO posts (id_tema,texto_post,
fecha_creacion,email,creacion_tema) VALUES
('".$_POST["id_tema"]."',
'".$_POST["texto_post"]."',
now(),'".$email."','NO')";
$add_post_res = mysqli_query($mysqli, $add_post_sql)
or die(mysqli_error($mysqli));
//cerrar conexión
mysqli_close($mysqli);
header("Location: ver_tema.php?id_tema=".$_POST["id_tema"]);
exit;
}
?>

Y este es el codigo de añadir el archivo
Código:
<?php
$file_dir = "C:\\xampp\\htdocs\\EjerciciosWeb\\Foro_2\\Archivos_subidos\\";
foreach($_FILES as $file_name => $file_array) {
echo "Localizacion: ".$file_array["tmp_name"]."<br />\n";
echo "Nombre: ".$file_array["name"]."<br />\n";
echo "Tipo: ".$file_array["type"]."<br />\n";
echo "Tamaño: ".$file_array["size"]."<br />\n";

if (is_uploaded_file($file_array["tmp_name"])) {
move_uploaded_file($file_array["tmp_name"],
"$file_dir/".$file_array["name"]) or die ("No se pudo copiar");
echo "Archivo movido!<br/>";
echo "Ya está, ahora puedes<a href=\"lista_temas.php\">volver a los temas</a>";
}
 }
?>

Alguien me puede ayudar? Me he atascado en esa parte y no se como seguir
Muchas gracias de antemano :)


En línea

Sólo mirando al frente se puede seguir, llevar lastres en el camino no te lo permiten
cassiani


Desconectado Desconectado

Mensajes: 978


« Anterior | Próximo »


Ver Perfil WWW
Re: FORO en PHP
« Respuesta #1 en: 10 Enero 2012, 15:17 pm »

se supone que cada respuesta al ser una publicación nueva, tiene como mínimo:
Código:
tabla posts
id_post pk
id_tema fk -- id del tema al cual pertenece (esa es otra tabla obviamente)

por ejemplo, dependiendo de cuantos archivos permitirás adjuntar al post, veo dos opciones:


1.- si es uno solo: simplemente le agregas un nuevo campo a tu tabla posts que almacene el path/dirección/ruta del archivo que se adjunto:
Código:
tabla posts
id_post pk
id_tema fk
path_adjunto

cuando inicies el proceso que eliminara dicho post, antes de hacerlo, consulta el path del archivo, verificas la existencia del mismo, lo eliminas y luego eliminas el post.

2.- si es más de 1 archivo: si vas a permitir que en un mismo post se adjunten varios archivos (debería haber un límite), entonces crea una tabla aparte, por ejemplo "archivos_adjuntos".

Código:
archivos_adjuntos
id_archivo pk
id_post fk
path_adjunto

partiendo de la idea de que un post puede tener varios archivos adjuntos. Antes de eliminar el registro de la tabla posts, debes consultar la tabla archivos_adjuntos donde archivos_adjuntos.id_post sea igual a posts.id_post y por cada fila debes obtener el path del archivo adjuntado para ese post, verificar su existencia y eliminarlo, luego eliminar ese registro y al finalizar con todos los archivos, eliminar el post.


« Última modificación: 10 Enero 2012, 15:29 pm por cassiani » En línea

inquilin@19

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: FORO en PHP
« Respuesta #2 en: 10 Enero 2012, 21:28 pm »

Haber si me aclaro, la cosa es que cree una nueva tabla donde guarde los archivos que subo para luego hacer un SELECT para mostrarles?
En línea

Sólo mirando al frente se puede seguir, llevar lastres en el camino no te lo permiten
cassiani


Desconectado Desconectado

Mensajes: 978


« Anterior | Próximo »


Ver Perfil WWW
Re: FORO en PHP
« Respuesta #3 en: 11 Enero 2012, 14:08 pm »

no, los archivos seguirías guardándolos en tu directorio uploads por ejemplo, con un nombre que tu asignas al momento de moverlos ahí, y en la base de datos guardas el path del archivo que subiste. Es solo una idea, no tiene que ser exactamente así.
« Última modificación: 11 Enero 2012, 14:09 pm por cassiani » En línea

inquilin@19

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: FORO en PHP
« Respuesta #4 en: 13 Enero 2012, 17:07 pm »

Bien, ya conseguí subir los archivos, ahora el problema que se me presenta es cómo borrarlos, he probado con la función unlink pero no me hace nada, solo me borra el post de la base de datos pero no el archivo de la carpeta.
Aquí dejo el código que tengo para borrar los posts, ojalá podáis ayudarme
Código:
<?php
session_start();
$mysqli = mysqli_connect("localhost", "root", "", "foro_2");
$id_tema_sql="SELECT id_tema FROM posts WHERE
id_post='".$_GET["id_post"]."'";
$id_tema_res = mysqli_query($mysqli, $id_tema_sql) or
die(mysqli_error($mysqli));
$ret=mysqli_fetch_array($id_tema_res);
$id_tema=$ret['id_tema'];
$primer_post_sql="SELECT id_post FROM posts WHERE
id_tema='".$id_tema."' AND creacion_tema LIKE 'SI'";
$primer_post_res=mysqli_query($mysqli, $primer_post_sql) or
die(mysqli_error($mysqli));
$ret=mysqli_fetch_array($primer_post_res);
$id_post2=$ret['id_post'];
if($_GET["id_post"]==$id_post2){
header("Location:
ver_tema.php?id_tema=".$id_tema."");
exit;
} else{
$obtener_email_sql="SELECT email FROM sesion WHERE
id_sesion='".session_id()."'";
$obtener_email_res = mysqli_query($mysqli, $obtener_email_sql)
or die(mysqli_error($mysqli));
$ret=mysqli_fetch_array($obtener_email_res);
$email=$ret['email'];
if ($email=="") {
header("Location: lista_temas.php");
exit;
} else if($email=='admin@foro.es'){
$del_post_sql = "DELETE FROM posts WHERE
id_post='".$_GET["id_post"]."'";
$del_post_res = mysqli_query($mysqli, $del_post_sql) or
die(mysqli_error($mysqli));
}else{
$comprobar_usuario_sql="SELECT id_post,email FROM posts
WHERE email='".$email."' AND id_post='".$_GET["id_post"]."'";
$comprobar_usuario_res=mysqli_query($mysqli,$comprobar_usuario_sql) or die (mysqli_error($mysqli));
$ret=mysqli_fetch_array($comprobar_usuario_res);
$email2=$ret['email'];
$file=$ret['file'];
if (($email2=='') || ($file <> '')) {
header("Location: lista_temas.php");
exit;
} else {
$del_post_sql = "DELETE FROM posts WHERE
id_post='".$_GET["id_post"]."'";
$del_post_res = mysqli_query($mysqli, $del_post_sql) or
die(mysqli_error($mysqli));
[i][b]$borrar_file = "C:\\xampp\\htdocs\\Ejer\\Foro\\uploads\\".$file_array["name"]."";
unlink($borrar_file);[/b][/i]
}
}
}
}
mysqli_close($mysqli);
header("Location: ver_tema.php?id_tema=".$id_tema."");
exit;
?>
En negrita he puesto el código de la funcion para borrar archivos, la que no funciona
Gracias de antemano, un saludo
:)
En línea

Sólo mirando al frente se puede seguir, llevar lastres en el camino no te lo permiten
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines