Tema para preguntas random a Chatgpt 🤖

  • Autor Autor Carlos Arreola
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
$fileType = $_FILES['fotoshop']['type'][$key];
$target_path = '';

// Manejo de videos
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);

$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video

if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa

// Comando para convertir y comprimir el video
$compressed_path = 'upload/compressed' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress); // Ejecutar el comando FFmpeg para compresión

unlink($target_path); // Borrar el video original

// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
break; // Salir del bucle
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
} else {
// Enviar error en formato JSON
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit; // Terminar la ejecución
}
}
}
// Manejo de imágenes (jpeg, png, jpg)
elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
$target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
if (move_uploaded_file($tmp_name, $target_path)) {
// Si la categoría es "livs", solo permitimos un archivo
if ($_POST['category'] === "livs") {
// Asignamos directamente el archivo a la primera posición de $uploaded_files
$uploaded_files[0] = $target_path; // Agregar imagen a la lista
break; // Salir del bucle después de subir un archivo
} else {
// Para otras categorías, se permiten múltiples archivos
if (count($uploaded_files) < 20) { // Verifica que no haya más de 3 archivos
$uploaded_files[] = $target_path; // Agregar imagen a la lista
}
}
}
}
}
if (count($uploaded_files) > 0) {
if (isset($_POST['category']) && $_POST['category'] === 'livs') {
$stricted = 'livs'; // Solo si hay un archivo y la categoría es 'livs'
} else {
$stricted = 'post'; // Para múltiples archivos o si la categoría no es 'livs'
}
} else {
if (isset($_POST['category']) && $_POST['category'] === 'share') {
$stricted = 'share';
}else{
$stricted = 'post';
}
}



// Procesar el resto de tu código para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}
}
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
aqui todo esta bien?
Tu código PHP parece bastante completo y realiza varias funciones para manejar subidas de archivos, procesar imágenes y registrar información en una base de datos. Sin embargo, hay algunas consideraciones y posibles mejoras a tener en cuenta:

### Recomendaciones y Consideraciones:

1. Verificación de Errores de Carga:
Antes de procesar cada archivo, asegúrate de verificar si hay errores en la carga con $_FILES['fotoshop']['error'][$key]. Esto te ayudará a identificar problemas específicos de la carga de archivos.

Insertar CODE, HTML o PHP:
php
   if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
       echo json_encode(['error' => 'Error en la carga del archivo']);
       exit;
   }

2. Escapado de Variables:
Siempre utiliza mysqli_real_escape_string() al manejar datos de entrada para proteger tu aplicación contra inyecciones SQL.

3. Rutas de Archivos:
asegúrate de agregar "/" al inicio de las rutas de preview_path y compressed_path para evitar problemas en la ruta.

Insertar CODE, HTML o PHP:
php
   $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Añadir '/' 
   $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Añadir '/'

4. Validar Tipos de Archivos:
Considera usar in_array() para validar tipos de archivo en lugar de múltiples condiciones if.

Insertar CODE, HTML o PHP:
php
   $valid_image_types = ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'];
   if (in_array($fileType, $valid_image_types)) {
       // Manejo de imágenes
   }

5. Limpieza del Código:
Evita repetir el código para asignar $stricted. Podrías simplificarlo.

Insertar CODE, HTML o PHP:
php
   if (count($uploaded_files) > 0) {
       $stricted = ($_POST['category'] === 'livs') ? 'livs' : 'post';
   } elseif (isset($_POST['category']) && $_POST['category'] === 'share') {
       $stricted = 'share';
   } else {
       $stricted = 'post';
   }

6. Comprobar el Éxito de las Consultas SQL:
Siempre es bueno comprobar si las consultas SQL se ejecutan correctamente, en caso contrario, puedes registrar el error.

Insertar CODE, HTML o PHP:
php
   if (!mysqli_query($conexion, $tu_consulta)) {
       echo json_encode(['error' => mysqli_error($conexion)]);
       exit;
   }

7. Limpieza de Contenido del Mensaje:
Tu método de limpieza de contenido en $mensaje es un poco complicado. Asegúrate de entender qué caracteres deseas eliminar o reemplazar y si hay formas más simples de lograr lo mismo.

8. Finaliza el Script Adecuadamente:
Asegúrate de que solo envíes la respuesta JSON al final del script y que no haya salidas antes de eso.

9. Uso de JSON:
Al final de tu script, asegúrate de que todas las salidas JSON sean también apropiadas al error (en caso de no subir archivos).

### Ejemplo de resultado después de hacer algunas de estas mejoras:

Aquí tienes un fragmento con algunas de las recomendaciones aplicadas:

PHP:
// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Comprueba errores en la carga
        if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
            echo json_encode(['error' => 'Error en la carga del archivo']);
            exit;
        }

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video
                
                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Ruta para la preview
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview); // Ejecutar el comando FFmpeg para vista previa
                    
                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress); // Ejecutar el comando FFmpeg para compresión
                    
                    unlink($target_path); // Borrar el video original
                    
                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            }
        } 
        // Verificación de imágenes
        elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
            ...
        }
    }
}
// Agregar código para insertar en la base de datos

// Respuesta final
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);

Estas mejoras deben ayudar a que tu script sea más robusto y fácil de mantener. Si tienes más preguntas o necesitas más ayuda, ¡dímelo!
 
Tu código PHP parece bastante completo y realiza varias funciones para manejar subidas de archivos, procesar imágenes y registrar información en una base de datos. Sin embargo, hay algunas consideraciones y posibles mejoras a tener en cuenta:

### Recomendaciones y Consideraciones:

1. Verificación de Errores de Carga:
Antes de procesar cada archivo, asegúrate de verificar si hay errores en la carga con $_FILES['fotoshop']['error'][$key]. Esto te ayudará a identificar problemas específicos de la carga de archivos.

Insertar CODE, HTML o PHP:
php
   if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
       echo json_encode(['error' => 'Error en la carga del archivo']);
       exit;
   }

2. Escapado de Variables:
Siempre utiliza mysqli_real_escape_string() al manejar datos de entrada para proteger tu aplicación contra inyecciones SQL.

3. Rutas de Archivos:
asegúrate de agregar "/" al inicio de las rutas de preview_path y compressed_path para evitar problemas en la ruta.

Insertar CODE, HTML o PHP:
php
   $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Añadir '/'
   $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Añadir '/'

4. Validar Tipos de Archivos:
Considera usar in_array() para validar tipos de archivo en lugar de múltiples condiciones if.

Insertar CODE, HTML o PHP:
php
   $valid_image_types = ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'];
   if (in_array($fileType, $valid_image_types)) {
       // Manejo de imágenes
   }

5. Limpieza del Código:
Evita repetir el código para asignar $stricted. Podrías simplificarlo.

Insertar CODE, HTML o PHP:
php
   if (count($uploaded_files) > 0) {
       $stricted = ($_POST['category'] === 'livs') ? 'livs' : 'post';
   } elseif (isset($_POST['category']) && $_POST['category'] === 'share') {
       $stricted = 'share';
   } else {
       $stricted = 'post';
   }

6. Comprobar el Éxito de las Consultas SQL:
Siempre es bueno comprobar si las consultas SQL se ejecutan correctamente, en caso contrario, puedes registrar el error.

Insertar CODE, HTML o PHP:
php
   if (!mysqli_query($conexion, $tu_consulta)) {
       echo json_encode(['error' => mysqli_error($conexion)]);
       exit;
   }

7. Limpieza de Contenido del Mensaje:
Tu método de limpieza de contenido en $mensaje es un poco complicado. Asegúrate de entender qué caracteres deseas eliminar o reemplazar y si hay formas más simples de lograr lo mismo.

8. Finaliza el Script Adecuadamente:
Asegúrate de que solo envíes la respuesta JSON al final del script y que no haya salidas antes de eso.

9. Uso de JSON:
Al final de tu script, asegúrate de que todas las salidas JSON sean también apropiadas al error (en caso de no subir archivos).

### Ejemplo de resultado después de hacer algunas de estas mejoras:

Aquí tienes un fragmento con algunas de las recomendaciones aplicadas:

PHP:
// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Comprueba errores en la carga
        if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
            echo json_encode(['error' => 'Error en la carga del archivo']);
            exit;
        }

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video
               
                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Ruta para la preview
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview); // Ejecutar el comando FFmpeg para vista previa
                   
                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress); // Ejecutar el comando FFmpeg para compresión
                   
                    unlink($target_path); // Borrar el video original
                   
                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            }
        }
        // Verificación de imágenes
        elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
            ...
        }
    }
}
// Agregar código para insertar en la base de datos

// Respuesta final
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);

Estas mejoras deben ayudar a que tu script sea más robusto y fácil de mantener. Si tienes más preguntas o necesitas más ayuda, ¡dímelo!
puedes darme el codigo completo
 
puedes darme el codigo completo
Claro, aquí tienes una versión completa y mejorada del código PHP, que incluye la subida de videos e imágenes, así como el manejo de errores, la compresión de videos y el registro en la base de datos.

PHP:
<?php
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Verificación de errores de carga
        if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
            echo json_encode(['error' => 'Error en la carga del archivo']);
            exit;
        }

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);

                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15)));
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video

                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp';
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview);

                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed_' . $base_name . '.mp4';
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress);

                    unlink($target_path); // Borrar el video original

                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            }
        } 
        // Manejo de imágenes
        elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
            $target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";

            if (move_uploaded_file($tmp_name, $target_path)) {
                // Si la categoría es "livs", solo permitimos un archivo
                if ($_POST['category'] === "livs") {
                    $uploaded_files[0] = $target_path; // Agregar imagen a la lista
                    break; // Salir del bucle después de subir un archivo
                } else {
                    // Para otras categorías, se permiten múltiples archivos
                    if (count($uploaded_files) < 20) {
                        $uploaded_files[] = $target_path; // Agregar imagen a la lista
                    }
                }
            }
        }
    }
}

if (count($uploaded_files) > 0) {
    $stricted = ($_POST['category'] === 'livs') ? 'livs' : 'post';
} elseif (isset($_POST['category']) && $_POST['category'] === 'share') {
    $stricted = 'share';
} else {
    $stricted = 'post';
}

// Procesar el resto de tu código para insertar en la base de datos

$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';
if (mysqli_num_rows($querim) === 0) {
    $quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
    $pinta = $ino++;
    $quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
    $qilo = mysqli_fetch_assoc($quala);
    $quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare, usershare, idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $uploaded_files[0] . "', '" . $uploaded_files[1] . "', '" . $uploaded_files[2] . "', '" . $uploaded_files[3] . "', '" . $uploaded_files[4] . "', '" . $uploaded_files[5] . "', '" . $uploaded_files[6] . "', '" . $uploaded_files[7] . "', '" . $uploaded_files[8] . "', '" . $uploaded_files[9] . "', '" . $uploaded_files[10] . "', '" . $uploaded_files[11] . "', '" . $uploaded_files[12] . "', '" . $uploaded_files[13] . "', '" . $uploaded_files[14] . "', '" . $uploaded_files[15] . "', '" . $uploaded_files[16] . "', '" . $uploaded_files[17] . "', '" . $uploaded_files[18] . "', '" . $uploaded_files[19] . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);

$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra) {
    $chopo = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC LIMIT 1");
    if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {
        $chopop = mysqli_query($conexion, "SELECT * FROM newnotification WHERE frame='etiqueta' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC LIMIT 1");
        if ($comem = mysqli_fetch_assoc($chopop)) {
            mysqli_query($conexion, "UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') WHERE idsug NOT LIKE '%," . $loupa['id'] . ",%' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "'");
        } elseif ($comem['idbug'] !== $ultimo_id_insertado) {
            mysqli_query($conexion, "INSERT INTO newnotification (hora, fecha, idbug, idsug, idviews, username, frame, mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0,','" . $username . "','etiqueta','te ha etiquetado en una publicación')");
        }
    }
}

// Respuesta final
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
?>

### Descripción del Código:

1. Manejo de Archivos: El código maneja la subida de archivos de videos e imágenes, asegurándose de que se carguen correctamente y se procesen.
2. Compresión de Videos: Se comprimen videos usando FFmpeg y se generan vistas previas.
3. Manejo de Errores: Se verifica si los archivos se han subido correctamente y se informa al usuario sobre errores.
4. Inserción en Base de Datos: Al final, se insertan los datos relevantes en la base de datos, como el mensaje y los archivos subidos.

### Recomendaciones:
  • Asegúrate de tener permisos adecuados en las carpetas de subida.
  • Verifica que FFmpeg esté instalado y disponible en tu servidor.
  • Haz pruebas exhaustivas para garantizar que todos los casos se manejen correctamente.

Si tienes más preguntas o necesitas ajustes adicionales, ¡no dudes en decírmelo!
 
Claro, aquí tienes una versión completa y mejorada del código PHP, que incluye la subida de videos e imágenes, así como el manejo de errores, la compresión de videos y el registro en la base de datos.

PHP:
<?php
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Verificación de errores de carga
        if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
            echo json_encode(['error' => 'Error en la carga del archivo']);
            exit;
        }

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);

                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15)));
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video

                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp';
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview);

                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed_' . $base_name . '.mp4';
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress);

                    unlink($target_path); // Borrar el video original

                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            }
        }
        // Manejo de imágenes
        elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
            $target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";

            if (move_uploaded_file($tmp_name, $target_path)) {
                // Si la categoría es "livs", solo permitimos un archivo
                if ($_POST['category'] === "livs") {
                    $uploaded_files[0] = $target_path; // Agregar imagen a la lista
                    break; // Salir del bucle después de subir un archivo
                } else {
                    // Para otras categorías, se permiten múltiples archivos
                    if (count($uploaded_files) < 20) {
                        $uploaded_files[] = $target_path; // Agregar imagen a la lista
                    }
                }
            }
        }
    }
}

if (count($uploaded_files) > 0) {
    $stricted = ($_POST['category'] === 'livs') ? 'livs' : 'post';
} elseif (isset($_POST['category']) && $_POST['category'] === 'share') {
    $stricted = 'share';
} else {
    $stricted = 'post';
}

// Procesar el resto de tu código para insertar en la base de datos

$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';
if (mysqli_num_rows($querim) === 0) {
    $quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
    $pinta = $ino++;
    $quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
    $qilo = mysqli_fetch_assoc($quala);
    $quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare, usershare, idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $uploaded_files[0] . "', '" . $uploaded_files[1] . "', '" . $uploaded_files[2] . "', '" . $uploaded_files[3] . "', '" . $uploaded_files[4] . "', '" . $uploaded_files[5] . "', '" . $uploaded_files[6] . "', '" . $uploaded_files[7] . "', '" . $uploaded_files[8] . "', '" . $uploaded_files[9] . "', '" . $uploaded_files[10] . "', '" . $uploaded_files[11] . "', '" . $uploaded_files[12] . "', '" . $uploaded_files[13] . "', '" . $uploaded_files[14] . "', '" . $uploaded_files[15] . "', '" . $uploaded_files[16] . "', '" . $uploaded_files[17] . "', '" . $uploaded_files[18] . "', '" . $uploaded_files[19] . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);

$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra) {
    $chopo = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC LIMIT 1");
    if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {
        $chopop = mysqli_query($conexion, "SELECT * FROM newnotification WHERE frame='etiqueta' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC LIMIT 1");
        if ($comem = mysqli_fetch_assoc($chopop)) {
            mysqli_query($conexion, "UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') WHERE idsug NOT LIKE '%," . $loupa['id'] . ",%' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "'");
        } elseif ($comem['idbug'] !== $ultimo_id_insertado) {
            mysqli_query($conexion, "INSERT INTO newnotification (hora, fecha, idbug, idsug, idviews, username, frame, mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0,','" . $username . "','etiqueta','te ha etiquetado en una publicación')");
        }
    }
}

// Respuesta final
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
?>

### Descripción del Código:

1. Manejo de Archivos: El código maneja la subida de archivos de videos e imágenes, asegurándose de que se carguen correctamente y se procesen.
2. Compresión de Videos: Se comprimen videos usando FFmpeg y se generan vistas previas.
3. Manejo de Errores: Se verifica si los archivos se han subido correctamente y se informa al usuario sobre errores.
4. Inserción en Base de Datos: Al final, se insertan los datos relevantes en la base de datos, como el mensaje y los archivos subidos.

### Recomendaciones:
  • Asegúrate de tener permisos adecuados en las carpetas de subida.
  • Verifica que FFmpeg esté instalado y disponible en tu servidor.
  • Haz pruebas exhaustivas para garantizar que todos los casos se manejen correctamente.

Si tienes más preguntas o necesitas ajustes adicionales, ¡no dudes en decírmelo!
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}

aqui esto me genera algun error al intentar mandar los videos
 
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}

aqui esto me genera algun error al intentar mandar los videos
Vamos a repasar tu código y a señalar algunas áreas donde podrías tener problemas al intentar subir videos y manejar las notificaciones. Hay varios aspectos a considerar en esta parte del código para asegurarte de que funcione correctamente al enviar los videos.

### 1. Verificación de Errores de Consulta
Siempre es una buena práctica verificar si las consultas de MySQL se han ejecutado correctamente. Si no se ejecutan, puedes obtener un mensaje de error claro.

PHP:
if (!mysqli_query($conexion, $consulta)) {
    echo json_encode(['error' => mysqli_error($conexion)]);
    exit;
}

### 2. Manejo de IDs y Variables
Verifica que todas las variables que estás utilizando están definidas y tienen valores válidos antes de usarlas. Por ejemplo, asegúrate de que $username, $id, $nombre, $apellido, $email, etc. estén debidamente inicializadas.

### 3. Saneamiento de Inputs
Asegúrate de que todas las entradas se limpien adecuadamente para protegerte contra ataques de inyección SQL. Estás utilizando mysqli_real_escape_string, lo cual es bueno, pero asegúrate de utilizarlo en todas las variables que provienen de $_POST.

### 4. Generación de Notificaciones
Asegúrate de que las consultas para crear o actualizar notificaciones también estén "blindadas" mediante el saneamiento de las variables.

### 5. Comprobar el Registro en la Base de Datos
Asegúrate de estar usando el esquema correcto en tu tabla posters. La cantidad de columnas que estás insertando debería coincidir con el número de variables que estás pasando en el VALUES.

### 6. Mensaje y Prueba de Errores
Aquí tienes un fragmento revisado de tu código, añadiendo verificaciones de errores y haciendo el uso de las variables.

```php
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
if (!$querim) {
die(json_encode(['error' => mysqli_error($conexion)]));
}

$quid = '';
if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . mysqli_real_escape_string($conexion, $filo['username']) . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
if ($qilo) {
$quid .= '0,' . $qilo['id'] . ',';
}
}

$friendfly = str_replace(",0,", ",", $quid);

$mensaje = mysqli_real_escape_string($conexion, $_POST['mensaje']);
$mensaje = str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensaje)));

// Asegúrate de que la variable $stricted esté definida.
$restricted = isset($stricted) ? $stricted : 'post';

$sql = "INSERT INTO posters (idshare, usershare, idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha)
VALUES (
'" . mysqli_real_escape_string($conexion, $_POST['idshare']) . "',
'" . mysqli_real_escape_string($conexion, $_POST['usershare']) . "',
'0,',
'" . $friendfly . "',
'" . $restricted . "',
'" . date("d-m-Y H:i:s") . "',
'" . $photo1 . "',
'" . $photo2 . "',
'" . $photo3 . "',
'" . $photo4 . "',
'" . $photo5 . "',
'" . $photo6 . "',
'" . $photo7 . "',
'" . $photo8 . "',
'" . $photo9 . "',
'" . $photo10 . "',
'" . $photo11 . "',
'" . $photo12 . "',
'" . $photo13 . "',
'" . $photo14 . "',
'" . $photo15 . "',
'" . $photo16 . "',
'" . $photo17 . "',
'" . $photo18 . "',
'" . $photo19 . "',
'" . $photo20 . "',
'" . mysqli_real_escape_string($conexion, $nombre) . "',
'" . mysqli_real_escape_string($conexion, $apellido) . "',
'" . mysqli_real_escape_string($conexion, $username) . "',
'" . mysqli_real_escape_string($conexion, $email) . "',
'" . $mensaje . "',
'" . date('d M Y') . "'
)";

if (!mysqli_query($conexion, $sql)) {
echo json_encode(['error' => mysqli_error($conexion)]);
exit;
}

$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;

preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra) {
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser WHERE username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC LIMIT 1");
if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {

$chopop = mysqli_query($conexion,"SELECT * FROM newnotification WHERE frame='etiqueta' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC LIMIT 1");

if ($comem = mysqli_fetch_assoc($chopop)) {
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') WHERE idsug NOT LIKE '%," . $loupa['id'] . ",%' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "'");
} elseif ($comem['idbug'] !== $ultimo_id_insertado) {
mysqli_query($conexion,"INSERT INTO newnotification(hora, fecha, idbug, idsug, idviews, username, frame, mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0','" . $username . "','etiqueta','te ha etiquetado en una publicación')");
}
}
}
[/CODE]

### Conclusión
Asegúrate de que todas las variables estén definidas y de que las consultas a la base de datos se manejen adecuadamente. Si sigues teniendo problemas, revisa los mensajes de error que se generan con mysqli_error($conexion) y asegúrate de que cada consulta se ejecute correctamente. Si el error persiste, proporciona más información sobre el mensaje de error exacto que estás recibiendo.
 
Vamos a repasar tu código y a señalar algunas áreas donde podrías tener problemas al intentar subir videos y manejar las notificaciones. Hay varios aspectos a considerar en esta parte del código para asegurarte de que funcione correctamente al enviar los videos.

### 1. Verificación de Errores de Consulta
Siempre es una buena práctica verificar si las consultas de MySQL se han ejecutado correctamente. Si no se ejecutan, puedes obtener un mensaje de error claro.

PHP:
if (!mysqli_query($conexion, $consulta)) {
    echo json_encode(['error' => mysqli_error($conexion)]);
    exit;
}

### 2. Manejo de IDs y Variables
Verifica que todas las variables que estás utilizando están definidas y tienen valores válidos antes de usarlas. Por ejemplo, asegúrate de que $username, $id, $nombre, $apellido, $email, etc. estén debidamente inicializadas.

### 3. Saneamiento de Inputs
Asegúrate de que todas las entradas se limpien adecuadamente para protegerte contra ataques de inyección SQL. Estás utilizando mysqli_real_escape_string, lo cual es bueno, pero asegúrate de utilizarlo en todas las variables que provienen de $_POST.

### 4. Generación de Notificaciones
Asegúrate de que las consultas para crear o actualizar notificaciones también estén "blindadas" mediante el saneamiento de las variables.

### 5. Comprobar el Registro en la Base de Datos
Asegúrate de estar usando el esquema correcto en tu tabla posters. La cantidad de columnas que estás insertando debería coincidir con el número de variables que estás pasando en el VALUES.

### 6. Mensaje y Prueba de Errores
Aquí tienes un fragmento revisado de tu código, añadiendo verificaciones de errores y haciendo el uso de las variables.

```php
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
if (!$querim) {
die(json_encode(['error' => mysqli_error($conexion)]));
}

$quid = '';
if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . mysqli_real_escape_string($conexion, $filo['username']) . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
if ($qilo) {
$quid .= '0,' . $qilo['id'] . ',';
}
}

$friendfly = str_replace(",0,", ",", $quid);

$mensaje = mysqli_real_escape_string($conexion, $_POST['mensaje']);
$mensaje = str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensaje)));

// Asegúrate de que la variable $stricted esté definida.
$restricted = isset($stricted) ? $stricted : 'post';

$sql = "INSERT INTO posters (idshare, usershare, idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha)
VALUES (
'" . mysqli_real_escape_string($conexion, $_POST['idshare']) . "',
'" . mysqli_real_escape_string($conexion, $_POST['usershare']) . "',
'0,',
'" . $friendfly . "',
'" . $restricted . "',
'" . date("d-m-Y H:i:s") . "',
'" . $photo1 . "',
'" . $photo2 . "',
'" . $photo3 . "',
'" . $photo4 . "',
'" . $photo5 . "',
'" . $photo6 . "',
'" . $photo7 . "',
'" . $photo8 . "',
'" . $photo9 . "',
'" . $photo10 . "',
'" . $photo11 . "',
'" . $photo12 . "',
'" . $photo13 . "',
'" . $photo14 . "',
'" . $photo15 . "',
'" . $photo16 . "',
'" . $photo17 . "',
'" . $photo18 . "',
'" . $photo19 . "',
'" . $photo20 . "',
'" . mysqli_real_escape_string($conexion, $nombre) . "',
'" . mysqli_real_escape_string($conexion, $apellido) . "',
'" . mysqli_real_escape_string($conexion, $username) . "',
'" . mysqli_real_escape_string($conexion, $email) . "',
'" . $mensaje . "',
'" . date('d M Y') . "'
)";

if (!mysqli_query($conexion, $sql)) {
echo json_encode(['error' => mysqli_error($conexion)]);
exit;
}

$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;

preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra) {
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser WHERE username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC LIMIT 1");
if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {

$chopop = mysqli_query($conexion,"SELECT * FROM newnotification WHERE frame='etiqueta' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC LIMIT 1");

if ($comem = mysqli_fetch_assoc($chopop)) {
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') WHERE idsug NOT LIKE '%," . $loupa['id'] . ",%' AND username='" . $username . "' AND idbug='" . $ultimo_id_insertado . "'");
} elseif ($comem['idbug'] !== $ultimo_id_insertado) {
mysqli_query($conexion,"INSERT INTO newnotification(hora, fecha, idbug, idsug, idviews, username, frame, mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0','" . $username . "','etiqueta','te ha etiquetado en una publicación')");
}
}
}
[/CODE]

### Conclusión
Asegúrate de que todas las variables estén definidas y de que las consultas a la base de datos se manejen adecuadamente. Si sigues teniendo problemas, revisa los mensajes de error que se generan con mysqli_error($conexion) y asegúrate de que cada consulta se ejecute correctamente. Si el error persiste, proporciona más información sobre el mensaje de error exacto que estás recibiendo.
prom.php:22 POST link 500
(anonymous) @ prom.php:22
prom.php:34 Error en la solicitud: SyntaxError: Unexpected end of JSON input
at prom.php:26:40

como soluciono este error?
 
prom.php:22 POST link 500
(anonymous) @ prom.php:22
prom.php:34 Error en la solicitud: SyntaxError: Unexpected end of JSON input
at prom.php:26:40

como soluciono este error?
El error que mencionas, "POST link 500", indica que hay un error en el servidor que está causando que la respuesta sea un error 500 (Internal Server Error). Esto significa que hay un problema en tu código PHP que previene que el script se ejecute correctamente.

Además, el mensaje "Unexpected end of JSON input" sugiere que el cliente está intentando leer una respuesta que no está en formato JSON (o que la respuesta está vacía) porque no hay datos que analizar.

### Pasos para Solucionar el Error

1. Habilitar la Visualización de Errores en PHP:
Agrega las siguientes líneas al inicio de tu archivo prom.php para habilitar la visualización de errores. Esto ayudará a ver exactamente qué está causando el error 500.

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

2. Verificar Consultas SQL:
Asegúrate de que todas las consultas SQL se estén ejecutando correctamente y que todas las variables utilizadas en esas consultas estén definidas y contengan valores válidos. Usa la siguiente estructura para verificar cada consulta:

Insertar CODE, HTML o PHP:
php
   if (!$resultado = mysqli_query($conexion, $consulta)) {
       die(json_encode(['error' => mysqli_error($conexion)])); // Respuesta con el error
   }

3. Revisar el Código:
Haz una revisión completa del código para asegurarte de que:
- Todas las conexiones a la base de datos se realicen correctamente.
- Todas las variables que provienen de $_POST estén definidas y no sean null.
- No haya errores en la lógica del código que puedan causar bucles infinitos o condiciones que no se cumplan.

4. Pruebas de Depuración:
- Puedes usar var_dump() o print_r() para depurar y ver el contenido de las variables en diferentes puntos del código.
- Asegúrate de cerrar el script si se encuentra un error crítico, usando exit() o die() después de mostrar el mensaje de error en formato JSON.

5. Revisar las Respuestas JSON:
Antes de enviar datos en formato JSON, asegúrate de que la salida esté correctamente formateada:

Insertar CODE, HTML o PHP:
php
   echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
   exit; // Asegúrate de que no haya salida adicional

6. Verificar el Servidor Web:
Revisa los registros de errores de tu servidor web (como Apache o Nginx) para obtener más información sobre el error 500. Dependiendo del sistema, el registro podría estar en /var/log/apache2/error.log o /var/log/nginx/error.log.

### Ejemplo de Implementación

Aquí tienes un ejemplo de cómo puedes manejar el error y asegurarte de que el script se ejecute correctamente:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión a la base de datos'])); // Salida de error
}

// Procesar la solicitud
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Lógica para manejar la subida de videos/imágenes
    // ...

    // Ejemplo de verificación de consulta
    if (!$resultado = mysqli_query($conexion, $consulta)) {
        die(json_encode(['error' => mysqli_error($conexion)])); // Respuesta con el error
    }

    // Aquí va la lógica del resto del script...

    echo json_encode(['success' => 'Archivo subido correctamente']);
    exit; // Finaliza la ejecución
} else {
    echo json_encode(['error' => 'Método no permitido']); // Respuesta para métodos que no son POST
}
?>

Con estos pasos, deberías poder solucionar el error 500. Si el problema persiste, revisa los mensajes de error específicos que recibas una vez que habilites la visualización de errores. Si necesitas más ayuda, no dudes en comentar con los detalles adicionales.
 
El error que mencionas, "POST link 500", indica que hay un error en el servidor que está causando que la respuesta sea un error 500 (Internal Server Error). Esto significa que hay un problema en tu código PHP que previene que el script se ejecute correctamente.

Además, el mensaje "Unexpected end of JSON input" sugiere que el cliente está intentando leer una respuesta que no está en formato JSON (o que la respuesta está vacía) porque no hay datos que analizar.

### Pasos para Solucionar el Error

1. Habilitar la Visualización de Errores en PHP:
Agrega las siguientes líneas al inicio de tu archivo prom.php para habilitar la visualización de errores. Esto ayudará a ver exactamente qué está causando el error 500.

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

2. Verificar Consultas SQL:
Asegúrate de que todas las consultas SQL se estén ejecutando correctamente y que todas las variables utilizadas en esas consultas estén definidas y contengan valores válidos. Usa la siguiente estructura para verificar cada consulta:

Insertar CODE, HTML o PHP:
php
   if (!$resultado = mysqli_query($conexion, $consulta)) {
       die(json_encode(['error' => mysqli_error($conexion)])); // Respuesta con el error
   }

3. Revisar el Código:
Haz una revisión completa del código para asegurarte de que:
- Todas las conexiones a la base de datos se realicen correctamente.
- Todas las variables que provienen de $_POST estén definidas y no sean null.
- No haya errores en la lógica del código que puedan causar bucles infinitos o condiciones que no se cumplan.

4. Pruebas de Depuración:
- Puedes usar var_dump() o print_r() para depurar y ver el contenido de las variables en diferentes puntos del código.
- Asegúrate de cerrar el script si se encuentra un error crítico, usando exit() o die() después de mostrar el mensaje de error en formato JSON.

5. Revisar las Respuestas JSON:
Antes de enviar datos en formato JSON, asegúrate de que la salida esté correctamente formateada:

Insertar CODE, HTML o PHP:
php
   echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
   exit; // Asegúrate de que no haya salida adicional

6. Verificar el Servidor Web:
Revisa los registros de errores de tu servidor web (como Apache o Nginx) para obtener más información sobre el error 500. Dependiendo del sistema, el registro podría estar en /var/log/apache2/error.log o /var/log/nginx/error.log.

### Ejemplo de Implementación

Aquí tienes un ejemplo de cómo puedes manejar el error y asegurarte de que el script se ejecute correctamente:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión a la base de datos'])); // Salida de error
}

// Procesar la solicitud
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Lógica para manejar la subida de videos/imágenes
    // ...

    // Ejemplo de verificación de consulta
    if (!$resultado = mysqli_query($conexion, $consulta)) {
        die(json_encode(['error' => mysqli_error($conexion)])); // Respuesta con el error
    }

    // Aquí va la lógica del resto del script...

    echo json_encode(['success' => 'Archivo subido correctamente']);
    exit; // Finaliza la ejecución
} else {
    echo json_encode(['error' => 'Método no permitido']); // Respuesta para métodos que no son POST
}
?>

Con estos pasos, deberías poder solucionar el error 500. Si el problema persiste, revisa los mensajes de error específicos que recibas una vez que habilites la visualización de errores. Si necesitas más ayuda, no dudes en comentar con los detalles adicionales.
POST https://link.com/upload.php 500

me sigue saliendo este error
 
POST https://link.com/upload.php 500

me sigue saliendo este error
El error 500 (Internal Server Error) indica que hay un problema en el servidor que impide que se procese la solicitud. Aquí hay algunos pasos adicionales que puedes seguir para depurar y solucionar el problema:

### 1. Verifica los Registros de Errores del Servidor
El primer paso para solucionar un error 500 es revisar los registros de errores del servidor. Dependiendo de tu servidor web (Apache, Nginx, etc.), la ubicación del archivo de registro podría ser:

  • Apache: /var/log/apache2/error.log
  • Nginx: /var/log/nginx/error.log

Revisa el archivo de log justo después de que ocurra el error 500 para encontrar mensajes que puedan indicar la causa del problema.

### 2. Habilitar la Visualización de Errores
Si aún no lo has hecho, asegúrate de que tu código PHP tenga habilitada la visualización de errores al inicio del archivo upload.php:

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

Esto te ayudará a ver cualquier error de PHP que pueda estar causando el problema.

### 3. Verifica la Conexión a la Base de Datos
Asegúrate de que la conexión a la base de datos está funcionando correctamente. Si la conexión falla, puede generar un error 500. Aquí hay un ejemplo de cómo verificarlo:

PHP:
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]));
}

### 4. Revisa las Consultas SQL
Asegúrate de que todas las consultas SQL sean correctas y que no contengan errores de sintaxis. Además, verifica que todas las tablas y columnas existan en tu base de datos.

### 5. Manejo de Archivos y Permisos
Si estás trabajando con archivos (subidas o imágenes), asegúrate de que:

  • Las carpetas donde estás subiendo los archivos existen.
  • Tienes los permisos adecuados de escritura en esas carpetas.

### 6. Probar Código Mínimo
Si el problema persiste, trata de reducir el código a lo esencial para aislar el problema. Por ejemplo, crea un script simple que solo intente conectarse a la base de datos y devuelve un mensaje:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
if (!$conexion) {
    die(json_encode(['error' => 'Error de conexión: ' . mysqli_connect_error()]));
}

echo json_encode(['success' => 'Conexión a la base de datos exitosa']);
?>

Si este script funciona correctamente, ve agregando partes de tu código original poco a poco hasta que encuentres la causa del error 500.

### 7. Verificación del Archivo .htaccess (si usas Apache)
Si estás utilizando Apache, revisa si hay un archivo .htaccess presente que podría estar causando conflictos. A veces, configuraciones incorrectas en este archivo pueden generar errores 500.

### Resumen
Siguiendo estos pasos deberías ser capaz de identificar y resolver la causa del error 500. Si después de todos estos pasos aún no puedes resolver el problema, considera compartir los registros de errores correspondientes o cualquier mensaje adicional que se muestre al activar la visualización de errores. Esto ayudará a diagnosticar el problema más a fondo.
 
El error 500 (Internal Server Error) indica que hay un problema en el servidor que impide que se procese la solicitud. Aquí hay algunos pasos adicionales que puedes seguir para depurar y solucionar el problema:

### 1. Verifica los Registros de Errores del Servidor
El primer paso para solucionar un error 500 es revisar los registros de errores del servidor. Dependiendo de tu servidor web (Apache, Nginx, etc.), la ubicación del archivo de registro podría ser:

  • Apache: /var/log/apache2/error.log
  • Nginx: /var/log/nginx/error.log

Revisa el archivo de log justo después de que ocurra el error 500 para encontrar mensajes que puedan indicar la causa del problema.

### 2. Habilitar la Visualización de Errores
Si aún no lo has hecho, asegúrate de que tu código PHP tenga habilitada la visualización de errores al inicio del archivo upload.php:

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

Esto te ayudará a ver cualquier error de PHP que pueda estar causando el problema.

### 3. Verifica la Conexión a la Base de Datos
Asegúrate de que la conexión a la base de datos está funcionando correctamente. Si la conexión falla, puede generar un error 500. Aquí hay un ejemplo de cómo verificarlo:

PHP:
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]));
}

### 4. Revisa las Consultas SQL
Asegúrate de que todas las consultas SQL sean correctas y que no contengan errores de sintaxis. Además, verifica que todas las tablas y columnas existan en tu base de datos.

### 5. Manejo de Archivos y Permisos
Si estás trabajando con archivos (subidas o imágenes), asegúrate de que:

  • Las carpetas donde estás subiendo los archivos existen.
  • Tienes los permisos adecuados de escritura en esas carpetas.

### 6. Probar Código Mínimo
Si el problema persiste, trata de reducir el código a lo esencial para aislar el problema. Por ejemplo, crea un script simple que solo intente conectarse a la base de datos y devuelve un mensaje:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
if (!$conexion) {
    die(json_encode(['error' => 'Error de conexión: ' . mysqli_connect_error()]));
}

echo json_encode(['success' => 'Conexión a la base de datos exitosa']);
?>

Si este script funciona correctamente, ve agregando partes de tu código original poco a poco hasta que encuentres la causa del error 500.

### 7. Verificación del Archivo .htaccess (si usas Apache)
Si estás utilizando Apache, revisa si hay un archivo .htaccess presente que podría estar causando conflictos. A veces, configuraciones incorrectas en este archivo pueden generar errores 500.

### Resumen
Siguiendo estos pasos deberías ser capaz de identificar y resolver la causa del error 500. Si después de todos estos pasos aún no puedes resolver el problema, considera compartir los registros de errores correspondientes o cualquier mensaje adicional que se muestre al activar la visualización de errores. Esto ayudará a diagnosticar el problema más a fondo.
error en la solicitud: SyntaxError: Unexpected end of JSON input
 
error en la solicitud: SyntaxError: Unexpected end of JSON input
El error "SyntaxError: Unexpected end of JSON input" ocurre cuando el cliente (en este caso, tu código JavaScript) intenta analizar una respuesta JSON que está incompleta o mal formada. Esto generalmente sucede por las siguientes razones:

### Posibles Causas

1. Error en el Servidor: Si el servidor no devuelve correctamente un JSON válido debido a un error interno (como un error 500), el cliente no puede analizar la respuesta.

2. Salida de Texto Antes del JSON: Si hay alguna salida (como un echo, print, advertencias de PHP, etc.) antes de que se envíe el JSON, esto puede provocar que la respuesta no sea válida.

3. No se Retorna un JSON Válido: Puede suceder que en algunos casos el código no está configurado para retornar un JSON válido, especialmente si hay condiciones de error que no están manejadas correctamente.

### Pasos para Solucionar el Problema

1. Verifica la Respuesta en el Servidor:
Asegúrate de que tu servidor PHP devuelva un JSON completamente formado en todos los flujos del código, incluso en caso de error. Por ejemplo:

Insertar CODE, HTML o PHP:
php
   // En caso de error
   if (/* condición de error */) {
       echo json_encode(['error' => 'Descripción del error']);
       exit;
   }

   // En caso de éxito
   echo json_encode(['success' => 'Operación exitosa']);
   exit;

2. Cierra el Script Después de Retornar JSON:
Agrega un exit; después de enviar una respuesta JSON para asegurar que no se ejecute más código que pueda afectar la respuesta.

3. Habilita la Visualización de Errores de PHP:
Asegúrate de habilitar la visualización de errores en tu script PHP para que puedas ver cualquier advertencia o error que pueda estar causando que la respuesta esté incompleta.

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

4. Revisar el Código:
Asegúrate de que no tienes ningún tipo de salida antes de la llamada a json_encode(). Esto incluye espacios en blanco, líneas vacías o incluso comentarios.

5. Probar la Respuesta del Servidor:
Utiliza herramientas como Postman o curl para realizar la misma solicitud y ver la respuesta completa del servidor. Esto puede ayudarte a identificar respuestas que no son válidas.

6. Manejar Errores en JavaScript:
Asegúrate de tener un bloque de código para manejar los errores en tu JavaScript y poder tener más claridad sobre lo que está pasando.

Insertar CODE, HTML o PHP:
javascript
   fetch('url/to/prom.php', { method: 'POST', body: formData })
   .then(response => {
       if (!response.ok) {
           throw new Error('Network response was not ok ' + response.statusText);
       }
       return response.text(); // Cambio a text para manejar problemas de análisis
   })
   .then(data => {
       try {
           const jsonData = JSON.parse(data); // Intenta analizar el JSON
           console.log(jsonData);
       } catch (e) {
           console.error('Error de análisis:', e, data); // Muestra el error
       }
   })
   .catch(error => console.error('Error en la solicitud:', error));

### Ejemplo de Respuesta JSON Completa

Aquí tienes un ejemplo simplificado de cómo debería verse la estructura en tu archivo PHP:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    echo json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]);
    exit;
}

// Lógica para manejar la solicitud
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Aquí tu código para manejar la subida de archivos o cualquier otra lógica

    // Suponiendo que la operación es exitosa
    echo json_encode(['success' => 'Archivo subido correctamente']);
} else {
    echo json_encode(['error' => 'Método no permitido']); 
}
exit; // Asegúrate de terminar el script aquí
?>

### Conclusión
Si sigues teniendo problemas después de seguir estos pasos, por favor proporciona el código relevante del servidor, así como cualquier salida que estés viendo en los registros de errores. Esto ayudará a diagnosticar el problema de manera más efectiva.
 
El error "SyntaxError: Unexpected end of JSON input" ocurre cuando el cliente (en este caso, tu código JavaScript) intenta analizar una respuesta JSON que está incompleta o mal formada. Esto generalmente sucede por las siguientes razones:

### Posibles Causas

1. Error en el Servidor: Si el servidor no devuelve correctamente un JSON válido debido a un error interno (como un error 500), el cliente no puede analizar la respuesta.

2. Salida de Texto Antes del JSON: Si hay alguna salida (como un echo, print, advertencias de PHP, etc.) antes de que se envíe el JSON, esto puede provocar que la respuesta no sea válida.

3. No se Retorna un JSON Válido: Puede suceder que en algunos casos el código no está configurado para retornar un JSON válido, especialmente si hay condiciones de error que no están manejadas correctamente.

### Pasos para Solucionar el Problema

1. Verifica la Respuesta en el Servidor:
Asegúrate de que tu servidor PHP devuelva un JSON completamente formado en todos los flujos del código, incluso en caso de error. Por ejemplo:

Insertar CODE, HTML o PHP:
php
   // En caso de error
   if (/* condición de error */) {
       echo json_encode(['error' => 'Descripción del error']);
       exit;
   }

   // En caso de éxito
   echo json_encode(['success' => 'Operación exitosa']);
   exit;

2. Cierra el Script Después de Retornar JSON:
Agrega un exit; después de enviar una respuesta JSON para asegurar que no se ejecute más código que pueda afectar la respuesta.

3. Habilita la Visualización de Errores de PHP:
Asegúrate de habilitar la visualización de errores en tu script PHP para que puedas ver cualquier advertencia o error que pueda estar causando que la respuesta esté incompleta.

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

4. Revisar el Código:
Asegúrate de que no tienes ningún tipo de salida antes de la llamada a json_encode(). Esto incluye espacios en blanco, líneas vacías o incluso comentarios.

5. Probar la Respuesta del Servidor:
Utiliza herramientas como Postman o curl para realizar la misma solicitud y ver la respuesta completa del servidor. Esto puede ayudarte a identificar respuestas que no son válidas.

6. Manejar Errores en JavaScript:
Asegúrate de tener un bloque de código para manejar los errores en tu JavaScript y poder tener más claridad sobre lo que está pasando.

Insertar CODE, HTML o PHP:
javascript
   fetch('url/to/prom.php', { method: 'POST', body: formData })
   .then(response => {
       if (!response.ok) {
           throw new Error('Network response was not ok ' + response.statusText);
       }
       return response.text(); // Cambio a text para manejar problemas de análisis
   })
   .then(data => {
       try {
           const jsonData = JSON.parse(data); // Intenta analizar el JSON
           console.log(jsonData);
       } catch (e) {
           console.error('Error de análisis:', e, data); // Muestra el error
       }
   })
   .catch(error => console.error('Error en la solicitud:', error));

### Ejemplo de Respuesta JSON Completa

Aquí tienes un ejemplo simplificado de cómo debería verse la estructura en tu archivo PHP:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    echo json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]);
    exit;
}

// Lógica para manejar la solicitud
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Aquí tu código para manejar la subida de archivos o cualquier otra lógica

    // Suponiendo que la operación es exitosa
    echo json_encode(['success' => 'Archivo subido correctamente']);
} else {
    echo json_encode(['error' => 'Método no permitido']);
}
exit; // Asegúrate de terminar el script aquí
?>

### Conclusión
Si sigues teniendo problemas después de seguir estos pasos, por favor proporciona el código relevante del servidor, así como cualquier salida que estés viendo en los registros de errores. Esto ayudará a diagnosticar el problema de manera más efectiva.
puedes darme el codigo completo
 
puedes darme el codigo completo
Claro, aquí tienes un ejemplo completo de un archivo PHP (upload.php) que maneja la subida de archivos (imágenes y videos), verifica los errores, genera respuestas JSON, y maneja la conexión a la base de datos. Asegúrate de personalizar las configuraciones de conexión a la base de datos.

### Código Completo para upload.php

PHP:
<?php
// Habilita la visualización de errores para depuración
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    echo json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]);
    exit;
}

// Verifica si se ha enviado una solicitud POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $uploaded_files = [];

    // Procesa cada archivo subido
    if (!empty($_FILES['fotoshop'])) {
        foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
            $fileType = $_FILES['fotoshop']['type'][$key];

            // Verificación de errores de carga
            if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
                echo json_encode(['error' => 'Error en la carga del archivo']);
                exit;
            }

            // Manejo de videos
            if ($fileType === "video/mp4") {
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(5));
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video

                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp';
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:01 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview);

                    $uploaded_files[] = $target_path; // Agregar video a la lista
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            } 
            // Manejo de imágenes
            elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
                $target_path = "imguser/" . $base_name . ".webp";

                if (move_uploaded_file($tmp_name, $target_path)) {
                    $uploaded_files[] = $target_path; // Agregar imagen a la lista
                }
            }
        }
    }

    // Verificación de archivos subidos
    if (count($uploaded_files) > 0) {
        // Aquí puedes agregar lógica para insertar en la base de datos
        $mensaje = mysqli_real_escape_string($conexion, $_POST['mensaje'] ?? ''); // Mensaje opcional
        $categoria = mysqli_real_escape_string($conexion, $_POST['category'] ?? 'post');
        
        // Realiza la inserción en la base de datos
        $query = "INSERT INTO posters (category, mensaje, files) VALUES ('$categoria', '$mensaje', '" . implode(',', $uploaded_files) . "')";
        
        if (!mysqli_query($conexion, $query)) {
            echo json_encode(['error' => mysqli_error($conexion)]);
            exit;
        }

        echo json_encode(['success' => 'Archivo(s) subido(s) correctamente', 'files' => $uploaded_files]);
    } else {
        echo json_encode(['error' => 'No se subieron archivos.']);
    }
} else {
    echo json_encode(['error' => 'Método no permitido']);
}

mysqli_close($conexion);
exit;
?>

### Descripción del Código

1. Conexión a la Base de Datos: La sección al inicio establece conexión con la base de datos. Si hay un error en la conexión, se responde con un mensaje de error en formato JSON.

2. Manejo de Archivos: Se procesan los archivos subidos (imágenes y videos).
- Los videos se manejan usando FFmpeg para crear una vista previa.
- Las imágenes se guardan en una carpeta específica.
- Si alguna carga falla, devuelve un mensaje de error.

3. Inserción en la Base de Datos: Luego de las subidas, se verifica si hay archivos subidos y se inserta la información en la base de datos.

4. Respuestas JSON: Se devuelven respuestas en formato JSON para indicar éxito o error.

### Consideraciones

  • Permisos de la Carpeta: Asegúrate de que las carpetas donde subes archivos (upload y imguser/compressed) tengan permisos de escritura adecuados.
  • Instalación de FFmpeg: Confirma que FFmpeg esté instalado y accesible en tu entorno para manejar la creación de vistas previas de video.
  • Configuraciones Personalizadas: Cambia los detalles de conexión a la base de datos según tu configuración actual.

Si necesitas alguna modificación o tienes más preguntas, ¡dímelo!
 
Claro, aquí tienes un ejemplo completo de un archivo PHP (upload.php) que maneja la subida de archivos (imágenes y videos), verifica los errores, genera respuestas JSON, y maneja la conexión a la base de datos. Asegúrate de personalizar las configuraciones de conexión a la base de datos.

### Código Completo para upload.php

PHP:
<?php
// Habilita la visualización de errores para depuración
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    echo json_encode(['error' => 'Error en la conexión a la base de datos: ' . mysqli_connect_error()]);
    exit;
}

// Verifica si se ha enviado una solicitud POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $uploaded_files = [];

    // Procesa cada archivo subido
    if (!empty($_FILES['fotoshop'])) {
        foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
            $fileType = $_FILES['fotoshop']['type'][$key];

            // Verificación de errores de carga
            if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
                echo json_encode(['error' => 'Error en la carga del archivo']);
                exit;
            }

            // Manejo de videos
            if ($fileType === "video/mp4") {
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(5));
                $target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video

                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp';
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:01 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview);

                    $uploaded_files[] = $target_path; // Agregar video a la lista
                } else {
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit;
                }
            }
            // Manejo de imágenes
            elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
                $target_path = "imguser/" . $base_name . ".webp";

                if (move_uploaded_file($tmp_name, $target_path)) {
                    $uploaded_files[] = $target_path; // Agregar imagen a la lista
                }
            }
        }
    }

    // Verificación de archivos subidos
    if (count($uploaded_files) > 0) {
        // Aquí puedes agregar lógica para insertar en la base de datos
        $mensaje = mysqli_real_escape_string($conexion, $_POST['mensaje'] ?? ''); // Mensaje opcional
        $categoria = mysqli_real_escape_string($conexion, $_POST['category'] ?? 'post');
       
        // Realiza la inserción en la base de datos
        $query = "INSERT INTO posters (category, mensaje, files) VALUES ('$categoria', '$mensaje', '" . implode(',', $uploaded_files) . "')";
       
        if (!mysqli_query($conexion, $query)) {
            echo json_encode(['error' => mysqli_error($conexion)]);
            exit;
        }

        echo json_encode(['success' => 'Archivo(s) subido(s) correctamente', 'files' => $uploaded_files]);
    } else {
        echo json_encode(['error' => 'No se subieron archivos.']);
    }
} else {
    echo json_encode(['error' => 'Método no permitido']);
}

mysqli_close($conexion);
exit;
?>

### Descripción del Código

1. Conexión a la Base de Datos: La sección al inicio establece conexión con la base de datos. Si hay un error en la conexión, se responde con un mensaje de error en formato JSON.

2. Manejo de Archivos: Se procesan los archivos subidos (imágenes y videos).
- Los videos se manejan usando FFmpeg para crear una vista previa.
- Las imágenes se guardan en una carpeta específica.
- Si alguna carga falla, devuelve un mensaje de error.

3. Inserción en la Base de Datos: Luego de las subidas, se verifica si hay archivos subidos y se inserta la información en la base de datos.

4. Respuestas JSON: Se devuelven respuestas en formato JSON para indicar éxito o error.

### Consideraciones

  • Permisos de la Carpeta: Asegúrate de que las carpetas donde subes archivos (upload y imguser/compressed) tengan permisos de escritura adecuados.
  • Instalación de FFmpeg: Confirma que FFmpeg esté instalado y accesible en tu entorno para manejar la creación de vistas previas de video.
  • Configuraciones Personalizadas: Cambia los detalles de conexión a la base de datos según tu configuración actual.

Si necesitas alguna modificación o tienes más preguntas, ¡dímelo!
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
$fileType = $_FILES['fotoshop']['type'][$key];
$target_path = '';

// Manejo de videos
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);

$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/compressed/a' . $base_name . '.mp4'; // Ruta del video

if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa

// Comando para convertir y comprimir el video
$compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress); // Ejecutar el comando FFmpeg para compresión

unlink($target_path); // Borrar el video original

// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
break; // Salir del bucle
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
} else {
// Enviar error en formato JSON
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit; // Terminar la ejecución
}
}
}
// Manejo de imágenes (jpeg, png, jpg)
elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
$target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
if (move_uploaded_file($tmp_name, $target_path)) {
// Si la categoría es "livs", solo permitimos un archivo
if ($_POST['category'] === "livs") {
// Asignamos directamente el archivo a la primera posición de $uploaded_files
$uploaded_files[0] = $target_path; // Agregar imagen a la lista
break; // Salir del bucle después de subir un archivo
} else {
// Para otras categorías, se permiten múltiples archivos
if (count($uploaded_files) < 20) { // Verifica que no haya más de 3 archivos
$uploaded_files[] = $target_path; // Agregar imagen a la lista
}
}
}
}
}
if (count($uploaded_files) > 0) {
if (isset($_POST['category']) && $_POST['category'] === 'livs') {
$stricted = 'livs'; // Solo si hay un archivo y la categoría es 'livs'
} else {
$stricted = 'post'; // Para múltiples archivos o si la categoría no es 'livs'
}
} else {
if (isset($_POST['category']) && $_POST['category'] === 'share') {
$stricted = 'share';
}else{
$stricted = 'post';
}
}

if ($stricted === "livs") {
$photo1 = isset($uploaded_files[0]) ? $uploaded_files[0] : null;
$photo2 = null;
$photo3 = null;
$photo4 = null;
$photo5 = null;
$photo6 = null;
$photo7 = null;
$photo8 = null;
$photo9 = null;
$photo10 = null;
$photo11 = null;
$photo12 = null;
$photo13 = null;
$photo14 = null;
$photo15 = null;
$photo16 = null;
$photo17 = null;
$photo18 = null;
$photo19 = null;
$photo20 = null;
}elseif ($stricted === "post"){
$photo1 = isset($uploaded_files[0]) ? $uploaded_files[0] : null;
$photo2 = isset($uploaded_files[1]) ? $uploaded_files[1] : null;
$photo3 = isset($uploaded_files[2]) ? $uploaded_files[2] : null;
$photo4 = isset($uploaded_files[3]) ? $uploaded_files[3] : null;
$photo5 = isset($uploaded_files[4]) ? $uploaded_files[4] : null;
$photo6 = isset($uploaded_files[5]) ? $uploaded_files[5] : null;
$photo7 = isset($uploaded_files[6]) ? $uploaded_files[6] : null;
$photo8 = isset($uploaded_files[7]) ? $uploaded_files[7] : null;
$photo9 = isset($uploaded_files[8]) ? $uploaded_files[8] : null;
$photo10 = isset($uploaded_files[9]) ? $uploaded_files[9] : null;
$photo11 = isset($uploaded_files[10]) ? $uploaded_files[10] : null;
$photo12 = isset($uploaded_files[11]) ? $uploaded_files[11] : null;
$photo13 = isset($uploaded_files[12]) ? $uploaded_files[12] : null;
$photo14 = isset($uploaded_files[13]) ? $uploaded_files[13] : null;
$photo15 = isset($uploaded_files[14]) ? $uploaded_files[14] : null;
$photo16 = isset($uploaded_files[15]) ? $uploaded_files[15] : null;
$photo17 = isset($uploaded_files[16]) ? $uploaded_files[16] : null;
$photo18 = isset($uploaded_files[17]) ? $uploaded_files[17] : null;
$photo19 = isset($uploaded_files[18]) ? $uploaded_files[18] : null;
$photo20 = isset($uploaded_files[19]) ? $uploaded_files[19] : null;
}

// Procesar el resto de tu código para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}
}
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
solucioname el error
 
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
$fileType = $_FILES['fotoshop']['type'][$key];
$target_path = '';

// Manejo de videos
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);

$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/compressed/a' . $base_name . '.mp4'; // Ruta del video

if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa

// Comando para convertir y comprimir el video
$compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress); // Ejecutar el comando FFmpeg para compresión

unlink($target_path); // Borrar el video original

// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
break; // Salir del bucle
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
} else {
// Enviar error en formato JSON
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit; // Terminar la ejecución
}
}
}
// Manejo de imágenes (jpeg, png, jpg)
elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
$target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
if (move_uploaded_file($tmp_name, $target_path)) {
// Si la categoría es "livs", solo permitimos un archivo
if ($_POST['category'] === "livs") {
// Asignamos directamente el archivo a la primera posición de $uploaded_files
$uploaded_files[0] = $target_path; // Agregar imagen a la lista
break; // Salir del bucle después de subir un archivo
} else {
// Para otras categorías, se permiten múltiples archivos
if (count($uploaded_files) < 20) { // Verifica que no haya más de 3 archivos
$uploaded_files[] = $target_path; // Agregar imagen a la lista
}
}
}
}
}
if (count($uploaded_files) > 0) {
if (isset($_POST['category']) && $_POST['category'] === 'livs') {
$stricted = 'livs'; // Solo si hay un archivo y la categoría es 'livs'
} else {
$stricted = 'post'; // Para múltiples archivos o si la categoría no es 'livs'
}
} else {
if (isset($_POST['category']) && $_POST['category'] === 'share') {
$stricted = 'share';
}else{
$stricted = 'post';
}
}

if ($stricted === "livs") {
$photo1 = isset($uploaded_files[0]) ? $uploaded_files[0] : null;
$photo2 = null;
$photo3 = null;
$photo4 = null;
$photo5 = null;
$photo6 = null;
$photo7 = null;
$photo8 = null;
$photo9 = null;
$photo10 = null;
$photo11 = null;
$photo12 = null;
$photo13 = null;
$photo14 = null;
$photo15 = null;
$photo16 = null;
$photo17 = null;
$photo18 = null;
$photo19 = null;
$photo20 = null;
}elseif ($stricted === "post"){
$photo1 = isset($uploaded_files[0]) ? $uploaded_files[0] : null;
$photo2 = isset($uploaded_files[1]) ? $uploaded_files[1] : null;
$photo3 = isset($uploaded_files[2]) ? $uploaded_files[2] : null;
$photo4 = isset($uploaded_files[3]) ? $uploaded_files[3] : null;
$photo5 = isset($uploaded_files[4]) ? $uploaded_files[4] : null;
$photo6 = isset($uploaded_files[5]) ? $uploaded_files[5] : null;
$photo7 = isset($uploaded_files[6]) ? $uploaded_files[6] : null;
$photo8 = isset($uploaded_files[7]) ? $uploaded_files[7] : null;
$photo9 = isset($uploaded_files[8]) ? $uploaded_files[8] : null;
$photo10 = isset($uploaded_files[9]) ? $uploaded_files[9] : null;
$photo11 = isset($uploaded_files[10]) ? $uploaded_files[10] : null;
$photo12 = isset($uploaded_files[11]) ? $uploaded_files[11] : null;
$photo13 = isset($uploaded_files[12]) ? $uploaded_files[12] : null;
$photo14 = isset($uploaded_files[13]) ? $uploaded_files[13] : null;
$photo15 = isset($uploaded_files[14]) ? $uploaded_files[14] : null;
$photo16 = isset($uploaded_files[15]) ? $uploaded_files[15] : null;
$photo17 = isset($uploaded_files[16]) ? $uploaded_files[16] : null;
$photo18 = isset($uploaded_files[17]) ? $uploaded_files[17] : null;
$photo19 = isset($uploaded_files[18]) ? $uploaded_files[18] : null;
$photo20 = isset($uploaded_files[19]) ? $uploaded_files[19] : null;
}

// Procesar el resto de tu código para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '&quot;', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}
}
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
solucioname el error
Revisemos el código que has proporcionado y abordemos algunos posibles errores que podrían estar causando fallos en la carga de archivos o en la consulta a la base de datos. Haré ajustes y comentarios para mejorar la legibilidad y la funcionalidad.

### Código Optimizado y Solucionado

Aquí tienes una versión revisada de tu código, incluyendo las mejoras y manejo de errores.

PHP:
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];
        $target_path = '';

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);
                
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(5)); // Base del nombre
                $target_path = 'upload/compressed/a' . $base_name . '.mp4'; // Ruta del video
                
                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Ruta para la preview
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview, $output, $return_var); // Ejecutar el comando FFmpeg para vista previa

                    if ($return_var !== 0) {
                        echo json_encode(['error' => 'Error al crear vista previa del video.']);
                        exit;
                    }

                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress, $output, $return_var); // Ejecutar el comando FFmpeg para compresión

                    if ($return_var !== 0) {
                        echo json_encode(['error' => 'Error al comprimir el video.']);
                        exit;
                    }

                    unlink($target_path); // Borrar el video original

                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    // Enviar error en formato JSON
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit; // Terminar la ejecución
                }
            }
        }
        // Manejo de imágenes (jpeg, png, jpg)
        elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
            $target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
            if (move_uploaded_file($tmp_name, $target_path)) {
                // Si la categoría es "livs", solo permitimos un archivo
                if ($_POST['category'] === "livs") {
                    // Asignamos directamente el archivo a la primera posición de $uploaded_files
                    $uploaded_files[0] = $target_path; // Agregar imagen a la lista
                    break; // Salir del bucle después de subir un archivo
                } else {
                    // Para otras categorías, se permiten múltiples archivos
                    if (count($uploaded_files) < 20) { // Verifica que no haya más de 20 archivos
                        $uploaded_files[] = $target_path; // Agregar imagen a la lista
                    }
                }
            }
        }
    }
}

// Determina la categoría
$stricted = isset($_POST['category']) ? $_POST['category'] : 'post'; // Usar el valor de 'category' o 'post' como predeterminado

// Asignación de fotos a variables
$photos = array_fill(0, 20, null); // Crear un array con espacios nulos para las fotos
foreach ($uploaded_files as $key => $file) {
    $photos[$key] = $file;
}

// Procesar información adicional para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
    $quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
    $quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . mysqli_real_escape_string($conexion, $filo['username']) . "' ORDER BY id DESC");
    $qilo = mysqli_fetch_assoc($quala);
    $quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'] ?? '';
$busquedapro2 = ... // Tu lógica existente para manejar caracteres especiales y reemplazos
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . implode("','", $photos) . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");

$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach ($palabras_con_arroba[0] as $palabra) {
    $chopo = mysqli_query($conexion, "SELECT * FROM profileuser where username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC limit 1");
    if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {
        $chopop = mysqli_query($conexion, "SELECT * FROM newnotification where frame='etiqueta' and username='" . $username . "' and idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC limit 1");
        if ($comem = mysqli_fetch_assoc($chopop)) {
            mysqli_query($conexion, "UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') where idsug not like '%," . $loupa['id'] . ",%' and username='" . $username . "' and idbug='" . $ultimo_id_insertado . "'");
        } elseif ($comem['idbug'] !== $ultimo_id_insertado) {
            mysqli_query($conexion, "INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0,'" . $username . "','etiqueta','te ha etiquetado en una publicación')");
        }
    }
}

echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);

### Cambios y Mejoras Realizadas:

1. Verificación de Errores de FFmpeg: Se agregó el manejo de errores al ejecutar FFmpeg, asegurando que se manejen los problemas en la creación de vistas previas y compresión.

2. Uso de un Array para las Imágenes: Se utilizó un array ($photos) para manejar y asignar las fotos a las variables al final, lo que simplifica el código.

3. Manejo de Errores de Base de Datos: Se utilizó mysqli_real_escape_string() al manejar los resultados de consultas para evitar problemas de inyección SQL.

4. Salida JSON Finalizada: Asegúrate de ejecutar json_encode solo al final, y verifica que el flujo del programa no produzca ningún tipo de salida antes de este.

### Consideraciones Finales

- Permisos de Archivo: Asegúrate de que el servidor tenga permisos para escribir en las carpetas de subida.

- FFmpeg: Verifica que FFmpeg esté correctamente instalado y configurado en tu servidor.

- Manejo de Errores: Realiza pruebas exhaustivas para manejar diferentes escenarios, como archivos faltantes o tipos incorrectos.

Si experimentas más errores después de estos cambios, proporciona mensajes de error específicos para ajustarlo aún más. ¡Espero que esto ayude!
 
Revisemos el código que has proporcionado y abordemos algunos posibles errores que podrían estar causando fallos en la carga de archivos o en la consulta a la base de datos. Haré ajustes y comentarios para mejorar la legibilidad y la funcionalidad.

### Código Optimizado y Solucionado

Aquí tienes una versión revisada de tu código, incluyendo las mejoras y manejo de errores.

PHP:
$uploaded_files = [];

// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];
        $target_path = '';

        // Manejo de videos
        if ($fileType === "video/mp4") {
            if (is_uploaded_file($tmp_name)) {
                sleep(1);
               
                $base_name = mt_rand(1, 100) . bin2hex(random_bytes(5)); // Base del nombre
                $target_path = 'upload/compressed/a' . $base_name . '.mp4'; // Ruta del video
               
                if (move_uploaded_file($tmp_name, $target_path)) {
                    // Crear un preview del video
                    $preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Ruta para la preview
                    $command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
                    exec($command_preview, $output, $return_var); // Ejecutar el comando FFmpeg para vista previa

                    if ($return_var !== 0) {
                        echo json_encode(['error' => 'Error al crear vista previa del video.']);
                        exit;
                    }

                    // Comando para convertir y comprimir el video
                    $compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
                    $command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
                    exec($command_compress, $output, $return_var); // Ejecutar el comando FFmpeg para compresión

                    if ($return_var !== 0) {
                        echo json_encode(['error' => 'Error al comprimir el video.']);
                        exit;
                    }

                    unlink($target_path); // Borrar el video original

                    // Manejo de categorías
                    if ($_POST['category'] === "livs") {
                        $uploaded_files[0] = $compressed_path; // Agregar video a la lista
                        break; // Salir del bucle
                    } else {
                        if (count($uploaded_files) < 20) {
                            $uploaded_files[] = $compressed_path; // Agregar a la lista
                        }
                    }
                } else {
                    // Enviar error en formato JSON
                    echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                    exit; // Terminar la ejecución
                }
            }
        }
        // Manejo de imágenes (jpeg, png, jpg)
        elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
            $target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
            if (move_uploaded_file($tmp_name, $target_path)) {
                // Si la categoría es "livs", solo permitimos un archivo
                if ($_POST['category'] === "livs") {
                    // Asignamos directamente el archivo a la primera posición de $uploaded_files
                    $uploaded_files[0] = $target_path; // Agregar imagen a la lista
                    break; // Salir del bucle después de subir un archivo
                } else {
                    // Para otras categorías, se permiten múltiples archivos
                    if (count($uploaded_files) < 20) { // Verifica que no haya más de 20 archivos
                        $uploaded_files[] = $target_path; // Agregar imagen a la lista
                    }
                }
            }
        }
    }
}

// Determina la categoría
$stricted = isset($_POST['category']) ? $_POST['category'] : 'post'; // Usar el valor de 'category' o 'post' como predeterminado

// Asignación de fotos a variables
$photos = array_fill(0, 20, null); // Crear un array con espacios nulos para las fotos
foreach ($uploaded_files as $key => $file) {
    $photos[$key] = $file;
}

// Procesar información adicional para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';

if (mysqli_num_rows($querim) === 0) {
    $quid .= '0,';
}

$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
    $quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . mysqli_real_escape_string($conexion, $filo['username']) . "' ORDER BY id DESC");
    $qilo = mysqli_fetch_assoc($quala);
    $quid .= '0,' . $qilo['id'] . ',';
}

$friendfly = str_replace(",0,", ",", $quid);

$mensajepro = $_POST['mensaje'] ?? '';
$busquedapro2 = ... // Tu lógica existente para manejar caracteres especiales y reemplazos
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));

mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . implode("','", $photos) . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");

$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach ($palabras_con_arroba[0] as $palabra) {
    $chopo = mysqli_query($conexion, "SELECT * FROM profileuser where username='" . str_replace('@', '', $palabra) . "' ORDER BY id DESC limit 1");
    if ($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id) {
        $chopop = mysqli_query($conexion, "SELECT * FROM newnotification where frame='etiqueta' and username='" . $username . "' and idbug='" . $ultimo_id_insertado . "' ORDER BY id DESC limit 1");
        if ($comem = mysqli_fetch_assoc($chopop)) {
            mysqli_query($conexion, "UPDATE newnotification SET idsug=CONCAT(idsug,'" . $loupa['id'] . ",') where idsug not like '%," . $loupa['id'] . ",%' and username='" . $username . "' and idbug='" . $ultimo_id_insertado . "'");
        } elseif ($comem['idbug'] !== $ultimo_id_insertado) {
            mysqli_query($conexion, "INSERT INTO newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('" . date("d-m-Y H:i:s") . "','" . date('d M Y') . "','" . $ultimo_id_insertado . "','0," . $loupa['id'] . ",','0,'" . $username . "','etiqueta','te ha etiquetado en una publicación')");
        }
    }
}

echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);

### Cambios y Mejoras Realizadas:

1. Verificación de Errores de FFmpeg: Se agregó el manejo de errores al ejecutar FFmpeg, asegurando que se manejen los problemas en la creación de vistas previas y compresión.

2. Uso de un Array para las Imágenes: Se utilizó un array ($photos) para manejar y asignar las fotos a las variables al final, lo que simplifica el código.

3. Manejo de Errores de Base de Datos: Se utilizó mysqli_real_escape_string() al manejar los resultados de consultas para evitar problemas de inyección SQL.

4. Salida JSON Finalizada: Asegúrate de ejecutar json_encode solo al final, y verifica que el flujo del programa no produzca ningún tipo de salida antes de este.

### Consideraciones Finales

- Permisos de Archivo: Asegúrate de que el servidor tenga permisos para escribir en las carpetas de subida.

- FFmpeg: Verifica que FFmpeg esté correctamente instalado y configurado en tu servidor.

- Manejo de Errores: Realiza pruebas exhaustivas para manejar diferentes escenarios, como archivos faltantes o tipos incorrectos.

Si experimentas más errores después de estos cambios, proporciona mensajes de error específicos para ajustarlo aún más. ¡Espero que esto ayude!
POST https://link.site/upload.php 500
(anonymous) @ prom.php:37
prom.php:49 Error en la solicitud: SyntaxError: Unexpected end of JSON input
at prom.php:41:40
me sigue apareciendo este error
 
POST https://link.site/upload.php 500
(anonymous) @ prom.php:37
prom.php:49 Error en la solicitud: SyntaxError: Unexpected end of JSON input
at prom.php:41:40
me sigue apareciendo este error
El error 500 indica que hay un problema en el servidor y puede estar relacionado con varios factores en tu archivo PHP. Sugeriré un enfoque para depurar y solucionar el problema.

### Pasos para Diagnosticar y Solucionar el Error

1. Habilitar la Visualización de Errores:
Asegúrate de que la visualización de errores esté habilitada en tu script PHP. Esto te puede ayudar a identificar el problema:

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

Coloca estas líneas al inicio de tu archivo upload.php.

2. Revisar los Registros del Servidor:
Verifica los registros de errores del servidor para identificar la causa exacta del error 500. Dependiendo de tu servidor, podrías encontrar el registro de errores en:

- Apache: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log

Busca cualquier mensaje relacionado con tu solicitud y verifica la línea específica de upload.php donde ocurre el error.

3. Comprobar la Conexión a la Base de Datos:
Si tu script intenta conectarse a una base de datos, asegúrate de que la conexión es exitosa. Verifica las credenciales y la configuración:

Insertar CODE, HTML o PHP:
php
   $conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
   if (!$conexion) {
       die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
   }

4. Verificar la Lógica de Carga de Archivos:
Asegúrate de que la lógica para manejar la carga de archivos esté correctamente implementada. Por ejemplo, verifica que las carpetas donde subes archivos tengan los permisos correctos y que no haya errores en la ejecución de los comandos de FFmpeg.

5. Manejo de Respuestas JSON:
Asegúrate de que el script siempre devuelve una respuesta JSON, incluso en caso de error. Usa exit; después de cada respuesta para evitar que el script continúe ejecutándose:

Insertar CODE, HTML o PHP:
php
   echo json_encode(['error' => 'Mensaje de error aquí']);
   exit;

6. Simplificar el Código para Aislar el Problema:
Intenta simplificar el archivo upload.php temporalmente para ver si se produce el mismo error. Puedes probar con un script básico que solo conecte a la base de datos y responda con un JSON:

Insertar CODE, HTML o PHP:
php
   <?php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

   $conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
   if (!$conexion) {
       die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
   }

   echo json_encode(['success' => 'Conexión exitosa']);
   exit;

7. Comprobar el Código Teniendo en Cuenta los Tipos de Archivos:
Verifica que estés manejando correctamente diferentes tipos de archivos y que no haya un tipo enviado que no esperas. Por ejemplo, si subes un tipo de archivo no soportado, podría causar que la lógica falle.

Si después de seguir estos pasos todavía enfrentas el error, comparte cualquier mensaje de error que encuentres en los registros o en la salida de errores. Esto ayudará a proporcionar una solución más específica.
 
El error 500 indica que hay un problema en el servidor y puede estar relacionado con varios factores en tu archivo PHP. Sugeriré un enfoque para depurar y solucionar el problema.

### Pasos para Diagnosticar y Solucionar el Error

1. Habilitar la Visualización de Errores:
Asegúrate de que la visualización de errores esté habilitada en tu script PHP. Esto te puede ayudar a identificar el problema:

Insertar CODE, HTML o PHP:
php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

Coloca estas líneas al inicio de tu archivo upload.php.

2. Revisar los Registros del Servidor:
Verifica los registros de errores del servidor para identificar la causa exacta del error 500. Dependiendo de tu servidor, podrías encontrar el registro de errores en:

- Apache: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log

Busca cualquier mensaje relacionado con tu solicitud y verifica la línea específica de upload.php donde ocurre el error.

3. Comprobar la Conexión a la Base de Datos:
Si tu script intenta conectarse a una base de datos, asegúrate de que la conexión es exitosa. Verifica las credenciales y la configuración:

Insertar CODE, HTML o PHP:
php
   $conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
   if (!$conexion) {
       die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
   }

4. Verificar la Lógica de Carga de Archivos:
Asegúrate de que la lógica para manejar la carga de archivos esté correctamente implementada. Por ejemplo, verifica que las carpetas donde subes archivos tengan los permisos correctos y que no haya errores en la ejecución de los comandos de FFmpeg.

5. Manejo de Respuestas JSON:
Asegúrate de que el script siempre devuelve una respuesta JSON, incluso en caso de error. Usa exit; después de cada respuesta para evitar que el script continúe ejecutándose:

Insertar CODE, HTML o PHP:
php
   echo json_encode(['error' => 'Mensaje de error aquí']);
   exit;

6. Simplificar el Código para Aislar el Problema:
Intenta simplificar el archivo upload.php temporalmente para ver si se produce el mismo error. Puedes probar con un script básico que solo conecte a la base de datos y responda con un JSON:

Insertar CODE, HTML o PHP:
php
   <?php
   error_reporting(E_ALL);
   ini_set('display_errors', 1);

   $conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');
   if (!$conexion) {
       die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
   }

   echo json_encode(['success' => 'Conexión exitosa']);
   exit;

7. Comprobar el Código Teniendo en Cuenta los Tipos de Archivos:
Verifica que estés manejando correctamente diferentes tipos de archivos y que no haya un tipo enviado que no esperas. Por ejemplo, si subes un tipo de archivo no soportado, podría causar que la lógica falle.

Si después de seguir estos pasos todavía enfrentas el error, comparte cualquier mensaje de error que encuentres en los registros o en la salida de errores. Esto ayudará a proporcionar una solución más específica.
me sale el mismo error
 
me sale el mismo error
Entiendo que el error persiste. Vamos a hacer algunos pasos de depuración más específicos. Por favor, sigue estos pasos para intentar identificar el problema:

### 1. Simplificar el Script PHP

Para aislar el problema, simplifiquemos el archivo upload.php a lo esencial. Crea un nuevo archivo PHP con el siguiente contenido y verifica si funciona:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
}

// Solo maneja la carga de archivos para pruebas
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES['fotoshop'])) {
    $uploaded_files = [];
    
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Verifica que es un archivo de video
        if ($fileType === "video/mp4") {
            if (move_uploaded_file($tmp_name, 'upload/' . $_FILES['fotoshop']['name'][$key])) {
                $uploaded_files[] = 'upload/' . $_FILES['fotoshop']['name'][$key];
            } else {
                echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                exit;
            }
        }
    }

    echo json_encode(['success' => 'Archivos subidos', 'files' => $uploaded_files]);
    exit;
}

// Si no se envían archivos
echo json_encode(['error' => 'No se subieron archivos.']);
exit;
?>

### 2. Verifica el Formulario HTML

Asegúrate de que el formulario HTML que estás utilizando para enviar los archivos sea correcto. Debe tener el método POST y el tipo de codificación de datos apropiado:

HTML:
<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="fotoshop[]" multiple>
    <button type="submit">Subir Archivos</button>
</form>

### 3. Probar la Carga de Archivos

  • Asegúrate de probar la carga utilizando archivos de video en formato MP4.
  • Verás si se producen errores de conexión a la base de datos, carga o movimiento de archivos.

### 4. Revisa los Registros de Errores

Si aún obtienes un error 500 al probar con el script simplificado, revisa nuevamente los registros de errores del servidor. Busca cualquier mensaje que aparezca cuando envíes el formulario, ya que puede darte más contexto sobre el problema.

### 5. Comprobar Permisos de Carpeta

Verifica que la carpeta upload/ existe y tiene permisos de escritura:

Bash:
chmod 775 upload/

Asegúrate de que el propietario del servidor web tenga los permisos para escribir en esta carpeta.

### 6. Confirmar Funcionalidad de PHP y Extensiones

Asegúrate de que tu entorno de servidor PHP esté funcionando correctamente y que tengas habilitada la extensión mysqli y fileinfo. Puedes verificar esto creando un archivo info.php con el siguiente contenido:

PHP:
<?php
phpinfo();
?>

Abre este archivo en tu navegador y busca la sección de mysqli y fileinfo.

### 7. Verificar Configuración de PHP

Asegúrate de que tu archivo php.ini esté configurado correctamente para permitir la carga de archivos. Verifica las siguientes configuraciones:

INI:
file_uploads = On
upload_max_filesize = 20M ; Ajusta este valor según lo que necesites
post_max_size = 20M ; Asegúrate de que este valor sea mayor que el anterior

Si no consigues solucionar el problema con estos pasos, por favor proporciona cualquier mensaje específico de error encontrado en los registros de errores. Esto puede darnos más información sobre la causa del error y ayudar a solucionarlo.
 
Entiendo que el error persiste. Vamos a hacer algunos pasos de depuración más específicos. Por favor, sigue estos pasos para intentar identificar el problema:

### 1. Simplificar el Script PHP

Para aislar el problema, simplifiquemos el archivo upload.php a lo esencial. Crea un nuevo archivo PHP con el siguiente contenido y verifica si funciona:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Conexión a la base de datos
$conexion = mysqli_connect('localhost', 'usuario', 'contraseña', 'base_de_datos');

if (!$conexion) {
    die(json_encode(['error' => 'Error en la conexión: ' . mysqli_connect_error()]));
}

// Solo maneja la carga de archivos para pruebas
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES['fotoshop'])) {
    $uploaded_files = [];
   
    foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
        $fileType = $_FILES['fotoshop']['type'][$key];

        // Verifica que es un archivo de video
        if ($fileType === "video/mp4") {
            if (move_uploaded_file($tmp_name, 'upload/' . $_FILES['fotoshop']['name'][$key])) {
                $uploaded_files[] = 'upload/' . $_FILES['fotoshop']['name'][$key];
            } else {
                echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
                exit;
            }
        }
    }

    echo json_encode(['success' => 'Archivos subidos', 'files' => $uploaded_files]);
    exit;
}

// Si no se envían archivos
echo json_encode(['error' => 'No se subieron archivos.']);
exit;
?>

### 2. Verifica el Formulario HTML

Asegúrate de que el formulario HTML que estás utilizando para enviar los archivos sea correcto. Debe tener el método POST y el tipo de codificación de datos apropiado:

HTML:
<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="fotoshop[]" multiple>
    <button type="submit">Subir Archivos</button>
</form>

### 3. Probar la Carga de Archivos

  • Asegúrate de probar la carga utilizando archivos de video en formato MP4.
  • Verás si se producen errores de conexión a la base de datos, carga o movimiento de archivos.

### 4. Revisa los Registros de Errores

Si aún obtienes un error 500 al probar con el script simplificado, revisa nuevamente los registros de errores del servidor. Busca cualquier mensaje que aparezca cuando envíes el formulario, ya que puede darte más contexto sobre el problema.

### 5. Comprobar Permisos de Carpeta

Verifica que la carpeta upload/ existe y tiene permisos de escritura:

Bash:
chmod 775 upload/

Asegúrate de que el propietario del servidor web tenga los permisos para escribir en esta carpeta.

### 6. Confirmar Funcionalidad de PHP y Extensiones

Asegúrate de que tu entorno de servidor PHP esté funcionando correctamente y que tengas habilitada la extensión mysqli y fileinfo. Puedes verificar esto creando un archivo info.php con el siguiente contenido:

PHP:
<?php
phpinfo();
?>

Abre este archivo en tu navegador y busca la sección de mysqli y fileinfo.

### 7. Verificar Configuración de PHP

Asegúrate de que tu archivo php.ini esté configurado correctamente para permitir la carga de archivos. Verifica las siguientes configuraciones:

INI:
file_uploads = On
upload_max_filesize = 20M ; Ajusta este valor según lo que necesites
post_max_size = 20M ; Asegúrate de que este valor sea mayor que el anterior

Si no consigues solucionar el problema con estos pasos, por favor proporciona cualquier mensaje específico de error encontrado en los registros de errores. Esto puede darnos más información sobre la causa del error y ayudar a solucionarlo.
$compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress);

creo que es esta parte en mi codigo que hace que me envie ese error, como puedo solucionarlo?
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Temas similares

BotBeta
Respuestas
35
Visitas
143
josuerr29
josuerr29
Atrás
Arriba