![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 10.07.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Heh, to moj pierwszy post w php (ale teoretycznie tu sie nadaje).
W panelu administracyjnym robie edytowanie wpisow w bazie danych MySQL. Obawiam sie, ze niestety momentami nie jest to do konca dobrze rozwiazane wiec zalaczam kod fragmentu do edycji: [php:1:4d48f993af]<?php function EdytujWpis() { ?> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2"> <link rel="stylesheet" href="../../css/style.css" type="text/css"> <title>Panel administracyjny</title> </head> <body style="background-image: none; background-color: #222; margin: 5px;"> <? switch ($_GET['Edytuj']) { case 0: Edytowanie(); break; case 1: PotwierdzenieEdytowania(); break; case 2: NadpisanieDanych(); break; default: Header('Location: panel.php?Akcja=0'); break; } ?> </body> </html> <? } function Edytowanie() // Wyswietla formularz do edytowania wpisu { global $SQLHost,$SQLUser,$SQLPass,$SQLDBName; @mysql_connect($SQLHost,$SQLUser,$SQLPass); mysql_select_db($SQLDBName); $SQLQuery = mysql_query('select * from kopia where Nr='.$_GET['Nr'].''); $SQLRekord = mysql_fetch_array($SQLQuery); ?> <table width="780" border="0" cellspacing="0" cellpadding="0"> <form method="get"> <? print ' <tr> <td width="160" class="panel" id="bright">Nr strony:</td> <td class="panel" id="bright">'.$SQLRekord['Nr'].'</td> </tr> <tr> <td width="160" class="panel" id="bright">Tytuł strony:</td> <td class="panel" id="bright"><input class="login" id="edit" type="text" name="Tytul" value="'.$SQLRekord['Tytul'].'"></td> </tr> <tr> <td width="160" class="panel" id="bright">Data:</td> <td class="panel" id="bright"><input class="login" id="edit" type="text" name="Data" value="'.$SQLRekord['Data'].'"></td> </tr> <tr> <td width="160" class="panel" id="bright">Poziom:</td> <td class="panel" id="bright"><input class="login" id="edit" type="text" name="Poziom" value="'.$SQLRekord['Poziom'].'"></td> </tr> <tr> <td width="160" class="panel" id="bright">Strona nadrzędna:</td> <td class="panel" id="bright"><input class="login" id="edit" type="text" name="Nadrzedna" value="'.$SQLRekord['Nadrzedna'].'"></td> </tr> <tr> <td width="160" valign="top" class="panel" id="bright" style="padding-top: 8px;">Zawartość (treść):</td> <td class="panel" id="bright"><textarea name="Zawartosc" cols="100" rows="26" style="border: #222 1px solid; font-family: verdana, sans-serif; color: #222; font-size: 11px; text-decoration: none;">'.$SQLRekord['Zawartosc'].'</textarea></td> </tr> <tr> <td colspan="2" height="50" align="center" valign="bottom" class="panel" id="bright"> <input type="hidden" name="Akcja" value="2"> <input type="hidden" name="Nr" value="'.$SQLRekord['Nr'].'"> <input type="hidden" name="Edytuj" value="1"> <input type="submit" value="Zapisz zmiany">'; ?> <input type="button" value="Powrót do spisu" onClick="document.location.href='panel.php?Akcja=0'"> </td> </tr> </form> </table> <? } function PotwierdzenieEdytowania() { global $SQLHost,$SQLUser,$SQLPass,$SQLDBName; @mysql_connect($SQLHost,$SQLUser,$SQLPass); mysql_select_db($SQLDBName); $SQLQuery = mysql_query('select * from kopia where Nr='.$_GET['Nr'].''); $SQLRekord = mysql_fetch_array($SQLQuery); print '<p align="center" class="normal" id="bright">Na pewno nadpisać wpis nr '.$_GET['Nr'].'?<br><span class="small" id="bright">(Tytuł: '.$SQLRekord['Tytul'].')</span></p>'; print '<p align="center" class="normal" id="bright"><a class="normal" id="bright" href="panel.php?Akcja=2&Edytuj=2&Nr='.$_GET['Nr'].'&Tytul='.$_GET['Tytul'].'&Data='.$_GET['Data'].'&Poziom='.$_GET['Poziom'].'&Nadrzedna='.$_GET['Nadrzedna'].'&Zawartosc='.$_GET['Zawartosc'].'"><b>TAK</b></a> | <a class="normal" id="bright" href="panel.php?Akcja=0"><b>NIE</b></a>'; } function NadpisanieDanych() { global $SQLHost,$SQLUser,$SQLPass,$SQLDBName; @mysql_connect($SQLHost,$SQLUser,$SQLPass); mysql_select_db($SQLDBName); $SQLQuery = mysql_query('select * from kopia where Nr='.$_GET['Nr'].''); $SQLRekord = mysql_fetch_array($SQLQuery); if ($_GET['Tytul'] != $SQLRekord['Tytul']) { mysql_query('update kopia set Tytul="'.$_GET['Tytul'].'" where Nr='.$SQLRekord['Nr'].''); } Standard(); } ?>[/php:1:4d48f993af] Teraz wyjasnienia: Standard() - funkcja, ktora laduje sie gdy Akcja == 0 i wyswietla po prostu wszystkie wpisy z bazy zeby mozna bylo wybrac, ktory edytowac, usunac itp. I pytanie: 1. Nie wiem czy przekazywanie zawartosci <textarea> przez GET jest bezpieczne - nie wiem czy przy wiekszych rozmiarach tekstu mi cos nie zginie? Zdaje sobie sprawe, ze jest to troche amatorskie rozwiazanie, ale nie przyszlo mi nic innego do glowy jak moglbym pobierac potwierdzenie od uzytkownika i zeby w miedzyczasie mi nie zginela zawartosc formularza (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) 2. Jak moge usprawnic edytowanie tych pol, ktore byly zmienione? W kodzie uwzglednilem jedynie Tytul, ale normalnie wszystkie pola musza byc sprawdzone i jesli wystapily zmiany to trzeba je nadpisac w bazie. Troche malo wygodne z punktu widzenia objetosci kodu jest pisanie tej instrukcji warunkowej dla kazdego pola z osobna... 3. Czy ta linia: default: Header('Location: panel.php?Akcja=0'); break; jest poprawna z punktu widzenia poprawnosci skladni php? Konkretnie chodzi mi o to czy tak moge uzywac funkcji Header? |
|
|
![]() |
![]()
Post
#2
|
|
Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
1. Nie jest bepieczne, w adresie możesz przesłac max 256 znaków. Wysyłaj dane metodą POST, a jeśli nie chcesz ich utracić wsadź je w sesje, ciacho, lub wysyłaj w inputach typu hidden.
2. Pętla foreach, z tym że najpierw musisz powyrzucać z $_POST dane których porównywać nie chcesz (lub utworzyć nową tablice bez zbędnych danych.). 3. Nie ma w tym nic złego. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 08:38 |