27. december 2004 - 01:15Der er
15 kommentarer og 1 løsning
Side opdateres, men henter gammel tekst frem igen?
Jeg er lige begyndt at lære PHP og er stødt ind i et træls problem med en side jeg er ved at lave :(
Jeg har lavet en række tekstfelter der opdaterer en MySQL database med en submit-knap, men efter databasen er blevet opdateret, nøjagtigt som den skal, kommer teksten der stod i tekstfelterne frem igen... jeg vil gerne have den nye tekst bliver der... hvad gør jeg forkert.. eller hvad mangler jeg?
if ($update){ mysql_query("UPDATE vestjysk_camping SET navn='$navn', telefon='$telefon', adresse='$adresse', postnr='$postnr', city='$city', dato='$dato' WHERE id=$id") or die(mysql_error());
echo "<br><br>Oplysningerne er blevet opdateret."; }
if ($slet){ mysql_query("UPDATE vestjysk_camping SET navn='', telefon='', adresse='', postnr='', city='', dato='' WHERE id=$id") or die(mysql_error());
echo "<br><br>Oplysningerne er blevet slettet."; } ?> </td> </tr> </table>
Hvad er forskellen da på den og det jeg har skrevet?
Prøvede det, og intet nyt skete. Den gemmer stadig infoen fint, men efter man har trykket på "Gem ændringer" kommer den gamle tekst frem, indtil man opdaterer siden.
ovenstående er et exempel på koden. Den viser fint indholdet af databasen og man kan fint opdatere, men når man trykker gem kommer de gamle værdier frem igen, selvom de nye lige er blevet gemt. :(
ahh, ja det er klart, du skal jo opdateret siden f.eks. med et redirect, med header. MySQL henter jo ikke nyt bare fordi du laver en kommando.
Mht. din kode så er virker den måske, men det er fuld af fejl, og bryder stort set alle standarter for god kodning inden for php. Den burde faktisk slet ikke virke.
if ($update) { mysql_query("UPDATE vestjysk_camping SET navn='$navn', telefon='$telefon', adresse='$adresse', postnr='$postnr', city='$city', dato='$dato' WHERE id=$id") or die(mysql_error());
$page = $_SERVER['PHP_SELF']; header("Location: $page "); // redirecter tilbage til samme side som man er på. }
Lav din update sætning *før* du laver din select sætning - altså øverst i din kode, som du viser den. Når det så virker, vender du tilbage og får lavet koden ordentligt - der er nemlig en række mindre heldige ting... ;)
#erikjacobsen Hvordan mener du jeg bør gøre det? Jeg har siddet og leget lidt med det, men enten kommer den med fejl eller opdaterer databasen inden den har hentet indholdet ud og dermed sletter hvad der nu stod i den.
#morteeart Jeg har også prøvet at lege lidt med en header som du skriver, men lige meget hvor i dokumentet jeg placerer den, får jeg den fejl at "header already sent".
Er sådan lidt rimelig lost lige nu... eneste måde jeg kan få den til at du på, er som i min første post... jeg har dog smidt det meste udenfor php, som morteeart foreslog. <td> Fornavn og efternavn:</td><td><input type="text" name="navn" value="<? echo $navn; ?>"> </td>
if ($update){ mysql_query("UPDATE vestjysk_camping SET navn='$navn', telefon='$telefon', adresse='$adresse', postnr='$postnr', city='$city', dato='$dato' WHERE id=$id") or die(mysql_error());
echo "<br><br>Oplysningerne er blevet opdateret."; }
if ($slet){ mysql_query("UPDATE vestjysk_camping SET navn='', telefon='', adresse='', postnr='', city='', dato='' WHERE id=$id") or die(mysql_error());
echo "<br><br>Oplysningerne er blevet slettet."; }
$q=mysql_query("SELECT * FROM vestjysk_camping WHERE id=$id") or die(mysql_error());
while($r=mysql_fetch_array($q)){ extract($r); }
if ($dato == "0000-00-00") { $dato = "yyyy-mm-dd"; }
var noget jeg læste i en begynder guide til php, så jeg troede egentlig det var meget fint. Hvad er der så slemt ved at bruge deet, og hvad er forskellen på det og det du skrev med if(...){ osv.
if($r=mysql_fetch_array($q)){ //... alt det du har } Hvad er det du mener jeg skal skrive der i mellem, hele tabellen eller?
Og så smid lige et svar hvis du vil have point, det problem jeg havde i starten, er jo så fint løst :)
//..alt det du har betyder bare den kode hvor du bruger noget fra rækken i databasen, dvs. din form
extract giver navne i globalt scope, som man ikke kan se hvor kommer fra, og som kan blandes sammen med navne du allerede har. Hold dig langt fra det site, hvor den såkaldte begynderguide lå - den kan kun være skrevet af ondskabsfulde mennesker, der ikke vil have at andre lære at bygge robuste it-systemer ;)
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.