30. maj 2009 - 22:50
Der er
3 kommentarer og 1 løsning
Update
Godaften alle... Sidder her med en community som jeg er i gang med at flette sammen. Det som jeg er kommet til er selve update af ens profil. Hvor selvfølgelig gider det ikke virke med at lave selve opdateringen delen. Det henter fint ens data og ligeså i edit delen viser den også dataene fra databasen. Men den gider ikke lave selve opdateringen når der bliver trykt på Gem. Her er koden som den ser ud nu, hvor jeg har brugt JavaScript (visibility) til at kunne vise ens profil og derefter kunne redigerer det. ************ <?php } elseif($_GET['mode'] == "profil"){ ?> <!-- PROFIL START --> <table border="0" width="494" cellspacing="0" cellpadding="0"> <tr> <td class="topbar-middle-images"> <div class="topbar-middle" style="float: right">Din profil</div> </td> </tr> <tr> <td class="px494-text-middle" style="width:494px"> <script language="JavaScript"> function setVisibility(id, visibility) { document.all[id].style.display = visibility; }</script> <div id="profilmain" style="display:block"> <input value="Edit" type="button" onClick="setVisibility('profilmain', 'none');setVisibility('profilsub', 'inline');"> <br /> <?php $sql = "SELECT * FROM boller_community WHERE id=$_SESSION[id]"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { ?> <table class="brugerinfo" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="brugerinfo-celle">Brugernavn</td> <td class="brugerinfo-celle2"><?php echo "$row[brugernavn]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Fulde navn</td> <td class="brugerinfo-celle2"><?php echo "$row[navn]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Online tid</td> <td class="brugerinfo-celle2"><?php echo "$row[onlinemin]"; ?> minutter</td> </tr> <tr> <td class="brugerinfo-celle">Køn</td> <td class="brugerinfo-celle2"><?php if($row['koen'] == 1){ ?>Mand<?php }else{ ?>Kvinde<?php } ?></td> </tr> <tr> <td class="brugerinfo-celle">Alder</td> <td class="brugerinfo-celle2"> <?php $ts = "$row[foedselsdato]"; $startdato = date("d-m-Y H:i:s", $ts); $slutdato = date("d-m-Y H:i:s", time()); $start = strtotime($startdato); $slut = strtotime($slutdato); $diff = $slut-$start; $aar = floor($diff/31536000); echo "$aar År"; ?> </td> </tr> <tr> <td class="brugerinfo-celle">Land</td> <td class="brugerinfo-celle2"><?php echo "$row[land]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">By</td> <td class="brugerinfo-celle2"><?php echo "$row[by]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Hjemmeside</td> <td class="brugerinfo-celle2"><a href="java script:window.open('<?php echo "$row[hjemmeside]"; ?>','_blank');void(0)"><?php echo "$row[hjemmeside]"; ?></a></td> </tr> </table> <?php } ?> </div> <div id="profilsub" style="display:none"> <?php if (isset($_POST['update'])) { $navn = $_POST['navn']; $koen = $_POST['koen']; $foedselsdato = $_POST['foedselsdato']; $land = $_POST['land']; $by = $_POST['by']; $hjemmeside = $_POST['hjemmeside']; $beskrivelse = $_POST['beskrivelse']; $kodeord = $_POST['kodeord']; $id = $_POST['id']; $sql = "UPDATE community SET navn='$navn', koen='$koen', foedselsdato='$foedselsdato', land='$land', by'$by', hjemmeside='$hjemmeside', beskrivelse='$beskrivelse', kodeord='$kodeord' WHERE id=$id"; $query = mysql_query($sql) or die(mysql_error()); } $sql = "SELECT * FROM community WHERE id=$_SESSION[id]"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { ?> <form method="post" action="index.php?mode=profil"> <input type="submit" name="update" value="Gem"><br /> <input type="hidden" name="id" value="<?= $row['id']; ?>" /> <table class="brugerinfo" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="brugerinfo-celle">Brugernavn</td> <td class="brugerinfo-celle2"><input type="text" value="<?php echo "$row[brugernavn]"; ?>" disabled="disabled" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Fulde navn</td> <td class="brugerinfo-celle2"><input type="text" name="navn" value="<? echo $row['navn']; ?>" style="width: 350px"></td> </tr> <tr> <td class="brugerinfo-celle">Online tid</td> <td class="brugerinfo-celle2"><input type="text" value="<?php echo "$row[onlinemin]"; ?> minutter" disabled="disabled" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Køn</td> <td class="brugerinfo-celle2"><input type="text" name="koen" value="<? echo $row['koen']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Fødselsdato</td> <td class="brugerinfo-celle2"><input type="text" name="foedselsdato" value="<? echo $row['foedselsdato']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Land</td> <td class="brugerinfo-celle2"><input type="text" name="land" value="<? echo $row['land']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">By</td> <td class="brugerinfo-celle2"><input type="text" name="by" value="<? echo $row['by']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Hjemmeside</td> <td class="brugerinfo-celle2"><input type="text" name="hjemmeside" value="<? echo $row['hjemmeside']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Kodeord</td> <td class="brugerinfo-celle2"><input type="password" name="kodeord" value="<? echo $row['kodeord']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Beskrivelse</td> <td class="brugerinfo-celle2"><input type="text" name="beskrivelse" value="<? echo $row['beskrivelse']; ?>" style="width: 350px" /></td> </tr> </table> </form> <?php } ?> </div> </td> </tr> <tr> <td class="downbar-middle"></td> </tr> </table> <!-- PROFIL SLUT --> ************
Annonceindlæg fra Infor
Hov, dette er sådan den ser ud lige nu: ************ <?php } elseif($_GET['mode'] == "profil"){ ?> <!-- PROFIL START --> <table border="0" width="494" cellspacing="0" cellpadding="0"> <tr> <td class="topbar-middle-images"> <div class="topbar-middle" style="float: right">Din profil</div> </td> </tr> <tr> <td class="px494-text-middle" style="width:494px"> <script language="JavaScript"> function setVisibility(id, visibility) { document.all[id].style.display = visibility; }</script> <div id="profilmain" style="display:block"> <input value="Edit" type="button" onClick="setVisibility('profilmain', 'none');setVisibility('profilsub', 'inline');"> <br /> <?php $sql = "SELECT * FROM community WHERE id=$_SESSION[id]"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { ?> <table class="brugerinfo" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="brugerinfo-celle">Brugernavn</td> <td class="brugerinfo-celle2"><?php echo "$row[brugernavn]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Fulde navn</td> <td class="brugerinfo-celle2"><?php echo "$row[navn]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Online tid</td> <td class="brugerinfo-celle2"><?php echo "$row[onlinemin]"; ?> minutter</td> </tr> <tr> <td class="brugerinfo-celle">Køn</td> <td class="brugerinfo-celle2"><?php if($row['koen'] == 1){ ?>Mand<?php }else{ ?>Kvinde<?php } ?></td> </tr> <tr> <td class="brugerinfo-celle">Alder</td> <td class="brugerinfo-celle2"> <?php $ts = "$row[foedselsdato]"; $startdato = date("d-m-Y H:i:s", $ts); $slutdato = date("d-m-Y H:i:s", time()); $start = strtotime($startdato); $slut = strtotime($slutdato); $diff = $slut-$start; $aar = floor($diff/31536000); echo "$aar År"; ?> </td> </tr> <tr> <td class="brugerinfo-celle">Land</td> <td class="brugerinfo-celle2"><?php echo "$row[land]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">By</td> <td class="brugerinfo-celle2"><?php echo "$row[by]"; ?></td> </tr> <tr> <td class="brugerinfo-celle">Hjemmeside</td> <td class="brugerinfo-celle2"><a href="java script:window.open('<?php echo "$row[hjemmeside]"; ?>','_blank');void(0)"><?php echo "$row[hjemmeside]"; ?></a></td> </tr> </table> <?php } ?> </div> <div id="profilsub" style="display:none"> <?php if (isset($_POST['update'])) { $navn = $_POST['navn']; $koen = $_POST['koen']; $foedselsdato = $_POST['foedselsdato']; $land = $_POST['land']; $by = $_POST['by']; $hjemmeside = $_POST['hjemmeside']; $beskrivelse = $_POST['beskrivelse']; $kodeord = $_POST['kodeord']; $id = $_POST['id']; $sql = "UPDATE community SET navn='$navn', koen='$koen', foedselsdato='$foedselsdato', land='$land', by'$by', hjemmeside='$hjemmeside', beskrivelse='$beskrivelse', kodeord='$kodeord' WHERE id=$id"; $query = mysql_query($sql) or die(mysql_error()); } $sql = "SELECT * FROM community WHERE id=$_SESSION[id]"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { ?> <form method="post" action="index.php?mode=profil"> <input type="submit" name="update" value="Gem"><br /> <input type="hidden" name="id" value="<?= $row['id']; ?>" /> <table class="brugerinfo" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="brugerinfo-celle">Brugernavn</td> <td class="brugerinfo-celle2"><input type="text" value="<?php echo "$row[brugernavn]"; ?>" disabled="disabled" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Fulde navn</td> <td class="brugerinfo-celle2"><input type="text" name="navn" value="<? echo $row['navn']; ?>" style="width: 350px"></td> </tr> <tr> <td class="brugerinfo-celle">Online tid</td> <td class="brugerinfo-celle2"><input type="text" value="<?php echo "$row[onlinemin]"; ?> minutter" disabled="disabled" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Køn</td> <td class="brugerinfo-celle2"><input type="text" name="koen" value="<? echo $row['koen']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Fødselsdato</td> <td class="brugerinfo-celle2"><input type="text" name="foedselsdato" value="<? echo $row['foedselsdato']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Land</td> <td class="brugerinfo-celle2"><input type="text" name="land" value="<? echo $row['land']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">By</td> <td class="brugerinfo-celle2"><input type="text" name="by" value="<? echo $row['by']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Hjemmeside</td> <td class="brugerinfo-celle2"><input type="text" name="hjemmeside" value="<? echo $row['hjemmeside']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Kodeord</td> <td class="brugerinfo-celle2"><input type="password" name="kodeord" value="<? echo $row['kodeord']; ?>" style="width: 350px" /></td> </tr> <tr> <td class="brugerinfo-celle">Beskrivelse</td> <td class="brugerinfo-celle2"><input type="text" name="beskrivelse" value="<? echo $row['beskrivelse']; ?>" style="width: 350px" /></td> </tr> </table> </form> <?php } ?> </div> </td> </tr> <tr> <td class="downbar-middle"></td> </tr> </table> <!-- PROFIL SLUT --> ************
Hmmm, jeg kan ikke lige finde fejlen der gør at det ikke virker, prøv at finde ud af hvor langt koden kommer, du kan fx echoe $_POST['update']. Jeg kan dog oplyse at din kode praktisk talt er et stort sikkerhedshul. Du validerer på ingen måde at brugeren ikke sender: Et streng slut tegn efterfulgt af SQL kommandoer, HTML og/eller JavaScript kode som vil køres i andre brugeres browsere når de ser information fra brugerens profil, et andet id end brugerens eget. De to første problemer kan du løse ved at filtrere på de tegn som accepteres, fjern alt andet end alfanumeriske tegn og udvalgte sikre tegn. Id'et skal du tjekke op imod brugerens session cookie, og dertil skal du have et en ekstra sikkerhed til sikring imod cross site request forgery angreb, fx et javascript på siden som fylder brugerens session cookie ind i formen, hvor du så skal validere at det er den rigtige cookie som er fyldt ind.
Nåh ja, jeg kommer lige i tanke om at data øverst på siden vil selvfølgelig være de gamle data når man sender nye data ind da de blev indlæst før opdateringen. Du skal under alle omstændigheder flytte din opdateringskode til først på siden. Nu jeg kigger på det kan der også være en eller anden sammenblanding af id og session id. Jeg kan jo ikke se hele din kode, men det ser lidt underligt ud at du sammenligner noget der hedder hhv. id og session id.
Altså, det kode du har lavet er noget rod. Et forslag der kan hjælpe dig med at skabe overblik og struktur over din kode, er at du deler din kode op i to filer. opdater_profil.php og opdater_profil_submit.php eksempelvis. hvor opdater_profil.php indeholder den visuelle visning af brugerens profil og opdater_profil_submit.php udelukkende indeholder den kode der skal opdatere din database og slutteligt viderestiller til opdater_profil.php. Prøv den opdeling og se hvordan du får et bedre overblik på dit projekt.
Vi tilbyder markedets bedste kurser inden for webudvikling