Hur ska man göra för att få det rätt? 'userID' och 'updateUser' ger rätt värde men det skriver inte till mysql databasen.
include "conn.php";
$userID = intval($_GET['id']);
$updateUser = $_POST['username'];
$sql = "UPDATE members SET user = '$updateUser' where id = $userID";
Ja nu såg jag. Är nybörjare som du förstår. Tackar :)
$sql = "UPDATE members SET user = '$updateUser', pass = '$updatePass' where id = $userID";
$result = mysql_query($sql);
header("Location: register.php?action=user");
exit;
Jag tycker att du ska läsa på om PDO och/eller mysqli. mysql-funktionerna i PHP är deprecated. Det betyder att de kommer att tas bort ur PHP i någon relativt närstående version.
Det är kanske en lite högre inlärningströskel, speciellt för PDO som är enbart objektorienterad, men det är det värt. Dels för att framtidssäkra din kod, men också ur säkerhetssynpunkt då PDO och mysqli har stöd för prepared statements som ger skydd mot SQL injections som casca gav prov på här ovanför.
Klart mycket säkrare, dock borde det generera ett felmeddelande. Du behöver deklarera $conn som global för att kunna använda den i funktionen DoSafe, alternativt skicka med $conn som argument till funktionen. Jag skulle föredra att skicka med $conn som argument till funktionen.
Eftersom $conn är en instans av klassen mysqli kan du använda den som ett objekt.
function DoSafe($conn, $string) {
return $conn->real_escape_string($string);
}
Läs gärna på om prepared statements i PHP-manualen. Då skulle du slippa DoSafe-funktionen, eftersom prepare fixar så att datat är säkert.
Med ett prepared statement skulle det kunna se ut så här:
$stmt = $conn->prepare('UPDATE members SET user=?, pass=?, niva=?, email=? WHERE id=?');
$stmt->bind_param('ssssi', $_POST['username'], $_POST['userpass'], $_POST['userniva'], $_POST['usermail'], $_GET['id']);
$stmt->execute();
En fråga. Detta gäller väl enbart vid update, skapande av ny user mm där man kan skriva till databasen. När man tex läser ut users behövs det väl inte?
ex
include "conn.php";
$id = intval($_GET['id']);
$sql = 'SELECT * FROM members WHERE id = ?';
if($stmt = $conn->prepare($sql))
{
$stmt->bind_param('i',$id);
$stmt->execute();
$stmt->store_result();
$num_of_rows = $stmt->num_rows;
$stmt->bind_result($id, $user, $pass, $niva, $email);
while ($stmt->fetch())
{
echo 'ID: '.$id.'<br>';
echo 'Namn: '.$user.'<br>';
echo 'Lösenord: '.$pass.'<br>';
echo 'Nivå: '.$niva.'<br>';
echo 'E-Mail: '.$email.'<br>';
}
$stmt->free_result();
$stmt->close();
}
$conn->close();
Det viktiga är att du inte skickar in data direkt från användaren till SQL-frågan, oavsett om SQL-frågan är en SELECT, UPDATE, INSERT, DELETE eller vad det nu är. Kommer datat från något som användaren kan påverka (som POST, GET eller COOKIE) så måste du se till att datat är säkert och i det format som du förväntar dig (heltal när det ska vara heltal till exempel).
Sen spelar det inte så stor roll vilken metod du väljer för att säkra upp data från användaren. Prepared statements tycker jag är användbart i många fall, men i vissa fall kanske det blir onödigt komplicerat.
Vid en snabb överblick ser det ut som att dina kodblock ska fungera. Eventuellt kanske du vill kontrollera vad prepare respektive execute returnerar så att det fungerar som det är tänkt :)
247 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849