Avatar billede jkn83 Praktikant
02. august 2005 - 20:11 Der 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?

Håber nogen kan hjælpe :)
Avatar billede nielle Nybegynder
02. august 2005 - 20:26 #1
Du starter med en mulighed for at logge på:

<form action="editBruger.php" method="post">
<input type="text" name="bruger"><br>
<input type="password" name="password"><br>
<input type="submit" value="Log på">
</form>
Avatar billede jkn83 Praktikant
02. august 2005 - 20:31 #2
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;
        }
   
while ($row = mysql_fetch_assoc($result)) {


?>

  <form name="user_info" method="post" action="update_user.php=<?php echo $id; ?>">
    <p>
      Navn: <?php echo $r[Navn]; ?><p>
      Nick: <input type="text" name="Brugernavn" value="<?php echo $row[Brugernavn]; ?>" size="20"/><br/>
      Født: <input type="text" name="Born" value="<?php echo $row[Born]; ?>" size="20"/><br/>
      Bosted: <input type="text" name="Home" value="<?php echo $row[Home]; ?>" size="20"/><br/>
      Favorit: <input type="text" name="Favorite" value="<?php echo $row[Favorite]; ?>" size="20"/><br/>
      Status: <input type="text" name="Status" value="<?php echo $row[Status]; ?>" size="20"/><br/>
      Info:<br/>
      <textarea name="Info" cols="40" rows="10"><?php echo $row[Info]; ?></textarea>
    </p>
    <p align="center"><input type="submit" name="update_user" value="Gem Ændringer" style="cursor:pointer"/></p>
  </form>
Avatar billede jkn83 Praktikant
02. august 2005 - 20:33 #3
nielle har et login system der fungerer... login systemet ser sådan ud:

<font class="text">
<form name="Login" method="POST" action="adminlogin.php">
Brugernavn: <input type="text" name="Brugernavn" size="15"><br>
Password:  <input type="password" name="Password" size="15"><br>
<input type="submit" name="Submit" value="Login">
</form>

så ja... det har jeg :D
Avatar billede nielle Nybegynder
02. august 2005 - 20:35 #4
Når brugerne kommer over på editBruger.php starter du med at sikre at login oplysningerne var rigtige:

<?php
$bruger = $_POST["bruger"];
$password = $_POST["password"];

// 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/");
}
Avatar billede nielle Nybegynder
02. august 2005 - 20:44 #5
Når vi nu er sikker på at brugeren findes, udtrækker vi de oplysninger vi allerede har stående om hende:

SQL = "SELECT * AS antal FROm brugere WHERE bruger='" . $bruger . "' AND password='" . $password . "'";
$result = mysql_query(SQL);
$row = mysql_fetch_assoc($result));

Disse bruges nu til at forudfylde redigerings-formularen:

<form action="saveEdit.php" method="post">
<input type="hidden" name="bruger" value="<?= $bruger ?>">
<input type="hidden" name="password" value=<?= $password ?>>
Fornavn: <input type="text" name="fornavn" value="<?= $row["fornavn"] ?>"><br>
Efternavn: <input type="text" name="efternavn" value="<?= $row["efternavn"] ?>"><br>
...
<input type="submit" value="Gem oplysniger"><br>
<input type="reset" value="Nulstil">
</form>

Læg specielt mærke til at brugernavn og password sendes med tilbage sim hidden-felter.
Avatar billede nielle Nybegynder
02. august 2005 - 20:46 #6
Skulle have været:

SQL = "SELECT * FROM brugere WHERE bruger='" . $bruger . "' AND password='" . $password . "'";
Avatar billede nielle Nybegynder
02. august 2005 - 20:47 #7
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.
Avatar billede nielle Nybegynder
02. august 2005 - 20:54 #8
Da rækken svarende til brugeren allerede findes tabellen, sæal den opdateres.

<?
$fornavn = $_POST["fornavn"];
$efternavn = $_POST["efternavn"];
...

// Derefter basak beskyttelse imod SQL-injection.
$fornavn = str_replace("'", "''", $fornavn);
$efternavn = str_replace("'", "''", $efternavn);
...

SQL = "UPDATE brugere SET fornavn='" . $fornavn . "', efternavn='" . $efternavn . "', ..., WHERE bruger='" . $bruger . "' AND password='" . $password . "'";
mysql_query(SQL);

header("Location: http://www.ditDomæne.dk/index.php");
?>
Avatar billede nielle Nybegynder
02. august 2005 - 20:54 #9
... og det er i store træk dét.
Avatar billede jkn83 Praktikant
02. august 2005 - 22:09 #10
ok prøver... giver besked senere eller i morgen
Avatar billede jkn83 Praktikant
02. august 2005 - 22:30 #11
har et spørgsmål... bruger nemlig en mindre "version" af dit sikkerheds tjek der...

if(!$_SESSION['loget_in'] == 1) {
header("Location: index.php");
exit;
}

Tjekker om du er logget ind, hvis ikke smider den dig til front siden... hvis du er, læser den resten af koden. Usikker ? eller ok ?
Avatar billede nielle Nybegynder
02. august 2005 - 22:46 #12
Det er sikkert godt nok. Men burde du ikke tjekke på:

... == "1") {

Men sikkerheden afhænger jo af hvordan der er logget ind i første omgang - altså af hvordan din $_SESSION['loget_in'] er blevet sat.
Avatar billede jkn83 Praktikant
02. august 2005 - 22:55 #13
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);

$bruger = $_POST["bruger"];
$password = $_POST["password"];

if(!$_SESSION['loget_in'] == 1) {
header("Location: index.php");
exit;
}
else
{

include("scroller.css");
include("style.css");

?>

      <form action="profilupdate.php" method="post">
        <input type="hidden" name="bruger" value="<? $bruger ?>">
      <input type="hidden" name="password" value="<? $password ?>">
      Navn: <?php echo $row[Navn]; ?><p>
      Nick: <input type="text" name="Brugernavn" value="<?php echo $row[Brugernavn]; ?>" size="20"/><br/>
      Født: <input type="text" name="Born" value="<?php echo $row[Born]; ?>" size="20"/><br/>
      Bosted: <input type="text" name="Home" value="<?php echo $row[Home]; ?>" size="20"/><br/>
      Favorit: <input type="text" name="Favorite" value="<?php echo $row[Favorite]; ?>" size="20"/><br/>
      Status: <input type="text" name="Status" value="<?php echo $row[Status]; ?>" size="20"/><br/>
      Info:<br/>
      <textarea name="Info" cols="40" rows="10"><?php echo $row[Info]; ?></textarea>
    </p>
    <p align="center"><input type="submit" name="profilupdate" value="Gem Ændringer" style="cursor:pointer"/></p>
  </form>

<?
}
?>
Avatar billede nielle Nybegynder
02. august 2005 - 23:09 #14
<?
session_start();

// 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);

$bruger = $_POST["bruger"];
$password = $_POST["password"];

include("scroller.css");
include("style.css");
?>
<form action="profilupdate.php" method="post">
<input type="hidden" name="bruger" value="<?= $bruger ?>">
<input type="hidden" name="password" value="<?= $password ?>">
Navn: <?php echo $row["Navn"]; ?><br>
Nick: <input type="text" name="Brugernavn" value="<?php echo $row["Brugernavn"]; ?>" size="20"/><br/>
Født: <input type="text" name="Born" value="<?php echo $row["Born"]; ?>" size="20"/><br/>
Bosted: <input type="text" name="Home" value="<?php echo $row["Home"]; ?>" size="20"/><br/>
Favorit: <input type="text" name="Favorite" value="<?php echo $row["Favorite"]; ?>" size="20"/><br/>
Status: <input type="text" name="Status" value="<?php echo $row["Status"]; ?>" size="20"/><br/>
Info:<br/>
<textarea name="Info" cols="40" rows="10"><?php echo $row["Info"]; ?></textarea>
<p align="center"><input type="submit" name="profilupdate" value="Gem Ændringer" style="cursor:pointer"/></p>
</form>
Avatar billede nielle Nybegynder
02. august 2005 - 23:10 #15
Hvis din form fortsat er tom, så kan det måske skyldes at der kommer 0 rækker ud af dit SQL kald:

$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'";
Avatar billede nielle Nybegynder
02. august 2005 - 23:11 #16
... hvilket der helt sikkert også gør! Prøv at rette denne blok:

$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

$bruger = $_POST["bruger"];
$password = $_POST["password"];

- til dette:

$bruger = $_POST["bruger"];
$password = $_POST["password"];

$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
Avatar billede jkn83 Praktikant
03. august 2005 - 17:09 #17
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 ?
Avatar billede nielle Nybegynder
03. august 2005 - 18:04 #18
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:

$bruger = $_POST["bruger"];
$password = $_POST["password"];

$query = "SELECT * FROM brugere WHERE brugernavn='" . $bruger . "' AND password='" . $password . "'";
echo "DEBUG: " . $query . "<br>";

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
Avatar billede jkn83 Praktikant
03. august 2005 - 18:32 #19
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...
Avatar billede nielle Nybegynder
03. august 2005 - 19:45 #20
Når den skriver det der, så er der jo helt tydligt et eller andet galt med:

$bruger = $_POST["bruger"];
$password = $_POST["password"];

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".
Avatar billede jkn83 Praktikant
03. august 2005 - 20:30 #21
hmm det vil sige jeg skal starte med at få dem ind på deres "edit bruger" side ?
Avatar billede nielle Nybegynder
03. august 2005 - 21:22 #22
Ja, eller du kan gemme dem i din session cookie - den som du opretter når du lader dem logge ind.
Avatar billede jkn83 Praktikant
03. august 2005 - 21:33 #23
ok ehm... jeg forsøgte lidt en tur med sessions... Og kom frem til et problem...

<?

session_start();

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.");

$postbruger = $_POST["Brugernavn"];
$postpass = $_POST["Password"];

$query = mysql_query("SELECT Id FROM brugere WHERE Brugernavn = '$postbruger' AND Password = '$postpass'");
echo "DEBUG: " . $query . "<br>";

$_SESSION['loget_in'] = 1;
$_SESSION['Brugernavn'] = $postbruger;
$_SESSION['Password'] = $postpass;

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

include("scroller.css");
include("style.css");

?>

<form etc etc etc...

Den kommer med en fejl i linien:
$row = mysql_fetch_assoc($result);

den siger følgende:

DEBUG: Resource id #4

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/cvroms/public_html/test/profiledit.php on line 27

Sååå, ved ikke lige hvad jeg skal gøre nu... Er lidt smadret, ideer ?
Avatar billede nielle Nybegynder
03. august 2005 - 21:41 #24
Ikke sådan der, men sådan her for at debugge:

$SQL = "SELECT Id FROM brugere WHERE Brugernavn = '$postbruger' AND Password = '$postpass'";
echo "DEBUG: " . $SQL . "<br>";
$query = mysql_query($SQL);
Avatar billede jkn83 Praktikant
06. august 2005 - 19:37 #25
det er ikke helt gået op endnu... men tror det begynder at hjælpe. Smider du et svar er pointene dine :)
Avatar billede nielle Nybegynder
06. august 2005 - 21:57 #26
Svar :^)

... men vi fortsætter da bare til vi er helt i mål. :^)
Avatar billede jkn83 Praktikant
07. august 2005 - 00:27 #27
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester