ugrás a tartalomhoz

Fájl feltöltés ellenőrzése, és feltöltött fájl nevének megváltoztatása.

GreenEar · 2013. Ápr. 28. (V), 15.21
Sziasztok

Van egy fájlfeltöltő formom, feltöltéskor ellenőrzi hogy nem üresek-e a mezők, és ellenőrzi a feltöltött fájl tulajdonságait (méret, formátum). A problémám az hogy úgy szeretném megoldani hogy ne legyen kötelező fájlt feltölteni, de ha mégis tölt fel akkor legyen leellenőrizve a feltöltött fájl. Ha nem tölt fel, tehát a fájlfeltöltő mező üresen marad akkor hagyja figyelmen kívűl.

A másik problémám hogy szeretném megváltoztatni a feltöltött fájl nevét, így szeretném elkerülni hogy ha 2 felhasználó ugyanazzal a névvel tölt fel képet, akkor a lekérésnél ne legyen kavarás. Ezt előszőr úgy próbáltam hogy az aktuális időpontot ($time()) hozzáadtam a feltöltésnél, sikerült is megváltoztatni a fájl nevét, viszont a mysql-be az eredeti nevet írta be, így nem tudta megjeleníteni a képet. Nem egyezett a két név, összegezve nem tudtam megoldani hogy a mysql-be ugyanaz a név kerüljön mint ami a neve a mappában.

Ha nem nagy kérés akkor a segítség mellé egy kis magyarázatot is adjatok, mert érteni szeretném nem kimásolni.

Előre is köszi segítséget / kritikát

A kód:


  require_once('adatok.php');
  require_once('kapcsadatok.php');

  $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

  $name = mysqli_real_escape_string($dbc, trim($_POST['name']));
  $username = mysqli_real_escape_string($dbc, trim($_POST['username']));
  $screenshot1 = mysqli_real_escape_string($dbc, trim($_FILES['screenshot1']['name']));
  $screenshot1_type = $_FILES['screenshot1']['type'];
  $screenshot1_size = $_FILES['screenshot1']['size']; 
  $screenshot2 = mysqli_real_escape_string($dbc, trim($_FILES['screenshot2']['name']));
  $screenshot2_type = $_FILES['screenshot2']['type'];
  $screenshot2_size = $_FILES['screenshot2']['size']; 



  if (!empty($name) && !empty($username) && (!empty($screenshot1))&& (!empty($screenshot2))) 
		
    {



   if ((($screenshot1_type == 'image/jpeg') || ($screenshot1_type == 'image/pjpeg'))
         && ($screenshot1_size > 0) && ($screenshot1_size <= TT_MAXFILESIZE)) {
    if ($_FILES['screenshot1']['error'] == 0) {
          
          $target = TT_UPLOADPATH . $screenshot1;
    if (move_uploaded_file($_FILES['screenshot1']['tmp_name'], $target))
		{
    if ((($screenshot2_type == 'image/jpeg') || ($screenshot2_type == 'image/pjpeg'))
         && ($screenshot2_size > 0) && ($screenshot2_size <= TT_MAXFILESIZE)) {
    if ($_FILES['screenshot2']['error'] == 0) {
          
          $target = TT_UPLOADPATH . $screenshot2;
    if (move_uploaded_file($_FILES['screenshot2']['tmp_name'], $target))	 


  $query = "INSERT INTO users (name, username, screenshot1, screenshot2) VALUES ('$name', '$username', '$time()$screenshot1', '$screenshot2')";
            mysqli_query($dbc, $query);


echo '<p>Az általad feltöltött adatok:</p>';

echo '<p>'. $name .'</p>';

echo '<p>'. $username .'</p>';

echo '<img src="' . TT_UPLOADPATH . $screenshot1 . '"/>';

echo '<img src="' . TT_UPLOADPATH . $screenshot2 . '"/>';


            $name = "";
			$username = "";
			$screenshot1 = "";
            $screenshot2 = "";

			mysqli_close($dbc);

	}
	}
	}
	}
	}
	}
	


<form method="post" enctype="multipart/form-data" value="<?php echo $_SERVER['PHP_SELF']; ?>"/>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo TT_MAXFILESIZE; ?>" />

<label for="name">Név:</label>
<input type="text" id="name" name="name" value="<?php if (!empty($name)) echo $name; ?>"/>

<label for="username">Felhasználónév:</label>
<input type="text" id="username" name="username" value="<?php if (!empty($username)) echo $username; ?>"/>


<label for="screenshot1">1. Kép</label>
<input type="file" id="screenshot1" name="screenshot1">

<label for="screenshot2">2. Kép</label>
<input type="file" id="screenshot2" name="screenshot2">




<input type="submit" name="submit" value="submit">

</form>

 
1

A form kiamardt

GreenEar · 2013. Ápr. 28. (V), 15.22
-----
3

Kódszínezés és szerkesztés

inf · 2013. Ápr. 29. (H), 12.41
Kódszínezés és szerkesztés szerinted minek van?
5

Lassan a testtel

Hidvégi Gábor · 2013. Ápr. 29. (H), 13.39
Ha gyakorlatilag egy kezdő weblaboros fórumozó sem használja, nem lehet akkor, hogy nem az ő hibájuk?
6

Ki lehetne emelni jobban a

inf · 2013. Ápr. 29. (H), 13.43
Ki lehetne emelni jobban a téma beküldés űrlapon, hogy mik a lehetőségek, esetleg kitenni egy FAQ-t, első beküldésnél, hogy mik az irányelvek. A mostani leírás is megfelelő szerintem, csak senki sem olvassa el, pedig vastag betűvel van...
7

Esetleg automatikusan

MadBence · 2013. Ápr. 29. (H), 16.05
Esetleg automatikusan parszolni a hozzászólásokat, és ha kódnak kinéző dolgot talál, akkor figyelmeztet.
8

Hát ha írsz egy regex-et, ami

inf · 2013. Ápr. 29. (H), 16.19
Hát ha írsz egy regex-et, ami megmondja, hogy mi számít kódnak kinéző dolognak... Azért sok nyelv létezik...
9

Nyilván nincs tökéletes

MadBence · 2013. Ápr. 29. (H), 16.41
Nyilván nincs tökéletes megoldás (hiszen reguláris kifejezés elméletben sem írható fel a legtöbb programnyelv értelmezésére), de mondjuk egy olyan sor, amire illeszkedik pl az if.?\(.*?\), az pl jó eséllyel valamilyen kód... Nyilván lehetnek fals pozitív visszajelzések, ahogy a Gmail is mindig szól, ha a levelemben leírom a "csatolmány" szót, és nem csatolok semmit a levélhez.
2

$_FILES tömb

pkadam · 2013. Ápr. 29. (H), 01.46
Ha a $_FILES tömb üres, akkor tudhatod, hogy nem töltött fel fájlt, így e szerint járhatsz el.

A move_uploaded_file() függvénynek a cél paraméterében adhatod meg az új fájlnevet, így az adatbázisba való feltöltés során is ezt kell használnod. Célszerű véletlenül generálni fájlnevet (pl. egy 10 karakteres számsor). Így elkerülhető, hogy a fájlnévben esetlegesen szereplő különleges (nem ASCII) karakterek zavart okozzanak a fájl elérésében, és egyébként is hasznos, ha a felhasználó saját fájlnevét nem használja az oldal.

A legenerálás után az is_file() függvénnyel megnézed, hogy létezik-e fájl a célmappában azzal a névvel (10 karakteres számnál ez elég ritkán fordul elő, de ha kihagyod, sok fájl esetén egyezőségnél kérdés nélkül felülírná az eredetit), és ha létezik, új nevet generálsz, amíg nem találsz olyat, amilyen nevű fájl még nem létezik.

Erre hasznos a viszonylag ritkán használt do-while ciklus, pszeudo-kóddal:
do {
	// Fájlnév generálása.
}
while (/* A generált fájlnév létezik. */)
Természetesen a kiterjesztést is ki kell nyerned, illetve a megfelelő helyeken a generált fájlnévhez illesztened. Amennyiben csak JPEG fájlt engedélyezel, maradhatsz a .jpg kiterjesztésnél, a feltöltött fájl kiterjesztése úgyis csak egy (néha veszélyes) támpont.

U.i.: A későbbiekben, kérlek, használd a kódszínezőt - jelen esetben nem égető probléma, mert a válaszhoz nem volt szükséges az idézett kód, de a következőkben hasznos, amennyiben érdemi válaszokat szeretnél kapni kevésbé általános kérdésekre.
4

Ha jól emlékszem sima

inf · 2013. Ápr. 29. (H), 12.47
Ha jól emlékszem sima rename-el is megy a dolog, vagy bármilyen normál fájl művelettel. Ez a move_uploaded_file ha jól emlékszem egy tök értelmetlen dolog a php-ben, talán arra lehet jó, hogyha más fájlok is lennének a mappában, akkor ne akadjanak össze, vagy passz...

A név ütközés úgy is elkerülhető, ha eléfűzöd a timestampet...

szerk:

Közben kiderült, hogy a move_uploaded_files a register globals ellen véd, meg hogyha letiltják a wwwroot-on kívüli fájl műveleteket, akkor is bele tud nyúlni az upload dir-be.
10

Egységes fájlnevek

pkadam · 2013. Ápr. 29. (H), 16.51
Én személy szerint jobban szeretem, ha egységesek a szerveren tárolt fájlnevek, és amennyiben letölthető fájlokról van szó, akkor kiszolgáláskor kapja meg a megfelelő nevet (szabványosan UTF8-asítva), ami pl. CMS-ben módosítható utólag is.

A timestamp pedig "csak" másodperc-pontos, ami nagy forgalom esetén már okozhat problémát, ha mindenki "profil.jpg" néven akarná feltölteni a fényképét.

Közösségi oldalnál így nem lehet benne káromkodás, vállalati oldalnál pedig az "Éves jelentés - hatvanharmadik verzió, módosította Icuka (kenőpénzek nélkül!!!).xls" ellen véd :)
11

Nem úgy értettem, hogy az

inf · 2013. Ápr. 29. (H), 17.20
Nem úgy értettem, hogy az eredeti fájlnévhez csatolni a timestamp-et, hanem a generálthoz... Mondjuk még az is ütközhet, szóval ugyanúgy ellenőrizni kell.
12

fájlok

GreenEar · 2013. Ápr. 30. (K), 19.12
Előszőr is köszi a tippeket, a név problémára szerintem jó megoldás lehet a generált névhez hozzárendelni a másodpercet. Hétvégén nekiállok összerakni a dolgot, remélem sikerül. Melóhelyen nehéz :)

A kód szinezése miatt bocsi mindenkitől, legközelebb ígérem használom.

Ui: amit beírtam formot csak a példa kedvéért raktam össze, az eredeti form fog bekérni olyan adatokat amik egyedik lesznek, szerintem működne ha azt az adatot rendelném hozzá a kép generált nevéhez. Majd kiderül hétvégén :)

Éljen május 1! Jó pihit mindenkinek!
13

A fájlnevekbe sose tegyél

inf · 2013. Ápr. 30. (K), 20.25
A fájlnevekbe sose tegyél felhasználótól jövő információt, különben törhető lesz a rendszered. Egyébként így is az, ha be van kapcsolva a register globals, azért találták ki ezt a move upload fájlos marhaságot...
14

Még egy tipp:

Pepita · 2013. Ápr. 30. (K), 21.34
Nem olvastam most újra az eddigieket, de a felhasználók be vannak jelentkezve a feltöltéskor? Ha igen: nem tudod őket egyszerűen a user_id alapján külön könyvtárakba tenni? Illetve akár az is elég lehet, ha a fájlnév user_id + időbélyeg. Aki 1 mp alatt egy fájl-inputon két fájlt tud feltölteni - na ő a spamrobot, neki nem baj, ha beletöröl / felülír a saját fájljaiban...
15

Nem hülyeség felhasználónként

inf · 2013. Május. 1. (Sze), 07.17
Nem hülyeség felhasználónként külön mappát csinálni. Főleg egy olyan rendszerben, ahol azt akarod elérni, hogy ne láthassák egymás fájljait...
16

Fél megoldás

GreenEar · 2013. Május. 1. (Sze), 19.40
Egyenlőre nincs semmi tervem a form-al csak gyakorlom, nincs bejelentkezett felhasználó stb, csak az érdekel hogy hogyan lehet azt megoldani, hogy egy látogató egy adott weboldalon ír valamit, hozzá csatol egy képet és az megjelenik a weboldalon.

Tehát egy szöveges rész, meg egy fájlfeltöltő mező. Az előző példában a username bekérése csak a példát szolgálta.

A név módosításra sikerült összebarkácsolnom egy megoldást, működik és elég biztosnak tűnik hogy nem lesz 2 ugyanolyan nevü kép. Hozzárendeltem az aktuális időt is, de egy véltelneszerű számsort is.

Íme:
<form method="post" enctype="multipart/form-data" value="<?php echo $_SERVER['PHP_SELF']; ?>"/>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo TT_MAXFILESIZE; ?>" />

<label for="name">Név:</label>
<input type="text" id="name" name="name" value="<?php if (!empty($name)) echo $name; ?>"/>



<label for="kep">1. Kép</label>
<input type="file" id="kep" name="kep">





<input type="submit" name="submit" value="submit">

</form>
<?

  require_once('adatok.php');
  require_once('kapcsadatok.php');

  $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

  $name = mysqli_real_escape_string($dbc, trim($_POST['name']));
  $kep = mysqli_real_escape_string($dbc, trim($_FILES['kep']['name']));
  $kep_type = $_FILES['kep']['type'];
  $kep_size = $_FILES['kep']['size']; 
  $random_digit=rand(0000,9999);
  $new_file_name=$random_digit.time().$kep;

  if (!empty($name) && (!empty($kep)))

{
		
   

   if ((($kep_type == 'image/jpeg') || ($kep_type == 'image/pjpeg'))
         && ($kep_size > 0) && ($kep_size <= TT_MAXFILESIZE)){
    if ($_FILES['kep']['error'] == 0) {
          


          $target = TT_UPLOADPATH . $new_file_name;
    if (move_uploaded_file($_FILES['kep']['tmp_name'], $target))
		

  $query = "INSERT INTO users (name, kep) VALUES ('$name', '$new_file_name')";
            mysqli_query($dbc, $query);


echo '<p>Az általad feltöltött adatok:</p>';

echo '<p>'. $name .'</p>';

echo '<img src="' . TT_UPLOADPATH . $new_file_name . '"/>';


            $name = "";
			$kep = "";

			mysqli_close($dbc);

	}
	}
	}
	
	
	
	

?>
Ui: a másik problémát még nem sikerült megoldanom, hogy ne legyen kötelező feltölteni képet, és ha tölt fel akkor ellenőrizze le a típusát méretét stb., ha nem tölt fel attól még a többi adatot mentse a mysql stb....
Azzal most fogok foglalkozni, a hiba bennem van :) ha a kacsa nem tud úszni nem a víz a hülye :)

Ja, használtam a kódszinezőt:)
17

Ja, használtam a

inf · 2013. Május. 1. (Sze), 20.29
Ja, használtam a kódszinezőt:)


Ja észrevettem, csodálkoztam is, hogy fejlődőképes vagy! :D


Ezt lenne érdemes használnod SQL-es műveletekre.
http://php.net/manual/en/pdo.prepared-statements.php

Mysqli modulban is vannak hasonló statement sablonok.
http://php.net/manual/en/mysqli.prepare.php

Azért érdemes ezeket használni, mert nem kell kiírni, hogy mysqli_real_escape_string(blah) minden egyes változóra, amit escapelni akarsz, és így véletlenül sem felejted el... A mysqli_real_escape_string(blah) ismételgetése kód duplázás, vagy redundanciának is hívják. Azért rossz, mert az ismétlődő kódot könnyű elgépelni, illetve nehéz karbantartani, átnevezni, átírni, hogy másik interface-el működjön. Mondjuk a legtöbb IDE-ben már van refactoring tool ilyesmiknek a segítésére. Gondolom IDE-t még mindig nem használsz, vagy csak nem találtad meg a reformat code parancsot bennük... Sokat javítana a kódod minőségén, ha automatikus lenne a behúzás.
18

Haladás

Pepita · 2013. Május. 1. (Sze), 23.52
egy látogató egy adott weboldalon ír valamit, hozzá csatol egy képet
Ezt úgy is mondhatnánk, hogy amit ír és a kép együttesen egy tartalomtípus. Ha csak egy képet tud mellékelni (vagy korlátozott számút - a formból ez látszik), akkor nagyon egyszerű: a tartalomtípus egy táblában tárolható, az egyik oszlop pl. a kép URL-je lesz. Nem kell semmit varázsolni a fájlnévvel: külön mappa (gyökéren belül, publikus) a tartalomtípus képeinek, ebben a fájlnév egyszerűen a rekord id-je lesz + '.jpg'. És soha nem fogod felülírni. A feltöltött fájlnévvel sem kell így foglalkozni, egyszerűen move_uploaded_file.
ne legyen kötelező feltölteni képet
Először is ellenőrizd a $_FILES tömb meglétét! Ha létezik, akkor volt fájlfeltöltés (kísérlet). Azután a sikeresség:
if ($_FILES['kep']['error'] === UPLOAD_ERR_OK) {
// Nincs hiba, képméretezés, stb.
} else {
// Valami feltöltési hiba volt
}
A két feltételt egymásba célszerű ágyazni és hiba esetén további feltételekkel behatárolni + hibaüzi.

Nézd át a PHP fájlkezelő függvényeit, valamint a képkezelőket is! (Ebben a válaszban egy csomó kulcsszó van.)
Mime típust is célszerű ellenőrizni, ill. ha csak jpeg kép lehet, akkor megfelelő erőforrásba próbáld betölteni, a méretezéshez úgyis kell. Ha nem sikerül betölteni: nem jpeg kép.
19

képellenőrzés

GreenEar · 2013. Május. 2. (Cs), 17.40
Hát a függvényekbe még bele kell ásnom magam, köszönöm az ajánlásokat, sajnos a tudásom még korlátozott ezért okoz fejfájást. A volt oktatóm szerint tegyem kötelezővé a képfeltöltést és kész is a feladat :D Ne menjek bele bővebben.
A hétvégét rászánom hogy a formomat átalakítsam. Ha sikerül bemásolom :)
A kindulási pont ha a feltöltő mező üres akkor ugorja át, ha nem üres akkor ellenőrizze le a típust, méretet stb.
20

Oktató?!

Pepita · 2013. Május. 2. (Cs), 19.04
tegyem kötelezővé a képfeltöltést és kész is a feladat
Ha ilyet mond egy oktató (feltéve, hogy nem pl. autóvezetést oktat), akkor őrá igaz, hogy nem ért hozzá, ezért inkább tanítja. :)

Egy kicsit is igényes megrendelővel ezt nem tudod megetetni és nem is szabad ilyet csinálni.

Ne csak a formot alakítsd át, hanem a feldolgozót is! Nem muszáj egy fájlban sem lennie a kettőnek, de eleinte csinálhatod úgy, ahogy neked könnyebb. Figyelj arra is, hogy ami a Júzertől jön bármilyen adat, azt megfelelően escape-eld, mielőtt adatbázisba mented!

Sikeres hétvégét!
21

Ne ijedj meg a kihívásoktól!

inf · 2013. Május. 2. (Cs), 22.59
Ne ijedj meg a kihívásoktól! Ha valami gond van, vagy valami nem megy, akkor úgyis tudunk segíteni...
22

Siker de messze még a hegycsúcs :)

GreenEar · 2013. Május. 5. (V), 15.31
Újra itt vagyok. Előszőris, amit akartam az sikerült. Feltölti az adatokat, ha van kép kiválasztva akkor azt ellenőrzi, ha nincs akkor figyelmen kívűl hagyja.
Találtam a neten nagyon jó leírásokat függvényekhez, képfeltöltő formokhoz stb, köszönöm a függvény ajánlást pepitának, inf3rno nak a biztonságra vonatkozó dolgokat, + pkedamnak a név változtatásra vonatkozó segítséget. No meg midnenki másnak aki vette a fáradtságot és segített! (nem gondoltatok még felhasználó név változtatására? ?? :D:D csak egy ötlet)

Tudom hogy "csúnya" meg lehetne tömörebb, összevontabb de most gyakorlom aztán igyekszem minél kevesebb sorban megadni a kódokat.
<?
  
 
  require_once('kapcsadatok.php');

  if (isset($_POST["submit"])) {
  
 $name = $_POST["name"];
 $error_data = false;
 $error_kep = false;

 if (!$name) {
 
 echo "<p>Nincs megadva név!</p>";
 $error_data = false;
 }


 if($_FILES["kep"]["name"]!="" && $error_data==false) {


	 	$kep_pathinfo = pathinfo($_FILES["kep"]["name"]);
        $kep_extension = $kep_pathinfo["extension"];
        $kep_filesize = $_FILES["kep"]["size"];
        $kep_tmp_name = $_FILES["kep"]["tmp_name"];
        $kep_dimensions = getimagesize($kep_tmp_name);
        $kep_mime_type = $kep_dimensions["mime"];
        $allowed_extensions = array("image/jpeg" => "jpg", "image/pjpeg" => "jpg");
        $random_digit=rand(0000,9999);
        
	 if(is_uploaded_file($kep_tmp_name)) {
 
         if($kep_filesize>50000) {
                echo "<div class='message error'>A fájlméret nem lehet több, mint 50kbyte.</div>";
                $error_kep = true;
				$error_data = true;

            } elseif(!in_array($kep_extension,$allowed_extensions) || !isset($allowed_extensions[$kep_mime_type])){
                echo "<div class='message error'>Nem engedélyezett formátum.</div>";
               $error_kep = true;
				$error_data = true;
            
            } 
			
			elseif ($kep_filesize==0) {
              
			     echo "<div class='message error'>A kép mérete nem lehet 0kB !</div>";
                $error_kep = true;
				$error_data = true;

			}
			
			
			
			
			else {
		        // kép átnevezése szám + idő + kép típusa
                $kep_local_tmp_name = $random_digit.time().".".$allowed_extensions[$kep_mime_type];


                // ideiglenes mappából átmozgatás a képek mappába
                move_uploaded_file($kep_tmp_name,"images/".$kep_local_tmp_name);

                                         
		 }
		   }
	 
 }
  

        if ($error_data==false && $error_kep==false) {
        
		$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
		$query = "INSERT INTO user (name, kep) VALUES ('$name', '$kep_local_tmp_name')";
            mysqli_query($dbc, $query);

echo '<p>Sikeres adatfeltöltés!</p>';
echo '<p>'. $name .'</p>';
echo '<img src="'. "images/".$kep_local_tmp_name .'">';

			mysqli_close($dbc);
		}

}

?>
 <form enctype="multipart/form-data" method="post">
  
  
  <label for="name">Név:</label>
  <input type="text" name="name" id="name"><br /><br />
  
   <label for="kep">Kép:</label>
   <input type="file" name="kep" id="kep">
  
<input type="submit" name="submit" id="submit" value="submit">

  </form>
UI: megint használtam kódszinezőt, mi ez ha nem fejlődés!!!!!!!!

UI.2: az említett tanárt kérdezték hogy szerinte mi a legjobb védelem egy weboldalnak... azt mondta ha kiírjuk a főoldalra hogy légyszi ne törd fel az oldalt!

Jófej amúgy csak oktatni nem tud :D

De mégegyszer köszi az eddigieket!
23

Na, egész jó!

Pepita · 2013. Május. 6. (H), 22.49
Bocsi, de most nincs elég időm/szemem rendesen átnézni, de határozottan alakul.

Azt kiszúrtam, hogy az elején nem ellenőrzöd (isset) a $_FILES tömb meglétét. Így, ha a Júzer tréfás kedvében kézzel begépeli az URL-t, "szép" dolgok történhetnek. Ha valóban saját magára mutat a form (egy fálj az egész), akkor érkezéskor kéne jönnie hibaüzinek rá, ha nincs kikapcsolva.

Próbáltad minden lehetőséggel? (Pl. a name nincs megadva)
nem gondoltatok még felhasználó név változtatására?
Nem tartom jó ötletnek, ugyanis ha már létrehozott mások által is látható tartalmat, akkor félrevezető a többiek számára. Plusz gyorsabb megjelenítés miatt egyes CMS-ek a tartalmak tábláiba is mentik a felhasználónevet, ilyenkor azokat is végig kellene update-elni. Mindenképp félrevezető és rossz megoldás - szerintem. Akkor regeljen újra, stb.
megint használtam kódszinezőt, mi ez ha nem fejlődés
Nagyon ügyes vagy, és remélem, hogy másban is fejlődtél... :)
ha kiírjuk a főoldalra hogy légyszi ne törd fel az oldalt!
Ez egész megfontolandó megoldás. Bár szerintem jobb, ha minden egyes oldalra kiírjuk, de nagy, piros, villogó betűkkel. (Ehhez persze már profi fejlesztő kell.)

Szerintem neked öröm segíteni :)
24

Legalább egy mysql escape

inf · 2013. Május. 6. (H), 23.51
Legalább egy mysql escape mindenképp ráfér, ha nem fogadtad meg a tanácsot, és nem használsz sql sablonokat. Így 2 perc ellopni a teljes adatbázist jelszavastul, mindenestül... Utána lesz admin joga a hackernek, aztán végigpróbálhatja a felhasználóid jelszavát facebookon, gmail-en, stb... Lesz hozzáférése azokhoz a fiókokhoz is, ha valaki azonos jelszót használ oda is...
25

Észrevételek

GreenEar · 2013. Május. 8. (Sze), 11.20
Azt kiszúrtam, hogy az elején nem ellenőrzöd (isset) a $_FILES tömb meglétét. Így, ha a Júzer tréfás kedvében kézzel begépeli az URL-t, "szép" dolgok történhetnek.


Ezt kifejtenéd légyszi..?

A formot eléggé hiányosan másoltam be, pl hogy a formot csak akkor kell megjelítenie ha még nem nyomták le a submit gombot, vagy ha valamelyik adat hibás
if(!isset($_POST["submit"]) || $error_data || $error_kep ) {

?>
 <form enctype="multipart/form-data" method="post">
  
  
  <label for="name">Név:</label>
  <input type="text" name="name" id="name" value="<?php if (!empty($name)) echo $name; ?>"><br /><br />
  
   <label for="kep">Kép:</label>
   <input type="file" name="kep" id="kep">

   
  
  
<input type="submit" name="submit" id="submit" value="submit">




  </form>
<?php } ?>
Most tökéletesítem, az escape-hez sql sablonokat fogok használni, csak egyenlőre a formnál az volt az első hogy működjön úgy ahogy azt szeretném aztán jöhet a biztonság majd ha profi leszek akkor weblapok + sok millió euro, de addig is még van sok dolgom:D

A felhasználónév változtatást én a weblaboron lévő nicknevekre értettem, kicsit bonyolúltak:D

A biztonságra visszatérve most ismerkedek a regex coach nevü progival, milyen karakter mehet e-mail megadásakor stb.

Bár lehet tényleg keresek egy jó scriptet ami vastag piros betűkkel villogtatja a
kérlek ne törd fel a weboldalt, kell a pénz zsemlére
szöveget.

:)

Off téma, de ti akik gondolom napi 32 órát dolgoztok gépen hogy csináljátok hogy ne menjen szét a hátatok, gerincetek stb?? én pár hónapja vagyok aktív de mindenem fáj az üléstől ......
26

Off téma, de ti akik gondolom

inf · 2013. Május. 8. (Sze), 11.41
Off téma, de ti akik gondolom napi 32 órát dolgoztok gépen hogy csináljátok hogy ne menjen szét a hátatok, gerincetek stb?? én pár hónapja vagyok aktív de mindenem fáj az üléstől ......


Általában azért szokott görnyedni az ember, mert túl alacsonyan van a monitorja... Csinálj egy kezes kitöréseket 5 kilós súlyzóval, attól érezni fogod, ha nem húzod ki magad...

Nem érdemes 24 colnál nagyobb monitort venni, ha közel van, mert szétviszi a szemet. Nekem már késő... :S
27

Kifejtve

Pepita · 2013. Május. 9. (Cs), 20.59
Először if (isset($_FILES)){..., így megtudod, hogy volt-e egyáltalán fájlfeltöltés. (Itt lehet, hogy a tömb mindig létezik, akkor még indexbe be kell tenni a form input nevét!)

Utána a 18-as válaszomban írt hibaellenőrzés. Ezek megengedő ellenőrzések, csak akkor fut a belső kód, ha minden OK. Helyes sorrendben kell ezeket használni. Belülre mehetnek a te mime és többi ellenőrzéseid.

Postnál érdemes az űrlapod összes elemét nézni, és azt is, hogy nincs-e a vártnál több eleme a $_POST tömbnek. Megj., hogy a biztonság az első utána jöhetnek a honlapok, aztán talán a milliók (ez utóbbiakat én még nem találom :().

Javaslom, hogy előbb a szimpla fájlkezeléssel foglalkozz, adatbázis és képkezelés nélkül. Ezt csináld meg biztonságosan (esetleg függvényekkel netán osztállyal), csak utána a képkezelést, végül az adatbázist. Jobb is, ha ezeket mindjárt különválasztod, akkor jobban fogod tudni újrahasznosítani - és ez kell a milliókhoz is.

Off: szeretnék én napi 32 órát dolgozni! Jó szék, jó helyzet és időnként mozgás.
28

köszönöm

GreenEar · 2013. Május. 30. (Cs), 09.26
köszönöm mindenkinek hogy foglalkozott a problémámmal, ismét nagy segítséget kaptam a weblabortól. Köszönöm Pepita a jótanácsot, valóban érdemes lenne átnéznem az alap fájlkezeléseket, és aztán jöhet a kép és adatbázis kezelés. Lehet tényleg az volt eddig a probléma hogy egyben vannak a dolgok és mindent egyszerre akarok megoldani.

Bocsi hogy mostanában nem írtam de sok volt a tanulni való meg a munka, de majd nyáron lesz rá időm és jöhetnek a milliók :)


UI: az isset függvény mibenlétét már értem, a $Files mezőt ellenőrzi, létezik e a feltöltött fájl, ha igen akkor elbohóckodik az ellenőrzésekkel, ha nincs akkor nem fut le az ellenőrzés.

Minden jót nektek! Mégegyszer köszi!


csácsá
29

Email regex validáció

bamegakapa · 2013. Május. 30. (Cs), 13.04
PHP-ban email ellenőrzésnél nem ajánlott regexekkel bohóckodni, könyvet lehetne írni a témáról :). Szerencsére ott van a filter_var() függvény, FILTER_VALIDATE_EMAIL paraméterrel.

Itt írtam is róla: StackOverflow - How to validate an Email in PHP?, ha megy az angol, ha nem, akkor szívesen segítek még.
30

regex

GreenEar · 2013. Jún. 9. (V), 19.14
én regexxel oldottam meg de érdekes lehet amit írtál.
Amennyit kell annyit értek angolúl, de ha valami nem tiszta úgyis zaklatlak majd titeket:)

Köszi az infót bamegakapa :)