Avatar billede tendal Nybegynder
28. marts 2011 - 20:38 Der er 15 kommentarer og
1 løsning

Sæt værdier baseret på link

Hej
Jeg har en menu (lavet ved hjælp af CSS og Javascript) som teksterne skal kunne ændres i. Jeg har lavet et specielt redigerings sted til dette.
Menuen er bygget op efter følgende princip:
<ul class="menu" id="menu">
<li><a href="1.php" class="menulink">Profil</a>
  <ul>
  <li><a href="1_1.php">Hvem er vi</a></li>
  <li><a href="1_2.php">Kompetencer</a></li>
  <li><a href="1_3.php">Vision</a></li>
  </ul>
</li>...

Hvis jeg forsætter koden på ovenstående måde får jeg ekstremt mange sider der er næsten ens og derfor tænkte jeg at jeg måtte kunne gøre noget smartere. Noget hvor href="#" eller $_SERVER['PHP_SELF'], altså bliver på sammen side, men loader noget forskelligt afhængig af hvilket link der bruges.
For at gøre dette skal knytte en værdi til hvert link. Værdien 1 skal bruges ved første link og værdien 1_1 skal bruges ved andet link osv. Men hvordan gør jeg det? Og hvordan kommer jeg til den?
Avatar billede claes57 Ekspert
28. marts 2011 - 20:47 #1
hvis det bare er samme side, så
<li><a href="?valg=hvem">Hvem er vi</a></li>
og så tester du på valg - er den ikke kendt, så tag startsiden.
Avatar billede danco Nybegynder
28. marts 2011 - 20:59 #2
Som Claes er inde på mener jeg også at GET parametre er vejen frem for dig. Det gør det ligeledes muligt for dine brugere at linke direkte til enkelte sider via unikt link.

Et lille kode eksempel fra et af mine egne projekter:

$menu = new Menu();

if(isset($_GET['page'])) {
  echo $menu->publicMenu();
  $page = new Page($_GET['page']);
  echo $page->showPage();
} else {
    echo Page::startPage();
}
Avatar billede tendal Nybegynder
28. marts 2011 - 21:12 #3
Er ikke helt med på det sidste du skriver - gider du lave et eksempel?
Avatar billede tendal Nybegynder
28. marts 2011 - 21:14 #4
ovenstående var til claes
Avatar billede tendal Nybegynder
28. marts 2011 - 21:20 #5
I den form jeg bruger til at rette i teksten bruger jeg $_SERVER['PHP_SELF'] som action, men det betyder at ?valg=... forsvinder ved gem - hvordan får jeg det til at blive?
Avatar billede tendal Nybegynder
28. marts 2011 - 21:34 #6
Har fundet ud af blot at lave .?valg=... på den og det virker fint :o)
Avatar billede danco Nybegynder
28. marts 2011 - 21:40 #7
Du bliver nødt til at vise os den kode der ikke virker, og vise os konkret hvad der er fejlen.
Avatar billede tendal Nybegynder
28. marts 2011 - 22:18 #8
Den her kode fungerer efter hensigten:
<?
if (isset($_GET['site'])) {
    $menu = "menu".$_GET['site'];   
}

if(isset($_POST['submit']))
{
    $text = $_POST['text'];
       
    $sql = "UPDATE menubasen SET text = '$text' WHERE name='$menu'";
    mysql_query($sql)or die("MySQL fejl: " . mysql_error());
}
?>
<?
error_reporting (E_ALL ^ E_NOTICE);
$sql = "SELECT text FROM menubasen WHERE name='$menu'";
$result = mysql_query($sql)or die("MySQL fejl: " . mysql_error());
$array = mysql_fetch_row($result);
$text = $array[0];
?>
<? include("header1.php"); ?>
<tr>
<td class="left"><img src="../images/waterpump.jpg" /></td>
<td class="indholdscelle" colspan="5">
<p><i style="color:red;">BEMÆRK DU ER I MENU REDIGERINGS MODE - FOR AT KOMME TILBAGE <a href="index.php">KLIK HER</a></i></p>
<form method="post" action="<? echo htmlentities($_SERVER['PHP_SELF']).'?site='.$_GET['site']; ?>" style="width:100%">
<? echo $text; ?>: <input type="text" name="text" />
<input name="submit" type="submit" value="Gem"/>
</form>
</td>
</tr>
Avatar billede tendal Nybegynder
28. marts 2011 - 23:14 #9
Vil gerne give point, men jeg skal lige bruge et svar fra dig Claes
Avatar billede claes57 Ekspert
29. marts 2011 - 08:59 #10
det, jeg lavede var så lidt, så du må selv lukke...
Avatar billede tendal Nybegynder
29. marts 2011 - 20:28 #11
ok jamen det gør jeg så, med mindre danco vil have dem?
Avatar billede wanze Nybegynder
29. marts 2011 - 20:40 #12
"UPDATE menubasen SET text = '$text' WHERE name='$menu'"

Det der er skidefarligt. Du tager noget brugerinput og sender strengen direkte mod din database, der kan stå alverdens ting i det. Du burde læse lidt om SQL injections. Sørg for at du escaper al data du arbejder med som brugeren har haft mellem fingrene.

For at undgå SQL injections her skal du omskrive
 $menu = "menu".$_GET['site'];
til
 $menu = "menu". mysql_real_escape_string($_GET['site']);
Avatar billede danco Nybegynder
29. marts 2011 - 20:58 #13
Jeg er enig i at man altid bør escape de input man får fra brugere, dog antog jeg, måske forkert, at den fremviste kode herinde udelukkende var beskrivende og ikke udtryk for den konkrete kode.

Men jeg smider et svar.
Avatar billede olebole Juniormester
29. marts 2011 - 21:00 #14
<ole>

wanze >> - og det der er skidefarligt minus 0,0000001!

Før PHP kom med DB-API'er med parametriserede kald, var den slags 'hacks' rigtig nok eneste løsning. I dag, hvor vi har både PDO og mysqli til rådighed, bør man bruge de sikre metoder i stedet  *o)

/mvh
</bole>
Avatar billede wanze Nybegynder
29. marts 2011 - 21:44 #15
olebole:
Det er rigtigt, men jeg tænker bare jeg har mere held med at få ham til at bruge mysql_real_escape_string(), fremfor at få ham til at sætte sig ind i det nye API.
Avatar billede olebole Juniormester
29. marts 2011 - 22:06 #16
-- probably right  *o)
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