Valores repetido en insert php

Tengo una página en la cual se pueden subir archivos

Pero quisiera validar y ponerle un mensaje de que si el nombre del archivo se repite no se guarde y muestre mensaje de favor de cambiar nombre del archivo.

Y estado intentando pero no he podido al final puse mi campo name como único y en mi consulta un ignore pero no creo que sea la mejor solución además que no logre que me salga mensaje de aviso que esta duplicado.

Espero me pudieran ayudar

Este es mi código

$conn = new PDO('mysql:host=localhost;dbname=base', 'user', '123') or die(mysql_error());
if(isset($_POST['submit'])!=""){
  $name=$_FILES['photo']['name'];
  $size=$_FILES['photo']['size'];
  $type=$_FILES['photo']['type'];
  $temp=$_FILES['photo']['tmp_name'];
  $us=$_SESSION['user_id']; 
  $caption1=$_POST['caption'];
  $link=$_POST['link'];
  move_uploaded_file($temp,"files/".$name);
$query=$conn->query("insert IGNORE into subir(name, us) values('$name','$us')");
if($query){
header("location: upload.php");
}
else{
 echo 'cambie de nombre';
}
}
?>

1 Respuesta

Respuesta
1

Para saber si el nombre existe usa un SELECT. Si la consulta no devuelve nada es que no existe, por lo tanto ejecutas el INSERT, de lo contrario muestras el mensaje.

De antemano muchas gracias por tu pronta respuesta y ayuda pero

Eh intentado con esto pero no me muestra ninguna información estoy un poco perdida en la comparación de datos y donde podría poner mi mi select

$conn = new PDO('mysql:host=localhost;dbname=base', 'user', '123') or die(mysql_error());
if(isset($_POST['submit'])!=""){
  $name=$_FILES['photo']['name'];
  $size=$_FILES['photo']['size'];
  $type=$_FILES['photo']['type'];
  $temp=$_FILES['photo']['tmp_name'];
  $us=$_SESSION['user_id']; 
  $caption1=$_POST['caption'];
  $link=$_POST['link'];
  move_uploaded_file($temp,"files/".$name);
            $query2=$conn->query("Select * from subir");
            while($row=$query->fetch()){
                $name1=$row['name'];
                }
            if ($name1 =  move_uploaded_file($temp,"files/".$name)) {
                    echo 'modficar nombre de archivo';
               }
    else{
$query=$conn->query("insert into subir(name, us) values('$name','$us')");
    }    
if($query){
header("location: domain.php");
}
else{
die(mysql_error());
}
}
?>

Gracias por tu ayuda

Disculpa la demora. A ver, lo ideal seria crear una función que chequee si el dato existe, pero bueno, para no complicarte tanto, te pondré un ejemplo y tratare de hacerlo lo más parecido posible a como lo tienes, pero yo tengo mi propio estilo y programo PHP con consultas preparadas, es como estoy acostumbrado. Dicho esto aquí va la idea más o menos, adáptalo:

$name = 'nombre del archivo';
try{
    $conn = new PDO('mysql:host=localhost;dbname=base', 'user', '123');
}catch(PDOException $e){
    echo "Error: " . $e->getMessage();
}
$stm = $conn->prepare('SELECT `nombre` FROM subir WHERE nombre = :nombre LIMIT 1');
$stm->execute(array(':nombre' => $name));
$result = $stm->fetch();
if($result){
    echo "Este nombre ya existe!";
}else{
    $stm = $conn->prepare('INSERT INTO subir (nombre, us) VALUES (:nombre, :us)');
    $stm->execute(array(':nombre' => $name, ':us' => $us));
}

Nota que de paso te lo hago con consulta preparada, que es lo que te comenté en tu otra pregunta, esto te evitará problemas de seguridad. Las consultas preparadas consiste en colocar "placeholders" (no se como llamo eso en español) en la consulta.

Otro consejo, no deberías poner los datos de conexión directamente en el código, me refiero a:

'mysql:host=localhost;dbname=base', 'user', '123'

Mi recomendación es tener esos datos en un archivo .ini y usar la función de PHP parse_ini_file

Andy M

Hola muchas gracias por seguir apoyándome

Si entiendo la mayoría del código pero lo que no me queda muy claro es de donde voy a sacar mi nombre temporal de archivo a subir

$name = 'nombre del archivo';
seria de aqui??   
$name= move_uploaded_file($temp,"files/".$name);
$name=$_FILES['photo']['name'];

y otra no me queda muy claro la funcion del limit 

Muchas gracias por tu tiempo y apoyo

Hi Vanessa,

El nombre del archivo lo tomaras del formulario que el usuario esta enviando, en realidad no conozco esa parte de tu proyecto. Hasta donde entiendo, el usuario va a subir un archivo, ese archivo tendrá un nombre, tu quieres saber si ese nombre ya existe, así que la variable $name la cargas con el nombre que el usuario esta enviando en ese momento, así que supongo que sí, es así como lo comentas.

LIMIT 1 es una costumbre mía por tema de seguridad. Se trata de una clausula en las consultas SELECT cuando tu esperas solamente un resultado, no mas.

Muchas ¡Gracias! Por todo

Le daré un leída de consultas preparadas para poder mi código .. y cualquier dudilla te estaría molestando

Excelente día

Un beso

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas