Avatar billede kack Nybegynder
18. december 2004 - 22:45 Der er 48 kommentarer og
1 løsning

Hmm.. Ret profil..

Det er så nok sidste del i mit communnity dette her. Jeg skal have lavet så man kan rette i sin profil.

Men jeg ved ikke helt hvordan jeg skal gøre det.. For når man logger ind sætter den kun en session og det er: $bruger.

Så man kan jo ikke få den til at udskrive infoen fra de oplysninger. F.eks. email elign.

Håber I forsåt mit spørgsmål.. Her er det jeg ikke kan finde ud af:

- At få den til at udskrive de oplysninger man allerede har, f.eks. email, i et input felt. Og så kan man bare ændre det.

- Og hvordan får man den til at rette oplysningerne når man har indtastet nogle nye? Synes jeg har set noget der hed UPDATE engang..

Venlig hilsen
Kack
Avatar billede morteeart Nybegynder
18. december 2004 - 22:51 #1
ala

$bruger = $_SESSION['bruger'];

$query = mysql_query("SELECT * FROM brugertabel WHERE brugernavn='$burger ") or die(mysql_error());
$row = mysql_fetch_array($query);

echo "email: ".$row['email'];

osv...
Avatar billede jakobdo Ekspert
18. december 2004 - 22:59 #2
Som Morten allerede er inde på, så henter du brugerens info ud via hans SQL.

Og så laver du en form:

echo "<form action=\"". $_SERVER['PHP_SELF'] ."\" method=\"post\">";
echo "Email: <input type=\"text\" value=\"" . $row[email] . "\" name=\"email\">";
echo "<input type=\"submit\" name=\"update\" value=\"update\">";
echo "</form>";

if (isset($_POST[update])
{
$sql = "
    UPDATE
    brugertabel
SET
    email = " . $_POST['email'] . "
WHERE
    brugernavn = " . $_SESSION['bruger'] . "
LIMIT
    1
";
$query = mysql_query($sql);
}
Avatar billede kack Nybegynder
18. december 2004 - 23:00 #3
jakobdo:

Hvad er det der LIMIT 1? Hvad skal man bruge det til der?
Avatar billede morteeart Nybegynder
18. december 2004 - 23:03 #4
så den kun henter info fra en bruger... bare en ekstra sikkerhed.
Avatar billede jakobdo Ekspert
18. december 2004 - 23:04 #5
Du skal selvfølgelig lave tjek på det data som sendes til din database...
PT kan man lave sql injections!

Så du skal validere input! (men det gør du jo også som den gode koder du er) :o)
Avatar billede coderdk Praktikant
18. december 2004 - 23:05 #6
morteeart, brugernavn = burger :)
Avatar billede kack Nybegynder
18. december 2004 - 23:05 #7
Ok :) Må lige prøve det :) Skal nok skrive hvis det virker, eller hvis det ikke virker :)
Avatar billede coderdk Praktikant
18. december 2004 - 23:06 #8
det jakobdo mener er at du bør køre det du sender til MySQL gennem mysql_escape_string f.eks. sådan:

"SELECT * FROM brugertabel WHERE brugernavn='" . mysql_escape_string( $bruger ). "'
Avatar billede kack Nybegynder
18. december 2004 - 23:06 #9
Jakobda: Jeg er skam ikke nogen gid koder :) ;)
Avatar billede morteeart Nybegynder
18. december 2004 - 23:08 #10
coderdk , lol ja :)
Avatar billede morteeart Nybegynder
18. december 2004 - 23:10 #11
btw. sql injections ??..

Hvor tit er folks brugernavne som ligger i en session, en sql kommando ?-)
og specielt hvis det er et navn som er i en database, som de i forvejen loggede ind med :)
Avatar billede baitianlong Nybegynder
19. december 2004 - 00:11 #12
men hvad nu hvis folk vil ændre deres brugernavn?? Derfor er det en god ide at have en "id int(5) auto_increment unique primary key" på tabellen. Så kan du update ALT, selv brugernavnet :)
Avatar billede kack Nybegynder
19. december 2004 - 00:41 #13
folk skal helst ikke kunne ændre deres brugernavn..
Avatar billede jakobdo Ekspert
19. december 2004 - 10:33 #14
Avatar billede kack Nybegynder
20. december 2004 - 20:37 #15
ok.. Jeg har nu denne kode:

<?
$connection = mysql_connect("lol","lol","lol");
    mysql_select_db("lol", $connection);
?>
<?
$bruger = $_SESSION['bruger'];

$query = mysql_query("SELECT * FROM brugere WHERE bruger='$bruger' ") or die(mysql_error());
$row = mysql_fetch_array($query);

echo "<form action=\"". $_SERVER['PHP_SELF'] ."\" method=\"post\">";
echo "Email: <input type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
echo "<input type=\"submit\" name=\"update\" value=\"update\">";
echo "</form>";

if (isset($_POST['update']))

{
$sql = "
    UPDATE
    brugere
SET
    email = " . $_POST['email'] . "
WHERE
    bruger = " . $_SESSION['bruger'] . "
LIMIT
    1
";
$query = mysql_query($sql);
}
?>

Hvad er der galt med den? Den opdatere ikke den email man skriver i feltet.
Avatar billede jakobdo Ekspert
20. december 2004 - 22:46 #16
Prøv at ret:

$query = mysql_query($sql);

til:

$query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
Avatar billede coderdk Praktikant
20. december 2004 - 22:48 #17
email = " . $_POST['email'] . "

skal nok være:

email = '" . mysql_escape_string( $_POST['email'] ) . "'
Avatar billede coderdk Praktikant
20. december 2004 - 22:49 #18
(bemærk apostroffer før/efter gåseøjne)
Avatar billede jakobdo Ekspert
20. december 2004 - 22:57 #19
coderdk, du er altid så klog! :o)
Avatar billede coderdk Praktikant
20. december 2004 - 22:58 #20
jakobdo, lol :) jeg lægger dog mærke til ting af og til ;] Men nok de forkerte ting, vil min kæreste sige :P
Avatar billede jakobdo Ekspert
21. december 2004 - 08:23 #21
Så sandt, så sandt... :o)
Avatar billede kack Nybegynder
21. december 2004 - 10:37 #22
Hmm... Virker stadig ikke helt :(

Har denne kode:

<?
Mysql connection osv
?>
<?
$bruger = $_SESSION['bruger'];

$query = mysql_query("SELECT * FROM brugere WHERE bruger='$bruger' ") or die(mysql_error());
$row = mysql_fetch_array($query);

echo "<form action=\"". $_SERVER['PHP_SELF'] ."\" method=\"post\">";
echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
echo "<br><br>";
echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
echo "</form>";

if (isset($_POST['update']))

{
$sql = "
    UPDATE
    brugere
SET
    email = '" . mysql_escape_string( $_POST['email'] ) . "'
WHERE
    bruger = " . $_SESSION['bruger'] . "
LIMIT
    1
";

$query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
}
?>
Avatar billede jakobdo Ekspert
21. december 2004 - 11:02 #23
Får du nogle fejl når scriptet køres?
Avatar billede kack Nybegynder
21. december 2004 - 13:34 #24
Nej.. Det gør jeg ikke.
Avatar billede jakobdo Ekspert
21. december 2004 - 14:00 #25
Du mangler en session_start(); i toppen af dit script?
Avatar billede kack Nybegynder
21. december 2004 - 14:10 #26
Nej den har jeg i min idex.php fil. Og jeg bruger ?side=feks.php ..

Men tror det er noget med action="" for der sker jo ikke rigtig noget når man trykekr update, andet end man komemr til forsiden.

Du kan evt. prøve det her: www.kack.dk/kackcommunity2
Avatar billede jakobdo Ekspert
21. december 2004 - 14:14 #27
Det er jo problem nummer 1, brugeren skal sendes til siden:

http://www.kack.dk/kackcommunity2/?side=profil/ret.php

når du trykker update.
Avatar billede kack Nybegynder
21. december 2004 - 14:16 #28
Hmm.. Skal det så bare så sådan her ud? :

action=\""?side=profil/ret.php"\"
Avatar billede jakobdo Ekspert
21. december 2004 - 14:31 #29
Prøv det ja!
Avatar billede kack Nybegynder
21. december 2004 - 14:40 #30
Hmm.. Nu kommer der en fejl :(

Invalid query: Unknown column 'kack' in 'where clause'


Og dette er min kode:

<?
$bruger = $_SESSION['bruger'];

$query = mysql_query("SELECT * FROM brugere WHERE bruger='$bruger' ") or die(mysql_error());
$row = mysql_fetch_array($query);

echo "<form action=\"?side=profil/ret.php\" method=\"post\">";
echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
echo "<br><br>";
echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
echo "</form>";

if (isset($_POST['update']))

{
$sql = "
    UPDATE
    brugere
SET
    email = '" . mysql_escape_string( $_POST['email'] ) . "'
WHERE
    bruger = " . $_SESSION['bruger'] . "
LIMIT
    1
";

$query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
}
?>
Avatar billede jakobdo Ekspert
21. december 2004 - 14:43 #31
Prøv at ret:

bruger='$bruger'

til:

bruger LIKE '$bruger'
Avatar billede kack Nybegynder
21. december 2004 - 14:51 #32
Den siger stadig det samme :(
Avatar billede jakobdo Ekspert
21. december 2004 - 14:53 #33
Ret:  bruger = " . $_SESSION['bruger'] . "
til:  bruger LIKE '" . $_SESSION['bruger'] . "'
Avatar billede kack Nybegynder
21. december 2004 - 14:58 #34
Så.. Nu virker det :D Men hvordan kan jeg få den til at rette det med det samme? Altså lige når den har refreshet ret.php ?

Hvis du prøver at se det, så kan du se det ikke virker før man trykker å ret profil igen.

Men mange gangr tak for hjælpen ind til vidre!
Avatar billede jakobdo Ekspert
21. december 2004 - 15:05 #35
<?
$bruger = $_SESSION['bruger'];

if (isset($_POST['update']))
{
    $sql = "
    UPDATE
        brugere
        SET
        email = '" . mysql_escape_string( $_POST['email'] ) . "'
        WHERE
        bruger = " . $_SESSION['bruger'] . "
        LIMIT
        1
    ";

    $query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
    if (mysql_affected_rows() > 0)
        header("Location: http://www.kack.dk/kackcommunity2/?side=profil/bruger.php");
    else
        header("Location: http://www.kack.dk/kackcommunity2/?side=profil/ret.php");
}

$query = mysql_query("SELECT * FROM brugere WHERE bruger='$bruger' ") or die(mysql_error());
$row = mysql_fetch_array($query);

echo "<form action=\"?side=profil/ret.php\" method=\"post\">";
echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
echo "<br><br>";
echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
echo "</form>";

if (isset($_POST['update']))

{
$sql = "
    UPDATE
    brugere
SET
    email = '" . mysql_escape_string( $_POST['email'] ) . "'
WHERE
    bruger = " . $_SESSION['bruger'] . "
LIMIT
    1
";

$query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
}
?>

Og så kunne du lave bruger sådan, at hvis der ikke står et navn i GET, så tester den lige SESSION['bruger']

HUSK HEADER skal bruges inden der er sendt output til skærmen, så der vil du nok løbe ind i probs...
Avatar billede jakobdo Ekspert
21. december 2004 - 15:11 #36
Hov, der er lidt for meget kode ibunden...

Alternativ kan du prøv denne løsning:

<?
$bruger = $_SESSION['bruger'];

if (isset($_POST['update']))
{
    $sql = "
    UPDATE
        brugere
        SET
        email = '" . mysql_escape_string( $_POST['email'] ) . "'
        WHERE
        bruger = " . $_SESSION['bruger'] . "
        LIMIT
        1
    ";

    $query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
    if (mysql_affected_rows() > 0)
        echo "Opdateringen er udført...";
    else
        echo "Opdateringen mislykkedes, prøv igen eller kontakt WebMoster...";
}
else
{
    $query = mysql_query("SELECT * FROM brugere WHERE bruger='$bruger' ") or die(mysql_error());
    $row = mysql_fetch_array($query);

    echo "<form action=\"?side=profil/ret.php\" method=\"post\">";
    echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
    echo "<br><br>";
    echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
    echo "</form>";
}
?>
Avatar billede kack Nybegynder
21. december 2004 - 15:21 #37
Nu siger den: Opdateringen mislykkedes

<?
$bruger = $_SESSION['bruger'];

if (isset($_POST['update']))
{
    $sql = "
    UPDATE
        brugere
        SET
        email = '" . mysql_escape_string( $_POST['email'] ) . "'
        WHERE
        bruger LIKE '" . $_SESSION['bruger'] . "'
        LIMIT
        1
    ";

    $query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
    if (mysql_affected_rows() > 0)
        echo "Opdateringen er udført...";
    else
        echo "Opdateringen mislykkedes, prøv igen eller kontakt <a href='?side=profil/bruger.php&bruger=kack'>Kack</a>";
}
else
{
    $query = mysql_query("SELECT * FROM brugere WHERE bruger LIKE '$bruger' ") or die(mysql_error());
    $row = mysql_fetch_array($query);

    echo "<form action=\"?side=profil/ret.php\" method=\"post\">";
    echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\">";
    echo "<br><br>";
    echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
    echo "</form>";
}
?>
Avatar billede jakobdo Ekspert
21. december 2004 - 15:24 #38
Jeg har lige rettet min email på din side, og den sagde:

Opdateringen er udført..

Er det fordi du evt retter til en email som den allerede har?
Dermed opdateres intet i databasen...
Avatar billede kack Nybegynder
21. december 2004 - 15:31 #39
Hehe.. Det var det vidst.. min fejl :S

Når man så også skal kunne rette andre ting, er det vel bare at gøre det samme?
Avatar billede jakobdo Ekspert
21. december 2004 - 15:31 #40
Ja, så sætter du bare flere felter på!
Og retter SQL'erne til...
Avatar billede kack Nybegynder
21. december 2004 - 15:32 #41
Ok.. Jeg siger rigtig mange gange tak for hjælpen!

Laver du ik lige et svar?
Avatar billede kack Nybegynder
21. december 2004 - 15:52 #42
Hov.. Forresten.. Hvis man så kun retter en af tingene. Så komemr der en fejl med at man ikke har rettet den anden ting.

Hvordan kan man lave så der ikke kommer den fejl når man kun har rettet en ting ud af f.eks to ting?
Avatar billede jakobdo Ekspert
21. december 2004 - 15:53 #43
Hov, må jeg se din kode?
Avatar billede kack Nybegynder
21. december 2004 - 16:01 #44
sorry.. mig der var lidt for hurtig her på exp.. Har fået lavet det..

Men min kode ser sådan ud :

<?
$bruger = $_SESSION['bruger'];

if (isset($_POST['update']))
{
    $sql = "
    UPDATE
        brugere
        SET
        email = '" . mysql_escape_string( $_POST['email'] ) . "',
        profiltekst = '" . mysql_escape_string( $_POST['profiltekst'] ) . "'
        WHERE
        bruger LIKE '" . $_SESSION['bruger'] . "'
        LIMIT
        1
    ";

    $query = mysql_query($sql) or die('Invalid query: ' . mysql_error());
    if (mysql_affected_rows() > 0)
        echo "Opdateringen er udført...";
    else
        echo "Opdateringen mislykkedes, prøv igen eller kontakt <a href='?side=profil/bruger.php&bruger=kack'>Kack</a>";
}
else
{
    $query = mysql_query("SELECT * FROM brugere WHERE bruger LIKE '$bruger' ") or die(mysql_error());
    $row = mysql_fetch_array($query);

    echo "<form action=\"?side=profil/ret.php\" method=\"post\">";
    echo "Email: <input class=\"inp1\"type=\"text\" value=\"" . $row['email'] . "\" name=\"email\"><br>";
    echo "Profil-tekst: <textarea rows=\"15\"cols=\"50\"class=\"inp1\"type=\"textarea\" name=\"profiltekst\">\"" . $row['profiltekst'] . "\</textarea>";
    echo "<br><br>";
    echo "<input class=\"inp2\"type=\"submit\" name=\"update\" value=\"update\">";
    echo "</form>";
}
?>

:D
Avatar billede jakobdo Ekspert
21. december 2004 - 16:15 #45
Ok!
Det ser nu også godt nok ud!
Avatar billede jakobdo Ekspert
21. december 2004 - 16:15 #46
Og et svar! (langt om længe) :o)
Avatar billede kack Nybegynder
21. december 2004 - 16:20 #47
Sådan! :D
Avatar billede jakobdo Ekspert
21. december 2004 - 16:24 #48
Tak for point...
Avatar billede kack Nybegynder
21. december 2004 - 16:36 #49
Mig der takker :) Havde ALDRIG fundet ud af det :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