Pereiti prie turinio

[dalinuosi] PHP sistemėlė failams talpinti


Rekomenduojami pranešimai

Sveiki, uždarbiautojai,

mokyklos tikslais pasigaminau mažą sistemėlę failams talpinti. Reikėjo kur mokytojai namų darbus dėti. Naudoja MySQL, du vartotojų tipai. Vienas gali tik siųstis, kitas pridėti ir trinti. Neprisijungus matoma tik prisijungimo forma. Vartotojų valdymui grafinės sąsajos nėra, teks naudotis phpMyAdmin. Prisegtame faile be php kodo yra sql failas importavimui ir readme.txt. Angliškas pastarasis todėl , kad programuodamas stengiuosi viską komentuoti angliškai, tad ir readme šia kalba sukurpiau. Nepykit už klaidas, jei rasit :D

 

Tai tiek, tikiuosi, kam nors pravers smile.gif

simple_file_sharing_php.zip

Redagavo dayer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

foreach ($_GET as $key => $value)
$_GET[$key] = addslashes($value);

foreach ($_POST as $key => $value)
$_POST[$key] = addslashes($value);

 

Kol atkasiau, kur escape'inimas, labai gudriai įkištas... Tik sakoma, kad saugiausia naudot mysql_real_escape_string() :)

It's highly recommended to use DBMS specific escape function

 

Bet šiaip tikrai tvarkingas, gražus kodas - nedažnas dalykas iš šiame forume savo kodą publikuojančių. Taip ir toliau! :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Žinau dėl real_escape, bet kažkokiam servery, kur buvau įdėjęs, neveikė šita funkcija, tai kaip pakeičiau į addslashes, taip ir liko rolleyes.gif O dėl tvarkingumo, galvojau, atvirkščiai kas pakomentuos biggrin.gif Nes rašiau "kad veiktų". Bet kadangi nedaug kodo, gavos visai pakenčiamai. Originale nebuvo viskas sukišta į sfs-code.php, bet tokiai mažai sistemai kažkaip negražu atrodė daug failų laugh.gif

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 mėnesių...

Šioks toks atnaujinimas. Pridėtas "vienišas" (single) rodymas ir vardan paprastumo panaudota mode_rewrite. Dabar konkretų failą su jo aprašymu galima pasiekti domenas.lt/failo_id. Mod_rewrite galima išjungti per config. Tada naudojama GET kintamasis - ?single=failo_id. Archyve abi versijas sudėjau, kadangi labai mažai užima rolleyes.gif

simple_file_sharing_1.1.zip

Redagavo dayer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šioks toks atnaujinimas. Pridėtas "vienišas" (single) rodymas ir vardan paprastumo panaudota mode_rewrite. Dabar konkretų failą su jo aprašymu galima pasiekti domenas.lt/failo_id. Mod_rewrite galima išjungti per config. Tada naudojama GET kintamasis - ?single=failo_id. Archyve abi versijas sudėjau, kadangi labai mažai užima rolleyes.gif

Tik įmesk gal visgi mysql'inį real_escape - per tą laiką išsiaiškinau, kad addslashes() neveiksmingas, kai, pvz., užklausoje nėra apostrofų (o tokią užklausą padaryti pilnai įmanoma :)).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tik įmesk gal visgi mysql'inį real_escape - per tą laiką išsiaiškinau, kad addslashes() neveiksmingas, kai, pvz., užklausoje nėra apostrofų (o tokią užklausą padaryti pilnai įmanoma :)).

 

Niekaip nesuprantu, kas negerai tai funkcijai. Perkėliau escape'inimą, kad būtų po prisijungimo prie duombazės jau. Vis tiek funkcija neranda jau esančio prisijungimo ir bando jungtis pati. Aišku, nesėkmingai. Access denied for user... db klasėje sukūriau $connection atributą, į jį įdėjau mysql_connect rezultatą. Pačioj klasėj var_dump sako, kad resource tipo, o kai išorėje pabandau $db->connection, jau NULL. Kol kas įdėjau mysql_escape_string(). Taigi, laukiu pagalbos rolleyes.gif

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Niekaip nesuprantu, kas negerai tai funkcijai. Perkėliau escape'inimą, kad būtų po prisijungimo prie duombazės jau. Vis tiek funkcija neranda jau esančio prisijungimo ir bando jungtis pati. Aišku, nesėkmingai. Access denied for user... db klasėje sukūriau $connection atributą, į jį įdėjau mysql_connect rezultatą. Pačioj klasėj var_dump sako, kad resource tipo, o kai išorėje pabandau $db->connection, jau NULL. Kol kas įdėjau mysql_escape_string(). Taigi, laukiu pagalbos rolleyes.gif

Ne visai supratau iš tavo pranešimo, ar bandei paduoti į mysql_real_escape_string() antru argumentu tą prisijungimą? :)

 

http://php.net/manual/en/function.mysql-real-escape-string.php

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ne visai supratau iš tavo pranešimo, ar bandei paduoti į mysql_real_escape_string() antru argumentu tą prisijungimą? :)

 

http://php.net/manua...cape-string.php

 

Bandžiau. sfs-code.php yra klasė db. jos connect() metode yra eilutė

$this->connection = mysql_connect($this->host, $this->user, $this->password);

bet kai bandau mysql_real_escape funkcijai paduoti $db->connection, meta klaidą, nes tas kintamasis kažkodėl būna null. O klasės viduje var_dump($this->connection) kaip ir turi būti, sako kad čia resource tipo kintamasis. Objekto sukūrimą perkėliau prieš escape'inimą ir prie mysql sėkmingai prisijungia. Bėda tame, kad iš klasės mysql prisijungimą kažkaip reikia perduoti į išorę.

 

EDIT: atsiprašau, suklaidinau, prisegtame faile nėra tos eilutės, naudojamas vietinis kintamasis $connection. Pas save esančioje versijoje pasikeičiau. var $connection neužmiršau.

 

EDIT2: džyzus... Na ir neapdairumas. $db->connect() nėra naudojamas iš karto su __construct(), o aš tai užmiršau, nes kažkur buvau padaręs kartu. Dabar viskas gerai. Prisegu pataisytą versiją.

simple_file_sharing_1.1.1.zip

Redagavo dayer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bandžiau. sfs-code.php yra klasė db. jos connect() metode yra eilutė

$this->connection = mysql_connect($this->host, $this->user, $this->password);

bet kai bandau mysql_real_escape funkcijai paduoti $db->connection, meta klaidą, nes tas kintamasis kažkodėl būna null. O klasės viduje var_dump($this->connection) kaip ir turi būti, sako kad čia resource tipo kintamasis. Objekto sukūrimą perkėliau prieš escape'inimą ir prie mysql sėkmingai prisijungia. Bėda tame, kad iš klasės mysql prisijungimą kažkaip reikia perduoti į išorę.

O kartais tas $this->connection nebus padarytas private? Jei taip, keisk į public :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu su struktura tai biski betvarke ypac sfs-load.php faile, sesija, require, funkcijos viskas sumesta bilenkaip.

 

Beto koks tolkas ant visu POST,GET requestu det tuos addslashes, beto tas foeach bus vykdomas betkokiu atveju bus tie POST, GET requestai ar nebus.

 

foreach ($_GET as $key => $value)
$_GET[$key] = addslashes($value);

foreach ($_POST as $key => $value)
$_POST[$key] = addslashes($value);

 

Jei noretum ateity plest scripta tektu viska perasyt.

Redagavo ecash
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jau gerai viskas, prisegiau praeitame pranešime (kol redagavau, tu atrašei) pataisytą versiją :)

Bet kad ir toj pataisytoj 1.1.1 nėra $this->connection... Viskas, kuo skiriasi abiejų sfs-code - truputis CSS :lol:

diff sfs_1.1/sfs-code.php  sfs_1.1.1/sfs-code.php 
364a365,372
> 		.file h3.title a {
> 			color: inherit;
> 			text-decoration: none;
> 		}
> 		.file h3.title a:hover {
> 			text-decoration: underline;
> 		}
> 

Beje, nenaudok kartu addslashes ir real_escape - gausis dvigubas escape'inimas. Užtenka tik real_escape :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ech, susimaišiau visai :D Kadangi connect() perkėliau į tinkąmą vietą, o tai ir buvo visa bėda, nereikia antro argumento. Tai ctrl+z bemaigydamas ir užmiršau apie tą $this->connection... Kur buvo su $_COOKIE addslashes pakeičiau jau į mysql_real_escape. Padariau savo klasėje naudojamoj versijoj dar funkcionalumą vieną, kad įdėjus naują failą praneštų konkrečiu el. pašto adresu apie tai. Tam labai tinka facebook grupės adresas, į vieną nusiunti, visiem nueina. Prisegu vėl, lyg ir jau gerai viskas.

simple_file_sharing_1.1.1.zip

Redagavo dayer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Beto koks tolkas ant visu POST,GET requestu det tuos addslashes, beto tas foeach bus vykdomas betkokiu atveju bus tie POST, GET requestai ar nebus.

 

foreach ($_GET as $key => $value)
$_GET[$key] = addslashes($value);

foreach ($_POST as $key => $value)
$_POST[$key] = addslashes($value);

 

Jei noretum ateity plest scripta tektu viska perasyt.

Gerai jis viską sugalvojo, kam jam po šimtą kartų escapinti tuos POST ir GET, kai gali įkišti kur nors tą kodą ir jam tai padarys visada automatiškai. Gal ir galėtų patikrinti, ar yra koks nors POST ar GET ir tik tada leisti tą foreach, bet šiaip gera idėja, tikrai geriau, nei šimtą kartų escapinti skirtinguose failuose.

Redagavo Tom
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gerai jis viską sugalvojo, kam jam po šimtą kartų escapinti tuos POST ir GET, kai gali įkišti kur nors tą kodą ir jam tai padarys visada automatiškai. Gal ir galėtų patikrinti, ar yra koks nors POST ar GET ir tik tada leisti tą foreach, bet šiaip gera idėja, tikrai geriau, nei šimtą kartų escapinti skirtinguose failuose.

Joa joa poto hebra nesupranta kodel puslapi krauna puse val :D

 

Beto vietoj tu dvieju foreach galima viska sukist i :

 

foreach ($_REQUEST as $key => $value)
       $_REQUEST[$key] = addslashes($value);

 

Nesigilinau perdaug kokiu tikslu cia tas addslashes naudojamas, bet man rods, kad jis cia isvis net nereikalingas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Joa joa poto hebra nesupranta kodel puslapi krauna puse val :D

 

Beto vietoj tu dvieju foreach galima viska sukist i :

 

foreach ($_REQUEST as $key => $value)
       $_REQUEST[$key] = addslashes($value);

 

Nesigilinau perdaug kokiu tikslu cia tas addslashes naudojamas, bet man rods, kad jis cia isvis net nereikalingas.

Bet gi turbūt $_REQUEST/$_POST/$_GET visai atskiri dalykai, ir jei jis pakeis $_REQUEST, tai kituose nepasikeis? O $_REQUEST viskam naudoti - kvaila idėja.

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Na, aš savęs dar nevadinu profesionalu, bet man nepatinka tas $_REQUEST. Yra post, get ir cookie, o sumalimas visko į vieną man neaiškus. Gal ir neteisingai šneku, nežinau unsure.gif O dėl to foreach. Naudojamas $_POST masyvas ir veiksmas atliekamas kiekvienam jo nariui. Tai jei jis tuščias, nebus atliktas nė vienas veiksmas, ar ne taip? Jei tikrint su empty(), tai nemanau, kad ką nors laimėčiau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip matau esi dar tikrai jaunas, tai va turiu tau tokią pastabėlę funkcijoje:

 

<?php
function make_slug($string) {
$lit = array(
	'ą' => 'a',
	'č' => 'c',
	'ę' => 'e',
	'ė' => 'e',
	'į' => 'i',
	'š' => 's',
	'ų' => 'u',
	'ū' => 'u',
	'ž' => 'z'
);
$string = strtolower($string);
foreach ($lit as $lt => $latin) {
	$string = str_replace($lt, $latin, $string);
}
$string = preg_replace('#[\._ ]#si', '-', $string);
$string = preg_replace('#[-]+#si', '-', $string);
$string = preg_replace('#[^a-z0-9\-]#si', '', $string);
$string = preg_replace('#^[-]+#si', '', $string);
$string = preg_replace('#[-]+$#si', '', $string);
$string = preg_replace('#[-]+([a-z0-9]+)$#si', '.$1', $string);

return $string;
}

 

Taip niekas nedaro... siūlau pasiskaitinėti tau apie funkciją iconv - http://php.net/manual/en/book.iconv.php

 

Na ir pasidalinsiu funkcija iš savo tvs:

 

       /**
        * From string makes seo friendly url
        * @param type $string
        * @return type $string
        */
public function make_link($string)
{
	$string = preg_replace('~[^\\pL0-9_]+~u', '-', $string);
	$string = trim($string, "-");
	$string = iconv("utf-8", "us-ascii//TRANSLIT//IGNORE", $string); 

	return strtolower(preg_replace('~[^-a-z0-9_]+~i', '', $string)); 
}

 

Tikiuosi pagelbėjo!

 

Tiesa, kartą teko man užtaikyti ant tokios serverio konfigūracijos, kuriame nebuvo iconv funkcijos. Bet visuose normaliuose serveriuose ji yra. ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...