Problema al modificar datos - Jquery Ajax PHP

Iniciado por ka0s, 16 Noviembre 2017, 09:53 AM

0 Miembros y 1 Visitante están viendo este tema.

ka0s

Buenos días gente, Tengo un sistema de noticias implementado. Al listar las noticias y clickear en el boton editarNoticia. Aparece la noticia con todos los campos para editar junto con un input "file" que si se edita una noticia, junto con su imagen, reemplaza a la anterior imagen que estaba subida cuando se creo la noticia.

El problema yo creo que está en el AJAX, no se que estoy haciendo mal o como llamar al ID de la noticia correspondiente. Yo ya hice el BORRAR y me funciona correctamente pero no se porque no me sale con el editar que es casi parecido.

Con esto traigo las noticias. (Esto funciona correctamente). No pongo el codigo anterior, pq no es necesario supongo.

Código (php) [Seleccionar]
elseif ($accion == 'editarNoticias'){

$id = $_POST['id'];

//Consulta BD Editar Noticia segun el ID.
$statement2 = $conexion->prepare("SELECT * FROM noticias WHERE idNoticia = $id");
$statement2->execute();
$noticias = $statement2->fetchAll();

//MODIFICAR DESDE ACA
echo "<h1 class='text-center m-5'>Editar noticias SB</h1>
<form id='formEditarNoticia' class='text-center' method='post' enctype='multipart/form-data'>";

foreach ($noticias as $noticia) {
echo "<div class='form-group mt-5'>
<input type='text' id='". $noticia['idNoticia'] ."' value='" . $noticia['idNoticia'] . "' name='idNoticia' >
<input type='text' name='imagenNoticia-guardada' value='" . $noticia['imagenNoticia'] . "'>
<input type='file' class='form-control-file mx-auto' name='imagenNoticia' id=' placeholder=' aria-describedby='fileHelpId'>
<small id='fileHelpId' class='form-text text-muted text-center'>Seleccione la imagen que quiere subir...</small></div>

<div class='col mx-auto mb-3'>
    <input name='tituloNoticia' type='text' class='form-control' value='" . $noticia['tituloNoticia'] . "'>
</div>

<div class='col mx-auto mb-3'>
<input name='noticiaCorta' type='text' class='form-control' value='" . $noticia['noticiaCorta'] . "'>
</div>

<div class='col mb-3'>
    <textarea name='noticiaCompleta' rows='20' cols='50' type='text' class='form-control'>"
    . $noticia['noticiaCompleta'] . "</textarea>
</div>

<div class='d-inline-block'>
    <button class='enviarEditarNoticia btn btn-success'>EDITAR NOTICIA</button>
    <a href='index.php'><button type='button' class='btn btn-warning'>VOLVER</button></a>
</div>
</form>";
}

}


Una vez que visualizo la noticia, la edito y le doy al botón EDITAR NOTICIA (que su clase es enviarEditarNoticia) y su AJAX el siguiente (A MI PARECER EL PROBLEMA ES AQUÍ... No se como enviarle el ID de la noticia ya que en DATA estoy usando el formData.":

Código (javascript) [Seleccionar]
        $("#seccionEditarNoticia").on("click", ".enviarEditarNoticia", function()
     {
        $('#formEditarNoticia').serialize();
        $.ajax({
            type: "POST",
            url: "subirNoticia.php?p=modificar",
            data: new FormData($('#formEditarNoticia')[2]),
            contentType: false,
            processData:false,
            success: function(datos) {
                $('#mensaje').empty();
                $('#mensaje').append(datos);
            }
        });
    });   


Y bueno al clickear .enviarEditarNoticia debería hacer esto:

Código (php) [Seleccionar]
}elseif ($accion == 'modificar') {

if (isset($_POST['id'])) {
    $id = $_POST['id'];
}

    $idNoticia = $_POST['idNoticia'];
    $imagenNoticia_guardada = $_POST['imagenNoticia-guardada'];
    $imagenNoticia = $_FILES['imagenNoticia'];
    $tituloNoticia = $_POST['tituloNoticia'];
    $noticiaCorta = $_POST['noticiaCorta'];
    $noticiaCompleta = $_POST['noticiaCompleta'];

    if (empty($imagenNoticia['name'])) {
        $imagenNoticia = $imagenNoticia_guardada;
    } else {
        $carpeta_destino = '../img/noticias/';
        $archivo_subido = $carpeta_destino . $_FILES['imagenNoticia']['name'];
        move_uploaded_file($_FILES['imagenNoticia']['tmp_name'], $archivo_subido);
        $imagenNoticia = $_FILES['imagenNoticia']['name'];
    }

        $statement = $conexion->prepare(
        "UPDATE noticias SET tituloNoticia = :tituloNoticia, noticiaCorta = :noticiaCorta, noticiaCompleta = :noticiaCompleta, imagenNoticia = :imagenNoticia WHERE idNoticia = $idNoticia"
    );

    $statement->execute(array(
        ':tituloNoticia' => $tituloNoticia,
        ':noticiaCorta' => $noticiaCorta,
        ':noticiaCompleta' => $noticiaCompleta,
        ':imagenNoticia' => $imagenNoticia
    ));

        echo "La noticia ha sido editada correctamente.";

     }


No puse el codigo completo del IF con el agregar o borrar porque eso funciona correctamente.

He intentado muchas cosas, puedo insertar y borrar pero no puedo modificar porque no se como enviar mis nuevos valores ingresados en los input. En el insertar y borrar yo usaba el data: pero ahora en el modificar en el data tengo el data: new FormData, entonces no se como implementarlo.

Otra cosa que he notado es que cuando escribo en los input para modificar, he mirado con firebug y el atributo value= no cambia. O sea el input en el navegador ingresa mi texto, pero miro internamente y el value sigue igual que como llegó.

Espero que me puedan dar una mano, debe ser una tonteria... pero me tiene loco hace 2 dias! :(

Muchas gracias por leer!



ka0s

Creo que he avanzado algo, me di cuenta que el
Código (javascript) [Seleccionar]
$('#formEditarNoticia').serialize();

No hacia nada, porque mi formulario #formEditarNoticia no tenía ningún atributo name.
Ahora al darle enviar. Me arroja los errores:

Notice: Undefined index: idNoticia in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 34

Notice: Undefined index: imagenNoticia-guardada in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 35

Notice: Undefined index: imagenNoticia in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 36

Notice: Undefined index: tituloNoticia in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 37

Notice: Undefined index: noticiaCorta in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 38

Notice: Undefined index: noticiaCompleta in C:\MAMP\htdocs\Web\admin\subirNoticia.php on line 39
.

La verdad no se porque me dice eso si yo lo tengo asi:

Código (php) [Seleccionar]
elseif ($accion == 'modificar') {

        $idNoticia = $_POST['idNoticia']; //linea 34
        $imagenNoticia_guardada = $_POST['imagenNoticia-guardada'];//linea 35
        $imagenNoticia = $_FILES['imagenNoticia'];//linea 36
        $tituloNoticia = $_POST['tituloNoticia'];//linea 37
        $noticiaCorta = $_POST['noticiaCorta'];//linea 38
        $noticiaCompleta = $_POST['noticiaCompleta'];//linea 39


Me esta volviendo loco esto! :(