Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema al editar entradas

Estas en el tema de Problema al editar entradas en el foro de PHP en Foros del Web. Hola a tod@s. Estoy creando una página de edición de entradas de un blog en php y me encuentro con el siguiente problema. Después de ...
  #1 (permalink)  
Antiguo 25/05/2016, 02:17
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Problema al editar entradas

Hola a tod@s.
Estoy creando una página de edición de entradas de un blog en php y me encuentro con el siguiente problema.
Después de loguearse, un administrador puede, evidentemente, editar una entrada. Pues bien, con el código que tengo actualmente me actualiza TODAS las entradas de la base de datos. Es decir si cambio el título de la entrada con el id=6 me cambia todos los títulos de entradas. Esto me pasa con el título y también con el texto, las etiquetas y el autor.

El administrador entra a editarentrada.php:
Código PHP:
<?php
                      $consulta 
$conexion -> query("SELECT * FROM entradas ORDER BY id DESC") or die ("Ha fallado la conexión");
                        while ( 
$registro $consulta -> fetch_assoc() ) {
                  
                          
$id $registro['id'];
                          
$titulo $registro['titulo'];
                          
$textobreve $registro['textobreve'];
                          
$textocompleto $registro['textocompleto'];
                          
$autor $registro['autor'];
                          
$fecha $registro['fecha'];
                          
$fechamostrada strtotime("$fecha");
                          
$etiqueta1 $registro['etiqueta1'];
                          
$etiqueta2 $registro['etiqueta2']; 
                  
?>
                          <div class="post-heading">
                          <h3><a href="detalle.php?id=<?php echo $id?>"><?php echo $titulo ?></a></h3>
                          </div>
                              <a href="editar.php?id=<?php echo $id?>" class="pull-right">Editar <i class="icon-angle-right"></i></a>
                            </div>
                        <?php }
                    
?>
Aquí seleccionamos la entrada que queremos editar y mando la información vía GET a editar.php?id= , donde aparece el formulario con los datos que hay en la entrada y un botón para actualizar.

Código HTML:
<div class="container"> 
Código PHP:
<?php
                  
include 'conexion_educamadrid.php';
 
                  
$consulta $conexion -> query("SELECT * FROM entradas WHERE id = '{$_GET['id']}' ") or die ("Ha fallado la conexión");
                    while ( 
$registro $consulta -> fetch_assoc() ) { 
                            
                      
$id $_GET['id'];
                      
$titulo $registro['titulo'];
                      
$textobreve $registro['textobreve'];
                      
$textocompleto $registro['textocompleto'];
                      
$fecha $registro['fecha'];
                      
$fechamostrada strtotime("$fecha");
                      
$autor $registro['autor'];
                      
$etiqueta1 $registro['etiqueta1'];
                      
$etiqueta2 $registro['etiqueta2'];
                      }                   
                
?>
Código HTML:
 <div class="post-heading">
                        <h3><?php echo $titulo ; ?></h3>
                      </div>
                      <p><?php echo $textocompleto; ?>
                      </p>
                      <div class="bottom-article">
                        <ul class="meta-post">
                          <li><i class="icon-calendar"></i><?php echo date ('d/m/Y', $fechamostrada); ?></a></li>
                          <li><i class="icon-user"></i><a href="#"><?php echo $autor ; ?></a></li>
                          <li><i class="icon-folder-open"></i><a href="#"><?php echo $etiqueta1 ; ?></a></li>
                          <li><i class="icon-folder-open"></i><a href="#"><?php echo $etiqueta2 ; ?></a></li>
                          <li><i class="icon-comments"></i><a href="#">4 Comments</a></li>
                        </ul>
                      </div>
                      <br />
                      <form action="editadaok.php" method="post">
                      <h6>Título </h6><input type="text" name="titulonuevo" size="100" value="<?php echo $titulo ?>"><br /></input><br />
                      <h6>Breve resumen </h6><textarea name="textobrevenuevo" rows="3" cols="110"><?php echo $textobreve ?></textarea><br />
                      <h6>Cuerpo de la entrada </h6><textarea name="textocompletonuevo" rows="10" cols="110"><?php echo $textocompleto ?></textarea><br />
                      <table width="100%" cellspacing="100" cellpadding="100">
                       <tr>
                         <td><h6>Autor </h6><input type="text" name="autornuevo" size="15" value="<?php echo $autor ?>"><br /></input><br /></td>
                         <td><h6>Fecha </h6><input type="date" name="fechanueva" value="<?php echo $fechamostrada ?>"><br /></input><br /></td>
                         <td><h6>Etiqueta 1 </h6><input type="text" name="etiqueta1nueva" size="15" value="<?php echo $etiqueta1 ?>"><br /></input><br /></td>
                         <td><h6>Etiqueta 2 </h6><input type="text" name="etiqueta2nueva" size="15" value="<?php echo $etiqueta2 ?>"><br /></input><br /></td>
                       </tr>  
                      </table>
                      <input type="submit" value="Actualizar"></input><br />
                      <br /><a href="editarentrada.php" class="btn btn-theme"><i class="fa fa-reply" aria-hidden="true"></i> Regresar al menú de entradas</a>
                      </form>
            </div> 
El formulario manda la acción a editadaok.php, que tiene el siguiente código:

Código PHP:
<?php
    
include 'conexion_educamadrid.php';
 
      
$consulta $conexion -> query("SELECT * FROM entradas") or die ("Ha fallado la conexión");
                           while ( 
$registro $consulta -> fetch_assoc() ) { 
 
                             
$titulo $registro['titulo'];
                             
$textobreve $registro['textobreve'];
                             
$textocompleto $registro['textocompleto'];
                             
$fecha $registro['fecha'];
                             
$fechamostrada strtotime("$fecha");
                             
$autor $registro['autor'];
                             
$etiqueta1 $registro['etiqueta1'];
                             
$etiqueta2 $registro['etiqueta2'];
                           }                
                       
         if (isset(
$_POST['titulonuevo'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET titulo = '{$_POST['titulonuevo']}' WHERE titulo = '$titulo'"); 
         echo 
"<br />"."Título actualizado a: "?>
          <div class="post-heading">
                          <h3><?php echo $_POST['titulonuevo']."<br />" ?></h3>
                        </div> <?php
         
}
         else {
                 echo 
"Error, no se ha podido actualizar ".$titulo
                     }
 
      if (isset(
$_POST['textobrevenuevo'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET textobreve = '{$_POST['textobrevenuevo']}' WHERE textobreve = '$textobreve'"); 
         echo 
"<br />"."Texto breve actualizado a: " ?>
          <p><?php echo $_POST['textobrevenuevo']."<br />" ?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$textobreve
                     }
      if (isset(
$_POST['textocompletonuevo'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET textocompleto = '{$_POST['textocompletonuevo']}' WHERE textocompleto = '$textocompleto'"); 
         echo 
"<br />"."Texto completo actualizado a: " ?>
          <p><?php echo $_POST['textocompletonuevo']."<br />"?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$textocompleto
                     }
      if (isset(
$_POST['fechanueva'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET fechamostrada = '{$_POST['fechanueva']}' WHERE fechamostrada = '$fechamostrada'");
         echo 
"<br />"."Fecha actualizada a: " ?>
          <p><?php echo $_POST['fechanueva']."<br />"?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$fechamostrada
                     }
      if (isset(
$_POST['autornuevo'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET autor = '{$_POST['autornuevo']}' WHERE autor = '$autor'");  
        echo 
"<br />"."Autor actualizado a: " ?>
        <p><?php echo $_POST['autornuevo']."<br />"?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$autor
                     }
      if (isset(
$_POST['etiqueta1nueva'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET etiqueta1 = '{$_POST['etiqueta1nueva']}' WHERE etiqueta1 = '$etiqueta1'");
         echo 
"<br />"."Etiqueta 1 actualizada a: " ?>
          <p><?php echo $_POST['etiqueta1nueva']."<br />"?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$etiqueta1;
                  }
      if (isset(
$_POST['etiqueta2nueva'] )) {
         
$consulta $conexion ->query("UPDATE entradas SET etiqueta2 = '{$_POST['etiqueta2nueva']}' WHERE etiqueta2 = '$etiqueta2'");
         echo 
"<br />"."Etiqueta 2 actualizada a: "  ?>
          <p><?php echo $_POST['etiqueta2nueva']."<br />"?></p>
          <?php }
         else {
                 echo 
"Error, no se ha podido actualizar ".$etiqueta2
                  }
      
?>
Os agradezco si podéis echarle un vistazo para ayudarme a encontrar el error.
Gracias de antemano
  #2 (permalink)  
Antiguo 25/05/2016, 07:42
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Problema al editar entradas

Tu planteamiento me parece un poco enrevesado y lioso la verdad

Yo pasaría también el id a editadaok.php y me limitaría a recuperar todos los registros traidos desde el formulario y validar sus datos ( cosa que no veo que hagas por ningún lado ), para luego hacer un único update en base a ese id y nada más.

Los update los tienes que hacer estableciendo el where mediante el PK. Si no te cambiará todos los registros donde coincida.

Como ejemplo :
Código SQL:
Ver original
  1. ... WHERE autor = '$autor' //modifica todos los registros donde coincida el autor
  2. ... WHERE etiqueta1 = '$etiqueta1' // modifica todos los registros donde coincida etiqueta1
  3. Etc..

Es mas práctico hacer
Código PHP:
Ver original
  1. $id=$_POST [ 'id'];
  2. $autor=$_POST [ 'autor'];
  3. $etiqueta1=$_POST [ 'etiqueta1'];
  4. // ... Resto de campos
  5.  
  6. //validaciones pertinentes y escape de datos para sql
  7.  
  8.  
  9. $sql=" UPDATE entradas SET etiqueta1='{$etiqueta1}', autor='{$autor}' /* resto de campos */
  10. WHERE id=$id";

Algo así, estoy con el móvil y codear es un poco impracticable, pero creo que te puedes hacer una idea de a que me refiero.
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 25/05/2016 a las 08:03
  #3 (permalink)  
Antiguo 26/05/2016, 03:25
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Problema al editar entradas

Muchas gracias, con tus indicaciones he podido solucionar el problema.

Etiquetas: blog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:02.