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_start
serí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 UPDATE
se 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.
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP