ugrás a tartalomhoz

jQuery Ajax FormData() feltöltése xhr-rel.

alto1332 · 2013. Feb. 11. (H), 20.06
Feladat: 1 db fájl feltöltése FormData()-ként úgy, hogy közben kijelezze a feltöltés pillanatnyi értékét. MySQL táblában az adatok lementése: a feltöltő neve, a feltöltött *.zip/*.rar fájl tartalma, a fájl neve.

Eddig jutottam: http://users.atw.hu/bujocska/

A javascript részt megtaláljátok a honlapon.

Probléma: amikor én próbálok feltölteni egy fájlt, mindig sikerül, viszont ha más, neki megáll 100%-nál és nem történik semmi: nem rak be új rekordot a táblába, nem tölti fel a fájlt a szerverre. Fogalmam sincs miért van ez, esetleg a fájl neve miatt.

Fájl/mappa szerkezet (design elemeket leszámítva):
- /index.php
- /jsHandler.php
- js/script.js
- js/jquery-ui-1.9.2.custom.min.js
- /uploads (mappa - chmod 777)
- /tmp (az atw.hu miatt kell - chmod 777)

<?php

ob_start();

$mysql["connection"]=mysql_connect("host","felhasználónév","jelszó") or die("Hiba a MySQL szerverhez való kapcsolódás közben. Hibaüzenet: ".mysql_error());
$mysql["selection"]=mysql_select_db("db") or die("Hiba a MySQL adatbázis kiválasztása közben. Hibaüzenet: ".mysql_error());
	
foreach($_POST as $k=>$v)
	$_POST[$k]=mysql_real_escape_string($v);

$_FILES["upload_file"]["name"]=preg_replace("/[^a-zA-Z0-9\.]/","_",mysql_real_escape_string($_FILES["upload_file"]["name"]));

$maxsize=104857600; //100 MB
$minsize=5242880; //5 MB


if($_FILES["upload_file"]["error"]==4){
	if(isset($_GET["nojs"]))header("Location:index.php?result=0"); //hibák szeparálása az index.php-ben, semmi különös. Arra az esetre ha a felhasználó javascript nélkül böngészné az oldalt
}elseif(strlen($_POST["name"])<3){
	if(isset($_GET["nojs"]))header("Location:index.php?result=1");
}elseif(strlen($_POST["name"])>30){
	if(isset($_GET["nojs"]))header("Location:index.php?result=2");
}elseif(strlen($_POST["maps"])<10){
	if(isset($_GET["nojs"]))header("Location:index.php?result=3");
}elseif(strlen($_POST["maps"])>255){
	if(isset($_GET["nojs"]))header("Location:index.php?result=4");
}elseif($_FILES["upload_file"]["size"]>=$maxsize){
	if(isset($_GET["nojs"]))header("Location:index.php?result=5");
}elseif($_FILES["upload_file"]["size"]<=$minsize){
	if(isset($_GET["nojs"]))header("Location:index.php?result=6");
}elseif((strtolower(pathinfo($_FILES["upload_file"]["name"],PATHINFO_EXTENSION))!="zip") && (strtolower(pathinfo($_FILES["upload_file"]["name"],PATHINFO_EXTENSION))!="rar")){
	if(isset($_GET["nojs"]))header("Location:index.php?result=7");
}elseif(move_uploaded_file($_FILES["upload_file"]["tmp_name"],"uploads/".$_FILES["upload_file"]["name"])){
	$dbquery=mysql_query("INSERT INTO uploads (name,maps,fileName,timestamp) VALUES ('$_POST[name]','$_POST[maps]','".$_FILES["upload_file"]["name"]."','".time()."')") or die(mysql_error());
	if(isset($_GET["nojs"]))header("Location:index.php?result=8");
	echo 8; //visszatérési érték a script.js "success:" részéhez
}else{
	if(isset($_GET["nojs"]))header("Location:index.php?result=9");
	echo 9;
}

?>
Előre is köszönöm a segítséget.
 
1

Opera (12.12) alatt nem megy

Hidvégi Gábor · 2013. Feb. 11. (H), 20.22
  • Opera (12.12) alatt nem megy a tallózás, a gombra kattintva nem történik semmi.
  • Firefox 18 alatt nincs hiba a feltöltésnél.
  • Ha hiba történik (mert valaki kisebb, nagyobb fájlt választott), rakhatnál egy linket vissza a feltöltéshez.
  • A teszt idejére csökkenthetnéd a fájlméretet.
  • Ahol nem sikerült, mekkora fájlt próbált feltölteni? Sokat segítene, ha elküldené neked, és te is megnéznéd ugyanazzal, elképzelhető, hogy hibás a zip, és amiatt akad ki a php.
  • Lehet, hogy az ATW nem enged meg egy bizonyosnál nagyobb fájlméretet feltölteni.
  • Ha túl nagy a feltöltött fájl, elfogyhat a PHP számára rendelkezésre álló memória.
2

Köszönöm

alto1332 · 2013. Feb. 13. (Sze), 16.05
Heló, köszönöm a választ és a segítséget. A feltöltés gomb megjavítva, a css-sel volt a gond. Utánanéztem fórumokon és az ATW lekorlátozta a feltöltést 8 MB-ra, szóval most itthoni szerveren futtatom a honlapot déltől éjfélig és minden működik.

http://bujocska.tk