Avatar billede jrostved Nybegynder
05. april 2006 - 07:48 Der er 9 kommentarer og
1 løsning

skal lave en edit side til en gæstebog

Hej jeg har lidt problemer med at få en edit side til at virke i dette script..
Jeg har prøvet lidt nede i bunden!
Er der nogen der kan hjælpe mig?
Scriptet:
http://rostved.com/dagbog.rar
Avatar billede pvtsommer Nybegynder
05. april 2006 - 15:29 #1
Regel 1: SKIFT ALTID DIT PASSWORD i originalfilerne INDEN de sendes online så vi andre kan se det!!

Regel 2: Den er der ikke... kigger lige på det.
Avatar billede pvtsommer Nybegynder
05. april 2006 - 15:40 #2
Udover at jeg nu kunne have haft adgang til din database almindeligt, har din side som hovedregel ingen sikkerhed på indsættelses fronten. Jeg har ladet mig fortælle at ALLE postede værdier, som går ind i en mysql_query(), minimum bør have været igennem en htmlentities!!

Til den kan du fx tilføje:
htmlentities($_POST[foobar], ENT_QUOTES);

Synes din kode er UTROLIG uoverskuelig. Du bør måske lave nogle flere filer, for jeg kan ikke rigtig finde hovede og hale i den.

Din kode:

// edit entry in dagbog
if($my->usertype == 'Super Administrator') { $acs=1; }
if ($dagbog_edit) {
##$entry = substr($dagbog_edit, 0, 1000);
##if (strlen($dagbog_edit)> 1000) { $dagbog_edit = $entry . "...(indl?gget er besk?ret) "; }
$result = mysql_query("INSERT INTO mos_dagbog (date,name,entry,userid,titel) VALUES(now(),'$dagbog_name','$dagbog_entry','$dagbog_id','$dagbog_titel')") or die(mysql_error());
$did = mysql_insert_id();
$result = mysql_query("REQUEST mos_dagbog (date,name,entry,userid,titel) VALUES(now(),'$dagbog_name','$dagbog_entry','$dagbog_id','$dagbog_titel')") or die(mysql_error());
$result = mysql_query("UPDATE mos_dagbog SET front='0' WHERE userid='$dagbog_id'") or die(mysql_error());
$result = mysql_query("UPDATE mos_dagbog SET front='1' WHERE id='$did'") or die(mysql_error());
}

For mig ser det ud som om at man FØRST indsætter en ny post (altså SPRIT ny! Ikke noget redigering der), så bruger du mysql_insert_id til at finde det sidste ID, så vedj eg faktisk ikke hvad du så laver til sidst! Men i mine øjne bør du blot skulle gøre følgende:

Du poster din form, og så opdaterer du den.



mysql_query("UPDATE mos_dagbog SET name='$dagbog_name', entry='$dagbog_entry', titel='$dagbog_titel' WHERE id='$detidduvilændre' LIMIT 1");

Med mindre selve din idé er at hver bruger KUN kan have et dagbogsindlæg? Og man derfor tilføjer et nyt i stedet for det gamle? Men hvorfor så ikke bare fremdatere dit tidsfelt, og opdatere informationerne?

Jeg er lidt lost må jeg indrømme ;)
Avatar billede jrostved Nybegynder
05. april 2006 - 15:52 #3
Ja det er rigtig med password.. Jeg kom til at uploade den forkerte fil til serveren..
Men man kan oprette et indlæg med siden "item" og det var derefter meningen at administratoren skulle kunne rette i disse indlæg hvis brugeren skrev noget upassende.. som det er nu kan man jo kun slette hele indlæget..
Jeg ved ikke helt hvordan jeg laver en form der først henter oplysningerne "titel" og "tekst" som administratoren så kan rette i og så gemme den på det samme id.
Jeg håber i kan forstå hvad det er jeg vil.
Ellers kan i bare spørge igen!
Avatar billede pvtsommer Nybegynder
05. april 2006 - 16:03 #4
Altså... princippet er jo som du siger:

Hent data fra database.
Opskriv i formular (som har action til en side der gemmer)
Gem i database.

Det her er et eksempel!

<?PHP

// Variabel
$todo = htmlentities($_GET[todo]);

// Gemmer ændringerne.
if($todo == "save") {


}

// gør så man i adresselinjen bare tilføjer ?todo=edit, og så ser man formularen
if($todo == "edit") {

// Jeg har ikke lavet noget admintjek, det må du selv lige indsætte

// Database query (jeg har sagt *, det er IKKE fornuftigt da det er langsomt.
// udskift dem i stedet med felt1, felt2, felt3.
$dump = mysql_query("SELECT * FROM mos_dagbog WHERE id='$dagbog_id' LIMIT 1");
// Smider al data fra tabellen ind i $viewdata. (fx $viewdata[id] = id - sjovt nok.
$viewdata = mysql_fetch_assoc($dump);
// Her slutter jeg med PHP, da det er hurtigere bare lige at skrive sin HTML der.
// Bemærk at action skifter fra todo=edit, til todo=save!!
?>

<form action="gemEdit.php?todo=save" method="post">
<p>
  Dagbogens titel<br>
  <input type="text" name="titel" value="<?= $viewdata[titel]; ?>">
</p>
<p>
  Dagbogens indhold<br>
  <textarea name="titel"><?= $viewdata[titel]; ?></textarea>
</p>
<p>
  Klik her for at gemme<br>
  <input type="submit" value="Gem ændringer">
</p>
</form>
<?PHP
}
?>
Avatar billede pvtsommer Nybegynder
05. april 2006 - 16:03 #5
Fik lige trykket gem. Ignorer overstående!!
Avatar billede pvtsommer Nybegynder
05. april 2006 - 16:06 #6
Altså... princippet er jo som du siger:

Hent data fra database.
Opskriv i formular (som har action til en side der gemmer)
Gem i database.

Det her er et eksempel! Du skal selvfølgelig selv have lov til at tænke lidt også ;)

<?PHP

// Variabel
// Hvad man skal gøre med tingen...
  $todo = htmlentities($_GET[todo]);
// Den man vil redigere/gemme ændringer på
  $dagbog_id = htmlentities($_GET[dagbog_id]);

// Gemmer ændringerne.
if($todo == "save") {
// Husk IGEN at tjekke om man er admin

$titel = htmlentities($_POST[titel]);
$entry= htmlentities($_POST[entry]);

mysql_query("UPDATE mos_dagbog SET titel='$titel', entry='$entry' WHERE dagbog_id='$dagbog_id' LIMIT 1") or die(mysql_error());

echo 'Så blev der sq redigeret i en dagbog. Herligt';

}

// gør så man i adresselinjen bare tilføjer ?todo=edit, og så ser man formularen
if($todo == "edit") {

// Jeg har ikke lavet noget admintjek, det må du selv lige indsætte

// Database query (jeg har sagt *, det er IKKE fornuftigt da det er langsomt.
// udskift dem i stedet med felt1, felt2, felt3.
$dump = mysql_query("SELECT * FROM mos_dagbog WHERE id='$dagbog_id' LIMIT 1");
// Smider al data fra tabellen ind i $viewdata. (fx $viewdata[id] = id - sjovt nok.
$viewdata = mysql_fetch_assoc($dump);
// Her slutter jeg med PHP, da det er hurtigere bare lige at skrive sin HTML der.
// Bemærk at action skifter fra todo=edit, til todo=save!!
?>

<form action="gemEdit.php?todo=save" method="post">
<p>
  Dagbogens titel<br>
  <input type="text" name="titel" value="<?= $viewdata[titel]; ?>">
</p>
<p>
  Dagbogens indhold<br>
  <textarea name="entry"><?= $viewdata[entry]; ?></textarea>
</p>
<p>
  Klik her for at gemme<br>
  <input type="submit" value="Gem ændringer">
</p>
</form>
<?PHP
}
?>
Avatar billede pvtsommer Nybegynder
05. april 2006 - 16:07 #7
Jeg ved godt det ikke er svaret på dit spørgsmål, men da jeg ikke kan forstå din kode særlig godt, må et eksempel være hvad jeg kan hjælpe dig med! Håber altså du kan bruge det :)
Avatar billede jrostved Nybegynder
05. april 2006 - 16:10 #8
Jeg vil lige se på det!
Jeg kan kun lære noget af det!
Jeg skriver lige hvis jeg har noget mere specifikt!
:)
Avatar billede pvtsommer Nybegynder
05. april 2006 - 16:11 #9
Gør bare det.

Men husk som en hovedregel at bruge minimum htmlentities($_POST[foobar]); på dine posts... Jeg ved ikke meget om SQL-injections som det vist hedder når man "hacker" på den måde, men altså... hellere være på den sikre side. Du kan læse mere om den på www.php.net/htmlentities

:)
Avatar billede jrostved Nybegynder
15. januar 2008 - 08:31 #10
svar!
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