Strona 5 z 6
: 03 sierpnia 2007, 14:55
autor: Demerzel
Znalazłem serwerek żeby się pobawić ale niema na nim praktycznie żadnych ułatwień. Pisząc małe co nieco do zaglądania do bazy MySQL robie jakiś głupi błąd i kręcę się w kółko.
Kod: Zaznacz cały
<?php
$form =<<< EOF
<H1>form</H1>
EOF;
if(isset($_POST['abba']))//Tu błąd
{
$sql_conn=mysql_connect('','','');
mysql_select_db('',$sql_conn) or die ("bł
: 03 sierpnia 2007, 16:57
autor: jang
: 03 sierpnia 2007, 17:03
autor: Demerzel
To nie załatwia sprawy bo nagłówek jest tylko przykładem a w środku ma być cały formularz, próbowałem tak i się wywróciło. Ale rozwiązanie już znalazłem Przed
EOF zlikwidowałem tabulacje i zaskoczyło. Dziwne ale działa.
[ Dodano: 2007-08-03, 17:34 ]
Prześladuje mnie jednak nieco inny problem. Kiedy wysyłam z formularza jakieś dane poczym stawiam warunek
Dochodzi do czegoś takiego:
-naciskam wyślij niewpisując nic do pola text w formulażu nic nie wyświetla
-wpisze coś wyświetla zgodnie z warunkiem
-wyśle formularz z pustym polem text warunek isset zachowa się jakby pole było ustawione
probowałem tego uniknąć przez
nie bardzo mi się to udało.
: 04 sierpnia 2007, 15:59
autor: Stawi
isset() sprawdza czy zmienna jest ustwiona (rozna od null), a pusty tekst nie jest nullem. Lepiej zrobic to przez samym ifem albo if(!empty()) wychodzi na to samo.
Ogolnie to:
Kod: Zaznacz cały
if ($var) === if (!empty($var))
if (isset($var)) === if (!is_null($var))
if (is_scalar($var)) === if (is_bool($var) || is_int($var) || is_real($var) || is_string($var))
if (is_numeric($var)) === if (is_int($var) || is_real($var)) // i stringi liczbowe
A unset() usuwa zmienna, wiec na 99.999% tego nie chcesz
: 04 sierpnia 2007, 16:46
autor: Demerzel
Za chwile powalczę z zaproponowanymi zmianami w kodzie. Tymczasem myślę nad metodą zabezpieczenia pliku który jest potrzebny do jako takiego zarządzania bazą danych. Wygląda to tak, jest serwer i trochę miejsca ale żadnych udogodnień więc napisałem sobie małe co nieco. Niestety jak zaczną się odwiedziny potrzebne będzie zabezpieczenie tego hasłem.
Pierwszy pomysł to zrobienie formularza potem if i porównanie wpisu do hasła w kodzie. Są jakieś lepsze metody gdzie:
-hasło wpisuje tylko raz i pracuje
-niema ryzyka iż hasło zostanie wyciągnięte przez kogoś niepowołanego
-metoda nie wymaga "cudów na wianku"
(sesji w domyśle)
Kod: Zaznacz cały
<HTML>
<HEAD>
<TITLE>MySQLAdmin</TITLE>
</HEAD>
<BODY>
<?php
$serwer="";
$uzytkownik="";
$baza=$uzytkownik;
$haslo="";
$zmienna = <<< EOF
<H2 align="center">MySQLAdmin</H2>
<hr>
[b]Wy
: 05 sierpnia 2007, 16:19
autor: Stawi
Demerzel pisze:Pierwszy pomysł to zrobienie formularza potem if i porównanie wpisu do hasła w kodzie. Są jakieś lepsze metody gdzie:
-hasło wpisuje tylko raz i pracuje
-niema ryzyka iż hasło zostanie wyciągnięte przez kogoś niepowołanego
-metoda nie wymaga "cudów na wianku" ]
Logowanie prez sesje nie jest trudne, wystarczy session_start() na poczatku i pozamiatane
Potem cos w stylu:
Kod: Zaznacz cały
if (count($_POST)) { // sprawdzamy czy zostala wywolana akcja przez POST
if (($_POST['user'] == 'admin') && ($_POST['pass'] = 'debianrules')) { // czy dane sa prawidlowe?
$_SESSION['zalogowany'] = true; // zapisz ze zalogowano
} else {
$_SESSION['zalogowany'] = false;
}
}
Zamiast drugiej liniki "nachamowej" mozna zrobic cos takiego, jesli potrzeba dostepu przez uzytkownikow:
Kod: Zaznacz cały
if (login_ok($_POST['user'], $_POST['pass'])
No i oczywiscie funkcje login_ok() w postaci:
Kod: Zaznacz cały
function login_ok($user, $pass) {
$result = mysql_query("SELECT 1 FROM users WHERE user_name='{$user}' AND user_pass='{$pass}'");
return (mysql_num_rows($result) > 0);
}
Oczywiscie z przyczyn bezpieczenstwa polecam zapisyuwanie hasel w poscaci zaszyfrowanej, chocby przez glupie md5().
Tabela users powinna miec index unique na kolumne user_name.
Demerzel pisze:Również szukałem jak zrobić aby automatycznie wyszukiwał powtarzające sie słowa w zmiennej "słowa". Czy da się to zrobić prościej niż dwiema tablicami, przepisując z tablicy a do b przed przepisaniem z a do b sprawdzać czy w b jest takie słowo jak to to go nie przepisywać?
Polecam zapoznac sie z funkcja array_unique() i sprytnie jej uzyc. Wskazowka: explode, array_unique, implode
: 07 sierpnia 2007, 19:34
autor: Demerzel
Zrobienie wyszukiwania powtarzających sie słów zajęło minutkę, dzięki.
Kod: Zaznacz cały
$podzielone = explode(" ", $slowa);
$unikatowe = array_unique ($podzielone);
$slowa = implode(" ", $unikatowe);
Co do prostoty sesji. Robiłem kiedyś stronę z tabelką zachowującą się jak ramka na sesji. Od tamtego czasu jakoś nie lubię pracować z sesjami ale jak mus to mus.
: 09 sierpnia 2007, 00:46
autor: Stawi
Demerzel pisze:Co do prostoty sesji. Robiłem kiedyś stronę z tabelką zachowującą się jak ramka na sesji. Od tamtego czasu jakoś nie lubię pracować z sesjami ale jak mus to mus.
Mam na koncie kilka duzych i kilkanascie mniejszych projektow. 90% z nich kozysta z sesji. Najczesciej tam gdzie jest wymagane logowanie, ale tez tam gdzie wymagane jest monitorowanie odwiedzajacych sesje to jedyne wyjscie. Oczywiscie nie mowie tu tylko o php-sessions (tym standardowym session_start itd). Tego uzywam jak potrzeba minimum, do wiekszych rzeczy korzystam z wlasnej biblioteki ktora opiera sesje na bazie danych. Wiem ze nie jest to do konca super wydajne bo kazda odslona powoduje zapis do bazy, jednak dla stron o stosunkowo niewielkiej ilosci odslon (ponizej tysiaca dziennie) nie robi to zadnych problemow, a daje duzo wieksza funkcjonalnosc, jak chocby widok od strony administracyjnej kto jest, na ktorej stronie i co robi.
Sesje nie sa zle jak je znasz, a duzo roboty z tym nie ma. Tak jak pisalem, session_start() i potem uzywac $_SESSION i wlasciwie tyle na poczatek starczy
: 16 sierpnia 2007, 17:21
autor: Demerzel
Jakby komuś było potrzeba:
Kod: Zaznacz cały
<?php
session_start();
if(($_POST['user']=='imie')&&($_POST['password']=='hasło')) $_SESSION['logowanie']='true';
else $_SESSION['logowanie']= 'false';
if($_SESSION['logowanie'] == 'true')
{
$przenies = "cel.php";
header("HTTP/1.1");
header("Cache-Control: no-cache, must-revalidate");
header("Location: ".$przenies);
}
else
{
$form = <<< EOF
<form action="sesja.php" method="post">
użytkownik:<input type="text" name="user"></p>
hasło:<input type="password" name="password"></p>
<input type="submit" value="zaloguj">
</form>
EOF;
echo $form;
}
?>
Jakieś propozycje poprawek?
: 20 sierpnia 2007, 18:01
autor: Stawi
Do $_SESSION['logowanie'] zapisywal bym true i false jako bool (bez cudzyslowow) a nie stringi (z cudzyslowami). Niby to samo ale jednak profesjonalniej.
Przenoszenie na inny adres powinno byc wykonane tak:
Kod: Zaznacz cały
header('Status: 302 Found');
header("Location: nowyadres");
Dodawanie headera HTTP/1.1 nie ma sensu bo robi to apache sam od siebie
A co do tego echo formy.. mozna zrobic tak:
bo po co tworzyc zmienna jak tylko jest wyswietlona i to zaraz, albo wrecz przerwac PHP zrobic normalnie i napisac normalnie kod w html i rozpoczac PHP jeszcze raz. Dziala CHYBA najszybciej, i jak uzywasz jakiegos dobrego edytorka to ci nawet bedzie uzupelnial skladnie
Jak nie do konca jest jasne to przykad:
Kod: Zaznacz cały
<?
// KOD PHP
if ($cokolwiek) {
?>
To zostanie wyswietlone jako [b]normalny[/b] tekst.
<?
} else {
//cos tam dalej..
}
?>
I jeszce uwaga co do "Cache-Control". Niektore przeglarki maja to gdzies i i tak keszuja.. Dobrze podawac tez date modyfikacji z przeszlosci dla wiekszej pewnosci. Osobiscie nie podaje nic pozatym co podalem, i dziala dobrze.