02. august 2005 - 20:11Der er
26 kommentarer og 1 løsning
opdatering af bruger info
Har 8 brugere, oprettet i et table der er navngivet "brugere". I tabellen er der oprettet id, brugernavn, password, og en masse info tables... så som bosted, alder osv ik ?
Jeg skal finde en måde at få brugerne til at kunne opdatere sin egen info... Altså når de logger ind, og de går til Edit Profile, skal deres info hentes fra table, og den info skal de være i stand til at ændre, og gemme... Har lavet form, men hvad mere?
Havde tænkt lidt på at bruge en kode lidt alla det her, men er ikke helt sikker på hvordan og hvor ledes jeg kan finde den aktive brugers id, som jeg jo skal bruge for at hente brugerens data ud, og ikke de andre, så han kan ændre det rigtige...
Så denne kode, ville virke hvis du kom fra et link der angivede ID'en så som side.php?id=1
Så måske denne kode giver jer lidt ideer til hvordan det skal foregå ? :D Håber det hjælper!
include("db.php"); $db = mysql_connect($dbhost,$dbusername,$dbpassword); mysql_select_db($dbname) or die("Kan ikke oprette forbindelse til databasen.");
$id = $_REQUEST['id']; $query = "SELECT id, Navn, Born, Home, Favorite, Status, Info FROM brugere WHERE id='$id'";
$result = mysql_query($query);
if (!$result) { echo "Fejl med query og databasen" . mysql_error(); exit; }
if (mysql_num_rows($result) == 0) { echo "Mangler stadig team member til at udfylde denne plads :D"; exit; }
// Først noget basal beskyttelse imod SQL-injection. $bruger = str_replace("'", "''", $bruger); $password = str_replace("'", "''", $password);
SQL = "SELECT count(*) AS antal FROm brugere WHERE bruger='" . $bruger . "' AND password='" . $password . "'" $result = mysql_query(SQL); $row = mysql_fetch_assoc($result)); if ($row["antal"] == 1) { // Brugeren findes så vi kan nu gå videre... } else { // Brugeren findes ikke!! header("Location: http://www.disney.com/"); }
I saveEdit.php scriptet starter du med samme tjek som i 02/08-2005 20:35:21. Vi skal være sikker på at det er den rigetige bruger, før at vi opdatere noget som helst.
den sikkerheds ting du bruger virker ikke helt som den skal. Så brugte den jeg postede tidligere...
en anden ting er at den ikke tager data'en ud og viser den i formen... jeg kan få vist formen men ikke dataen... her er den kode jeg fik bikset sammen:
<?
session_start();
include("db.php"); $db = mysql_connect($dbhost,$dbusername,$dbpassword); mysql_select_db($dbname) or die("Kan ikke oprette forbindelse til databasen.");
$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'"; $result = mysql_query($query); $row = mysql_fetch_assoc($result);
// Dette tjek skal ligge helt i toppen ... ellers kan man nå at lave grimme ting i databasen inden at man når det! if (!$_SESSION['loget_in'] == 1) { header("Location: index.php"); exit; }
include("db.php"); $db = mysql_connect($dbhost, $dbusername, $dbpassword); mysql_select_db($dbname) or die("Kan ikke oprette forbindelse til databasen.");
$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'"; $result = mysql_query($query); $row = mysql_fetch_assoc($result);
det fungerer stadig ikke... sorry, men den henter ikke dataen ud af databasen, formen er tom. Tænkte på om der ikke manglede noget ? altså når vi nu laver vores query
$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'";
mangler vi så ikke også at hente dataen ud som vi skal bruge også ? i stedet for bare brugernavn og password ? bare et mindre gæt...
og er der ikke mulighed for at tjekke id efter dataen ?
I den slags tilfælde skyldes fejlen i 9 ud af 10 tilfælde at SQL-kommandoen simpelthen indeholdt noget andet end det man forventede. Derfor er det altid et godt fif lige, som ren debug, at udskrive SQL-kommandoen før at den bliver udført:
den kommer med følgende: DEBUG: SELECT * FROM brugere WHERE brugernavn='' AND password=''
Det skal lige siges (hvis det gør nogen forskel) at når man logger ind, ender man i et tjek, og kommer så tilbage til forsiden... Hvor den tjekker en om man er logget ind, hvis man er, har man nogle menu punkter som andre ikke kan se, hvor en af dem er profiledit.php
Vil ikke selv mene det gør nogen forskel, men kunne jo være...
Arrayet $_POST[...] indeholder kun en værdi hvis man netop har submittet en formular som indeholder de pågældende felter.
Det er det jeg sikre ved at brugerne udfylder formularen fra "02/08-2005 20:26:39" hvorefter det ryger direkte over til editBruger.php siden vist i "02/08-2005 20:35:21".
include("db.php"); $db = mysql_connect($dbhost,$dbusername,$dbpassword); mysql_select_db($dbname) or die("Kan ikke oprette forbindelse til databasen.");
hehe ja... vi kan da godt fortsætte... men er ved at omskrive hele koden, for at se om det ikke kan gøres lidt nemmere... og lidt mere sikkert... Tror jeg måske har fundet en løsning der er passende, der også gør det nemmere at tilføje senere udvidelser på siden ;) men det tager jo tid at skrive en side om :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.