Menú Principal

Subida php

Iniciado por jalbtercero, 16 Marzo 2016, 12:12 PM

0 Miembros y 3 Visitantes están viendo este tema.

jalbtercero

tengo este php para subir archivos :

Código (php) [Seleccionar]

<?php
session_start
();
?>

<?php
require("connect_db2.php");
$usuario $_SESSION["usuario"];
$sql=mysqli_query($link,"SELECT * FROM login WHERE username='$usuario'");
$fila=mysqli_fetch_array($sql);
if(
$fila['baneado']=="true") {
      echo 
'<script language="javascript">location.href="baneado.html"</script>';
} else {

}
mysqli_close($link);
?>

<?php
if (isset($_SESSION["usuario"])) {

} else {
echo '<script language="javascript">location.href="log.html"</script>';
}
?>

<html>
<head><link rel="stylesheet" type="text/css" href="style4.css"></head>
<body>
<center>
<p>Porfavor no utilices el boton de retroceso, utiliza el boton de inicio en este formulario</p>
<form class="uno" enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="250000000" />
Elige el Archivo a Subir:
<input name="archivo-a-subir" type="file" id="botones"/><br>

<input type="text" id="user" placeholder="Descripcion" name="desc" required/>
<input type="submit" value="Subir Archivo"name="boton" id="botones"/>
<input type="button" value="Inicio" name="nada" id="botones" onclick="location.href='inicio.html'"/>
</form>
</center>
<center>
<br>
<br>
<div>
<?php
if(isset($_POST['boton'])) {
      if (((
$_FILES["archivo-a-subir"]["type"] == "application/vnd.oasis.opendocument.text")
      || (
$_FILES["archivo-a-subir"]["type"] == "application/vnd.oasis.opendocument.spreadsheet")
      || (
$_FILES["archivo-a-subir"]["type"] == "application/octet-stream"))
      && (
$_FILES["archivo-a-subir"]["size"] < 250000000))
 {

$target_path "subidas/";
$target_path $target_path basename$_FILES['archivo-a-subir']['name']);
if(move_uploaded_file($_FILES['archivo-a-subir']['tmp_name'], $target_path))
{
                require(
"connect_db.php");
                
session_start();
                
$nombre=$_SESSION["usuario"];
                
$desc=$_POST['desc'];
                
$direccion='subidas/'.basename$_FILES['archivo-a-subir']['name']);
                
$pass=rand(0,1000000000);
                
mysql_query("INSERT INTO archivos VALUES('','$nombre','$desc','$direccion','$pass')");
                
mysql_close($link);
echo "El archivo "basename$_FILES['archivo-a-subir']['name'])." ha sido subido exitosamente!";
}
else
{
echo "Hubo un error al subir tu archivo! Por favor intenta de nuevo.";
}





} else {
echo "El tamaño del archivo no esta permitido o el archivo esta prohibido";
}





 


}



?>

</div>
</center>
</body>
</html>



pero en la base de datos las variables $nombre, $desc,$direccion me devuelven un 0 es decir en la base de datos estos campos son 0

gAb1

Hola jalbtercero

Antes de nada, te recomiendo que envuelvas todo el contenido protegido, incluido el html, dentro del primer if, ya que javascript es un lenguaje cliente y puede ser detenido facilmente dando lugar a que se muestre el formulario sin haber iniciado sesión.

Para solucionar este tipo de problemas lo mejor es empezar haciendo un poco de debug, ya que en la mayoría de los casos nos muestra donde tenemos el problema. Lo normal es comprobar lo que imprimen las variables para ver si es lo que debería ser:

Código (php) [Seleccionar]
echo "INSERT INTO archivos VALUES('','$nombre','$desc','$direccion','$pass')";

En cuanto a la estructura de las query de MySQL es recomendable especificar el nombre de las columnas que vas a insertar (suponiendo que la columna id es auto):

Código (sql) [Seleccionar]
INSERT INTO archivos (nombre, `desc`, direccion, pass) VALUES ('', '', '', '');

Si la columna se llama desc hay que escaparla ya que es una palabra reservada de mysql.

Código (php) [Seleccionar]
echo "INSERT INTO archivos (nombre, `desc`, direccion, pass) VALUES('$nombre','$desc','$direccion','$pass')";

Si alguna de esas variables esta vacía y la columna es NOT NULL no se insertará nada (te lo digo por experiencia própia).

jalbtercero

#2
Cita de: gAb1 en 17 Marzo 2016, 05:07 AM
Hola jalbtercero

Antes de nada, te recomiendo que envuelvas todo el contenido protegido, incluido el html, dentro del primer if, ya que javascript es un lenguaje cliente y puede ser detenido facilmente dando lugar a que se muestre el formulario sin haber iniciado sesión.

Para solucionar este tipo de problemas lo mejor es empezar haciendo un poco de debug, ya que en la mayoría de los casos nos muestra donde tenemos el problema. Lo normal es comprobar lo que imprimen las variables para ver si es lo que debería ser:

Código (php) [Seleccionar]
echo "INSERT INTO archivos VALUES('','$nombre','$desc','$direccion','$pass')";

En cuanto a la estructura de las query de MySQL es recomendable especificar el nombre de las columnas que vas a insertar (suponiendo que la columna id es auto):

Código (sql) [Seleccionar]
INSERT INTO archivos (nombre, `desc`, direccion, pass) VALUES ('', '', '', '');

Si la columna se llama desc hay que escaparla ya que es una palabra reservada de mysql.

Código (php) [Seleccionar]
echo "INSERT INTO archivos (nombre, `desc`, direccion, pass) VALUES('$nombre','$desc','$direccion','$pass')";

Si alguna de esas variables esta vacía y la columna es NOT NULL no se insertará nada (te lo digo por experiencia própia).

Aprecion las ayudas y corregire algunas cosas, gracisas, pero lo que no entiendo es que en mi anterior pagina funcionaba perfectamente sin problemas, pero me he comprado un nuevo dominio y he pedido que me lo trasladen y asi lo hicieron, sin cambios ni nada, no he tocado la sintxis de este php, pero no funciona, no hace falta decir que he cambiado los datos de conexion a mi base de datos. Si me pudieras aclarar esto, Gracias


EDITO: He modificado el codigo incluyendo las columnas donde se tiene que meter la informacion incluyendo la culamna id dejandola vacias ('') ya que es autoincrementable, y no funciona. Y la columna no se llama "desc" es "descripcion".

EDITO2: Bueno de echo ahora con esta midificacion, ni si quiera se registra informacion, es decir antes al menos habiean 0 pero ahora nada de nada:

La parte donde meto los valores:

Código (php) [Seleccionar]

mysql_query("INSERT INTO archivos ('id','nombre','descripcion','archivo','pass') VALUES('','$nombre','$desc','$direccion','$pass')");



He probado de todo y no funciona.... no se que hacer....

gAb1

¿Hiciste el "echo" que te dije? ¿Se imprime la query y funciona si la usas directamente en tu base de datos?

Como ya te dije, no es necesario que incluyas la columna id, ya que es automatica, puedes quitarla de la query. Los nombres de las columnas no necesitan estar entre comillas, en cuanto a los valores si son enteros (int) no debes ponerlos entre comillas, como el id estas poniendo el valor entre comillas. Debería ser de la siguiente manera:

Código (php) [Seleccionar]
mysql_query("INSERT INTO archivos (nombre, descripcion, archivo, pass) VALUES('$nombre', '$desc', '$direccion', '$pass')");

Comprueba si funciona de esta manera.

Si ese no es el problema, entonces debe estar en la estructura de la tabla, comprueba que este todo bien, el tipo de contenido (int, char, varchar...) y el tamaño maximo.

Hay que comprobarlo todo ya que casi siempre son errores muy simples que pasan desapercibidos.

Y como cuestión de seguridad, te recomiendo que empieces a usar mysqli en lugar de mysql. Con mysqli tendrás la posibilidad de usar prepared statements para tener una seguridad decente cuando trabajas con user input. Si no necesitas usar user input no hay problema en usar query() pero con mysqli.

Más que nada porque, no solo se dejo de dar soporte, si no porque desde php 5.5 ya no existe la función mysql(). Y es importante no usar versiones tan antiguas de php.