Avatar billede clausberg Nybegynder
02. september 2006 - 22:34 Der er 18 kommentarer og
1 løsning

Update script problem

Hej Eksperter
Jeg er ved at lave et script, der skal update data som allerede findes i min mysql database.

Jeg har en side hvor brugeren kan oprette sin egen profil. Lad os nu sige, at denne har skrevet sin adresse forkert, og nu gerne vil rette den - det er den update funktion jeg er ude efter.

Jeg henter den allerede eksisterende data ud med scriptet - ret.php:
<?
include("include/session.php");
if(!$session->checkLogin())
{
  header("Location: index.php");
  exit();
}
?>
<html>
<head>
<title>Ret profil</title>
</head>
<body>
<?
mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
mysql_select_db("xxx") or die(mysql_error());


$result = mysql_query("SELECT * FROM bruger
WHERE design='$session->username'") or die(mysql_error()); 
?>
<form action="ret_ok.php" method="post">
navn: <input type="text" name="navn" value="<?php echo '$row[navn]' ?>" /><br>
adresse: <input type="text" name="adresse" value="<?php echo '$row[adresse]' ?>" /><br>
postnr: <input type="text" name="postnr" value="<?php echo '$row[postnr]' ?>" /><br>
By: <input type="text" name="bydk" value="<?php echo '$row[bydk]' ?>" /><br>
Land: <input type="text" name="land" value="<?php echo '$row[land]' ?>" /><br>
Beskriv dig selv: <input type="text" name="beskriv" value="<?php echo '$row[beskriv]' ?>" /><br>
Hvilke produkter vil du forbindes med: <input type="text" name="teaser" value="<?php echo '$row[teaser]' ?>" /><br>
<br>
<input type="submit" value="Ret profil"></form>

</body>
</html>

Problem 1. Dette script henter ikke den eksisterende data ud!!! Hvorfor ikke???

Ret.php linker til ret_ok.php, som ser således ud:
<?
$connection = mysql_connect("xxx","xxx","xxx");
mysql_select_db("xxx", $connection);

mysql_query("update bruger set navn = '$navn', adresse = '$adresse', postnr = '$postnr', bydk = '$bydk', land = '$bydk', beskriv = '$beskriv', teaser = '$teaser' WHERE design='$session->username'") or die(mysql_error());
print "Profilen er nu blevet rettet";
?>

Dette script ved jeg ikke om det dur, da jeg ikke er kommet så langt :-)
Avatar billede nielle Nybegynder
02. september 2006 - 22:53 #1
Ang. problem 1 -

Skal:

$result = mysql_query("SELECT * FROM bruger WHERE design='$session->username'") or die(mysql_error()); 

- ikke være:

$result = mysql_query("SELECT * FROM bruger WHERE username='$session->username'") or die(mysql_error());

- eller nioget i den stil? "design" lyder ikke rigtigt.
Avatar billede clausberg Nybegynder
02. september 2006 - 23:00 #2
jeg har brugt username fordi det er det min kolonne hedder i mysql. Jeg satser jo på at ved at skrive design='$session->username'")så kalder jeg på den profil, som tilhører den person, der har logget sig ind.

Når jeg udskrifter design med username får jeg:
Unknown column 'username' in 'where clause'
Avatar billede nielle Nybegynder
02. september 2006 - 23:08 #3
"design" lyder bare som et underligt navn. Er det virkeligt det felt som svarer til værdien af $session->username'?

Hvis du ellers har adgang til phpmyadmin, så prøv lige at udskrive SQL-sætningen og afprøv den derefter i phpmyadmin. Giver det noget resultat ud?
Avatar billede nielle Nybegynder
02. september 2006 - 23:08 #4
Du mangler forresten en:

$row = mysql_fetxc_assoc($result);

- i din kode.
Avatar billede clausberg Nybegynder
02. september 2006 - 23:21 #5
ja, design svarer til værdien af $session->username' :-)


Hvis du ellers har adgang til phpmyadmin, så prøv lige at udskrive SQL-sætningen og afprøv den derefter i phpmyadmin. Giver det noget resultat ud?
Det forstår jeg ikke helt. Skal jeg udskrive en sql sætning fra phpmyadmin - som jeg forresten har adgang til.



Hvor skal:
$row = mysql_fetxc_assoc($result);
sættes ind?
Avatar billede nielle Nybegynder
02. september 2006 - 23:25 #6
Lav lige rettelsen 02/09-2006 23:08:58 - jeg er 99% sikker på at det er det hele der skal til.

Mht. at afprøve tingene i phpmyadmin: I stedet for at bare udføre en SQL-sætning har du jo altid debug-muligheden at udskrive den til skærmen lige før at du førsøger at sende den til MySQL (eller endda i stedet for at ud føre den). Når at du har udskrevet den, kan du efterfølgende kopiere den, og så paste den til phpmyadmin for der at se hvad der sker når du gør det.
Avatar billede clausberg Nybegynder
02. september 2006 - 23:31 #7
Hvis det er dette indslag du referer til:
$row = mysql_fetxc_assoc($result);
Hvor skal det sættes ind?
Avatar billede nielle Nybegynder
02. september 2006 - 23:39 #8
Lige efter denne:

$result = mysql_query("SELECT * FROM bruger WHERE design='$session->username'") or die(mysql_error());

Ellers får du jo aldrig dit resultat over i $rows arrayet.
Avatar billede clausberg Nybegynder
02. september 2006 - 23:46 #9
så får jeg fejlen:
Fatal error: Call to undefined function: mysql_fetxc_assoc() in /customers........
Avatar billede clausberg Nybegynder
03. september 2006 - 00:15 #10
Kan grunden til at jeg ikke får sat mine resultater ind i $row , at jeg afslutter den del af php´en der connecter til databasen med ?>
Avatar billede nielle Nybegynder
03. september 2006 - 07:09 #11
Nej, det er såmæn kun den " ... mysql_fetch_assoc() ... " der mangler.
Avatar billede clausberg Nybegynder
03. september 2006 - 11:02 #12
øhhh... virker stadig ikke. mysql_fetch_assoc() er vel rigtig sat ind? Man kan jo sige, at jeg med ?> på 5. linie afslutter min Php del... er det et problem, da jeg skal bruge resultaterne længere nede i en html form???

connect til database
$result = mysql_query("SELECT * FROM bruger WHERE design='$session->username'") or die(mysql_error());
$row = mysql_fetch_assoc($result);
?>
<form action="ret_ok.php" method="post">
navn: <input type="text" name="navn" value="<?php echo '$row[navn]' ?>" /><br>
adresse: <input type="text" name="adresse" value="<?php echo '$row[adresse]' ?>" /><br>
postnr: <input type="text" name="postnr" value="<?php echo '$row[postnr]' ?>" /><br>
By: <input type="text" name="bydk" value="<?php echo '$row[bydk]' ?>" /><br>
Land: <input type="text" name="land" value="<?php echo '$row[land]' ?>" /><br>
Beskriv dig selv: <input type="text" name="beskriv" value="<?php echo '$row[beskriv]' ?>" /><br>
Hvilke produkter vil du forbindes med: <input type="text" name="teaser" value="<?php echo '$row[teaser]' ?>" /><br>
<br>
<input type="submit" value="Ret profil"></form>

I hvert tekstfelt står der blot: $row[land]. Det er som om, at der enten ikke connectes til databasen ordentligt, eller at mysql_fetxc_assoc() ikke har nogle resultater at tage med over.
Avatar billede nielle Nybegynder
03. september 2006 - 11:16 #13
Ja, mysql_fetch_assoc() er sat rigtig ind. :^)

Men du skal ændre din efterfølgende PHP til:

<form action="ret_ok.php" method="post">
navn: <input type="text" name="navn" value="<?php echo $row[navn] ?>" /><br>
adresse: <input type="text" name="adresse" value="<?php echo $row[adresse] ?>" /><br>
postnr: <input type="text" name="postnr" value="<?php echo $row[postnr] ?>" /><br>
By: <input type="text" name="bydk" value="<?php echo $row[bydk] ?>" /><br>
Land: <input type="text" name="land" value="<?php echo $row[land] ?>" /><br>
Beskriv dig selv: <input type="text" name="beskriv" value="<?php echo $row[beskriv] ?>" /><br>
Hvilke produkter vil du forbindes med: <input type="text" name="teaser" value="<?php echo $row[teaser] ?>" /><br>
<br>
<input type="submit" value="Ret profil"></form>

Altså, væk med en masse '-tegn.
Avatar billede clausberg Nybegynder
03. september 2006 - 12:29 #14
Ja, der var fejlen :-) Nu får jeg kaldt de eksisterende informationer frem, og kan rette i den. Når jeg så klikker på submit, så bliver filen ret_ok.phh kørt:

<?
$connection = mysql_connect("xxx","xxx","xxx");
mysql_select_db("xxx", $connection);

mysql_query("update bruger set navn = '$navn', adresse = '$adresse', postnr = '$postnr', bydk = '$bydk', land = '$bydk', beskriv = '$beskriv', teaser = '$teaser' WHERE design='$session->username'") or die(mysql_error()); 
print "Profilen er nu blevet rettet";
?>

Men selvom jeg så får teksten "Profilen er nu blevet rettet", bliver mine rettelser i formularen ikke updated i databasen. Hvad er der galt med ret_ok.php???
Avatar billede nielle Nybegynder
03. september 2006 - 12:37 #15
1) Husk din session-kode på ret_ok.php siden:

<?
include("include/session.php");
if(!$session->checkLogin())
{
  header("Location: index.php");
  exit();
}
?>

2) Du skal derefter hente dine værdier som $_POST["navn"]. Det er ikke nok at skive $navn.
Avatar billede clausberg Nybegynder
03. september 2006 - 13:16 #16
Jeg endte med at hente mine værdier som '$_POST[navn]' - det virker. Jeg går også ud fra at man kan bruge $_POST["navn"]  - jeg ved bare ikke i hvilke sammenhænge. Jeg roder nemlig rundt i ' og ".

Men nu virker det - jeg har siddet lagt tid med dette problem, og så er det jo super fedt du kan løse det på ingen tid!!! :-)

100 velfortjente point er på vej mod dig ;-)
Avatar billede nielle Nybegynder
03. september 2006 - 13:32 #17
Den form du submitter med har sat method="post":

<form action="ret_ok.php" method="post">

Dette betyder at værdierne derefter skal aflæses som $_POST["..."].

Der er en anden mulighed som hedder $_GET, og denne bruger man sammen med links, eller hvis der er brugt get i formen:

<form action="ret_ok.php" method="get">

.oOo.

Du skal ikke bruge '$_POST[navn]' ... j´hvsi du skal gøre dette,m så skal det være "$_POST[navn]". Personligt foretrækker jeg dog $_POST["navn"].

.oOo.

... og et svar :^)
Avatar billede clausberg Nybegynder
03. september 2006 - 16:55 #18
Det er squ fedt når du svarer på spørgsmålene - så ved man at der kommer en løsning. Ha´ en god dag :-)
Avatar billede nielle Nybegynder
03. september 2006 - 17:14 #19
Takker for point :^)
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