TransWikia.com

Como utilizar bien el id de la session_start a para utilizarlo en el UPDATE de una base de datos

Stack Overflow en español Asked on November 7, 2021

Esto me esta llevando unos cuantos días/semanas en solucionar, en un principio me pareció fácil, pero veo que no, explico:
A partir de una base de usuarios session_start empieza una session por el usuario que ha hecho Login. Todo bien pero aquí llega a la hora de el UPDATE, el usuario tiene la opción de actualizar su información almacenada, placeholders social1, social2 , aboutt.
Cada usuario tiene id único.
El problema llega al no saber yo como entrelazar el id que creo que me da la session_start con el archivo de actualizar.
Que yo creo que por eso me da este error, Array ( [0] => 00000 [1] => [2] => )que por lo que se eso significa que el codigo funciona pero no hace la funcionalidad deseada. No actualizando el registro de dicho usuario.
Por eso creo que utilizar el id dado por session_startsería la clave que haría funcionar el código bien y insertarlo donde pertenece.

Formulario para introducir los datos que remplazaran a los otros
Aquí <input type='hidden' name='id' > es lo único que se me ha ocurrido, pero está mal.

<?php
 session_start();
 include 'pd.cambio.conn.php';
 
 ?>
 <html>
 <head>
<title>Actualizar Libro</title>
<h1 class="username"><?php echo $_SESSION['name']; ?></h1>
     
 
 </head>
 <body>
 
     <form action='actualizardos.php' method='post'>
     <table>
         <tr>
         <input type='hidden' name='id'  >
             <td>Autor:</td>
             <td><input type='text' name='social1' pattern=[A-Zsa-z]{3,20} ></td>
         </tr>
         <tr>
             <td>Fecha Edición:</td>
             <td><input type='text' name='social2' pattern=[A-Zsa-z]{3,20}></td>
         </tr>
         <tr>
         <td>Fecha Edición:</td>
             <td><input type='text' name='aboutt' pattern=[A-Zsa-z]{3,20}></td>

              
</tr>

</table>
<input type='submit' name='actualizar' >

 </form>
 </body>
 </html>


?>

Archivo php que hace todo el trabajo del UPDATE

<?php
session_start();
require 'pd.cambio.conn.php';   
if(isset($_POST['actualizar'])){
    $id=trim($_POST['id']);
    $social1=trim($_POST['social1']);
    $social2=trim($_POST['social2']);
    $aboutt=trim($_POST['aboutt']);
    $data = [
        'social1' => $social1,
        'social2' => $social2,
        'aboutt' => $aboutt,
        'id' => $id,
    ];
    $sql = "UPDATE users SET social1=:social1, social2=:social2, aboutt=:aboutt WHERE id=:id";
    $stmt= $pdo->prepare($sql);
    $stmt->execute($data);

    if($stmt->rowCount() > 0)
    {
    $count = $sqli -> rowCount();
    echo "<div class='content alert alert-primary' > 
    
    Gracias: $count registro ha sido actualizado  </div>";
    }
    else{
        echo "<div class='content alert alert-danger'> No se pudo actulizar el registro  </div>";
    
    print_r($stmt->errorInfo()); 
    }
    

       }
   


?>

Aquí creo que es donde se tienen que hacer los cambios.

conexión a la base de datos

<?php
// Connection variables
$dbhost = "localhost";     // localhost or IP
$dbuser = "root";         // database username
$dbpass = "";            // database password
$dbname = "xxxx";    // database name

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$dsn = "mysql:localhost=$dbhost;dbname=$dbname";
try {
     $pdo = new PDO($dsn, $dbuser, $dbpass, $options);
} catch (PDOException $e) {
     throw new PDOException($e->getMessage(), (int)$e->getCode());
}


?>

Repito, aquí creo que el problema existe al no vincular el id del UPDATE con el de session_start pero creo que también lo puede tener el archivo que hace la actualización.
Lo que me sale ahora cuando lo hago es: No se pudo actualizar el registro
Array ( [0] => 00000 1 => [2] => )
Muchas gracias de antemano, un crack el que me ayude!

ACTUALIZACIÓN
EL código actualizado, ahora con el resultado: 0 records UPDATED successfully que lo entiendo perfectamente ya que no se declara a que id de phpmyadmin tiene que ir los datos actualizados . El id es un numero único que ya fue dado por el autoIncrement en phpmyadmin. (El formulario es el mismo, no hay cambios en él)

<?php
session_start();
include 'pd.cambio.conn.php';
try{    
$conn = new PDO("mysql:localhost=$dbhost; phplogin=$dbname", $dbuser, $dbpass);
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
 $pdo = "UPDATE users  
 SET social1 = :social1,
     social2 = :social2,
     aboutt = :aboutt
     
WHERE id = :id";               



 $statement = $conn->prepare($pdo);
 $statement->bindParam(":social1", $social1);
 $statement->bindParam(":social2", $social2);
 $statement->bindParam(":aboutt", $aboutt);
 $count = $statement->execute();

  
 echo $statement->rowCount() . " records UPDATED successfully";
}catch(PDOException $e) {
  echo $e->getMessage();
}
   
   $conn = null;        // Disconnect
?>

EL código de UPDATEse asemeja bastante al dado por W3schools.
La pregunta sobre el utilizar el id de phpmyadmin con sesión abierta para update ha sido formulada aquí ya que no quiero sobrecargar esta pregunta con mucha información para futuras visualizaciones buscando este determinado problema.

One Answer

Lo que pasa es que estás llevando un campo vacío en el "input id hidden" trata de hacer lo siguiente:

Donde imprimes $_SESSION['name']; asimilo que lo traes de la tabla user al hacer login.. bueno trata de hacer lo siguiente:

$id= $_SESSION['id']; // Así como traes el name del user podrás traer su ID y esa variable imprimela en el value del campo id hidden de tu formulario para que se pueda enviar al controller para hacer el proceso del UPDATE :)

saludos, espero te sea de ayuda mi comentario.

Answered by Jairo Velasquez on November 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP