PDA

View Full Version : سوال: اعتبارسنجی نوع عکس



ravand
جمعه 21 آبان 1389, 19:46 عصر
سلام
من یه سری کد نوشتم که می خوام برای نوع عکس اعتبارسنجی انجام بده ولی نمی دونم چرا فقط برای اندازه ی عکس اعتبارسنجی می کنه ولی برای نوع عکس اعتبارسنجی نمی کنه با اینکه کدهاش رو گذاشتم ولی کدهاش کار نمی کنه.
ممنون میشم راهنماییم کنید.

if((!$_FILES["file"]["size"] < 1000)
&&(!$_FILES["uploadedfile"]["type"] == "image/gif")
||(!$_FILES["uploadedfile"]["type"] == "image/png")
||(!$_FILES["uploadedfile"]["type"] == "image/jpeg") // "jpeg" for Firefox
||(!$_FILES["uploadedfile"]["type"] == "image/pjpeg")) // "jpeg" for IE
{
echo " حجم عکس زیاد است";

}else{
:متفکر:

funpatogh
جمعه 21 آبان 1389, 21:34 عصر
به این شکل اصلاح کنید


<?php
if($_FILES["file"]["size"] < 1000){
$format=array("image/gif","image/png","image/jpeg","image/pjpeg");
if(in_array($_FILES['file']['type'],$format)){
move_uploaded_file($_FILES['file']['tmp_name'],$_FILES['file']['name']);

}else
echo "نوع عکس مورد قبول نیست";



}else
echo "حجم فایل زیاد است";

?>

hamid_rezas
جمعه 21 آبان 1389, 21:39 عصر
حالا سوای مشکل ات هیچ وقت عکس رو اینطوری اعتبار سنجی نکن. چون من اولین نفری خواهم بود که سایتت را (البته بعنوان هکر کلاه سفید) هک خواهم کرد.
به کمک کتابخانه gd2 عکس را باز کن و از اونجا بررسی کن.

function handleUpload($option, $type = 'image', $fieldName, $uploadPath, $oldfile = '')
{
echo "<pre>" . $option . $type . $fieldName . $uploadPath;
print_r($_FILES);
echo "</pre>";
//any errors the server registered on uploading
$fileError = $_FILES[$fieldName]['error'];
if ($fileError > 0)
{
echo "form error!";
switch ($fileError)
{
case 1:
echo JText::_( 'FILE TO LARGE THAN PHP INI ALLOWS' );
return;

case 2:
echo JText::_( 'FILE TO LARGE THAN HTML FORM ALLOWS' );
return;

case 3:
echo JText::_( 'ERROR PARTIAL UPLOAD' );
return;

case 4:
echo JText::_( 'ERROR NO FILE' );
return;
}
}
//import joomlas filesystem functions, we will do all the filewriting with joomlas functions,
//so if the ftp layer is on, joomla will write with that, not the apache user, which might
//not have the correct permissions
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');

//check the file extension is ok
$fileName = $_FILES[$fieldName]['name'];
$uploadedFileNameParts = explode('.',$fileName);
$uploadedFileExtension = array_pop($uploadedFileNameParts);
if($type == 'image') $ext = 'jpeg,jpg,png,gif';
elseif($type == 'pdf') $ext = 'pdf';
$validFileExts = explode(',', $ext);

//assume the extension is false until we know its ok
$extOk = false;

//go through every ok extension, if the ok extension matches the file extension (case insensitive)
//then the file extension is ok
foreach($validFileExts as $key => $value)
{
if( preg_match("/$value/i", $uploadedFileExtension ) )
{
$extOk = true;
}
}
if ($extOk == false)
{
echo JText::_( 'INVALID EXTENSION' );
return;
}

//the name of the file in PHP's temp directory that we are going to move to our folder
$fileTemp = $_FILES[$fieldName]['tmp_name'];

if($type == 'image'){
//for security purposes, we will also do a getimagesize on the temp file (before we have moved it
//to the folder) to check the MIME type of the file, and whether it has a width and height
$imageinfo = getimagesize($fileTemp);

//we are going to define what file extensions/MIMEs are ok, and only let these ones in (whitelisting), rather than try to scan for bad
//types, where we might miss one (whitelisting is always better than blacklisting)
$okMIMETypes = 'image/jpeg,image/pjpeg,image/png,image/x-png,image/gif';
$validFileTypes = explode(",", $okMIMETypes);

//if the temp file does not have a width or a height, or it has a non ok MIME, return
if( !is_int($imageinfo[0]) || !is_int($imageinfo[1]) || !in_array($imageinfo['mime'], $validFileTypes) )
{
if($imageinfo[0] > 400 || $imageinfo[1] > 400){
echo JText::_( 'INVALID FILETYPE' );
return false;
}
}
}
//lose any special characters in the filename
$fileName = date('Y-z-His') . '-' . ereg_replace("[^A-Za-z0-9.]", "", $fileName);

//always use constants when making file paths, to avoid the possibilty of remote file inclusion
$uploadPath .= $fileName;
if(!JFile::upload($fileTemp, $uploadPath))
{
exit;
echo JText::_( 'ERROR MOVING FILE' );
return false;
}
else
{
// success, exit with code 0 for Mac users, otherwise they receive an IO Error
if($oldfile != '')
{
if($type == 'image' && $oldfile != '')
{
deleteCoverpic($oldfile);
}
else
{
deletePDF($oldfile);
}
}
return $fileName;
}
exit;
}
ببخشید طولانیه. ماله یکی از پروژه های جوملاام هست.

ravand
شنبه 22 آبان 1389, 10:00 صبح
کدی که آقای funpatogh (http://barnamenevis.org/forum/member.php?u=54136) گذاشته همه اش پیام میده که حجم فایل زیاد است حتی اگه حجم فایلم کم باشه و نوع عکس رو که اصلا اعتبارسنجی نمی کنه.
آقای hamid_rezas (http://barnamenevis.org/forum/member.php?u=74520) اگه یه کم در مورد کدی که نوشتید و اینکه چرا کد من هک میشه توضیح می دادید خیلی خوب بود. کدهای شما خیلی طولانی هست به نظرتون نمیشد یه کنم خلاصه تر بشه؟:متفکر:

binyaft
شنبه 22 آبان 1389, 11:48 صبح
برای بدست اورد فرمت فایل ، از کد زیر استفاده کنید


$format=end(explode(".",$_FILES[name]['tmp_name']));

ravand
شنبه 22 آبان 1389, 13:39 عصر
داداش اگه این کدها رو کامل ترش می کردی خیلی خوب بود . مثلا مشخص می کردی که چه فرمت هایی رو اعتبارسنجی کنه. الان من به عنوان یه مبتدی چیزی از اینا که جزئیات رو هم نگفته نمی فهمم.
ممنون میشم کد ها رو کاملترش کنی.

funpatogh
شنبه 22 آبان 1389, 19:50 عصر
دوست عزیز میشه فرم خودتان را هم اینجا بگزارید
چون نه کد بنده مشکل داره نه کد دوست عزیزی که گزاشتن اگر کدم مشکلی داشت که آقای کرامتی مدیر بخش تشکر نمیکردند
کد صفحتون را کامل بگزارید یا شما غلط راهنمایی کردید که چی میخواهید یا چیزی دیگر انتظار دارید که ما نفهمیدیم

ravand
شنبه 22 آبان 1389, 20:44 عصر
حق با شماست داداش
من معذرت می خوام . :قلب:
من باید زودتر کل کدهام رو میذاشتم . کل کدهای من اینه:

<?php
@session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target_path = "";
$dbresult = mysql_query("SELECT * FROM 'uploads'");
$text = $_REQUEST['text'];
if($text=="")
die('نام را وارد نکردید');
if(!empty($_FILES)){
// Add the original filename to our target path.
// Result is "uploads/filename.extension"
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
$hast=true;
while($hast)
{
if(file_exists($uploadedfile))
$uploadedfile="1".$uploadedfile;
else
$hast=false;
}
if((!$_FILES["file"]["size"] < 1000)
&&(!$_FILES["uploadedfile"]["type"] == "image/gif")
||(!$_FILES["uploadedfile"]["type"] == "image/png")
||(!$_FILES["uploadedfile"]["type"] == "image/jpeg") // "jpeg" for Firefox
||(!$_FILES["uploadedfile"]["type"] == "image/pjpeg")) // "jpeg" for IE
{
echo " حجم عکس زیاد است";

}else{
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
mysql_query("INSERT INTO uploads(text,ID, URL) VALUES ('$text' , '$client_ID', '$target_path')");
echo "عکس با موفقت ارسال شد";
} else{
echo "مشکلی در هنگام ثبت نام روی داده است";
}
}
}
?>از اینکه به سوالات من جواب میدید متشکرم انشاالله بتونم جبران کنم. :چشمک:
راستی این کدها مشکل امنیتی هم داره؟

ravand
شنبه 22 آبان 1389, 21:08 عصر
اینم کدهای html که می خواستید.


<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20"><br>
<input type="submit" name="submit" VALUE="SIZE" />
</form>
:لبخند:

funpatogh
شنبه 22 آبان 1389, 21:19 عصر
اینجا رو برای چی نوشتید؟


$dbresult = mysql_query("SELECT * FROM 'uploads'");
ایراد دوم همیشه پست شدن یک دکمه مثل submit رو چک کنید بعد اگر پست شده بود یعنی فرم ارسال شده و بقیه برنامه اجرا شود

ravand
شنبه 22 آبان 1389, 21:46 عصر
این قسمت رو برای انتخاب جدول نوشتم. الان این کد یه عکس و یه متن رو ارسال می کنه . عکس رو برای پوشه ارسال می کنه و یه آدرس ازش می سازه اون آدرس رو میده به جدول و متن رو هم میده به جدول .:لبخند:

funpatogh
شنبه 22 آبان 1389, 22:08 عصر
<?php
@session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
if($_FILES['uploadedfile']['size']>100000){
echo "حجم فایل زیاد است";
} elseif(!in_array($_FILES['uploadedfile']['type'],$format)){
echo "این نوع فایل مورد قبول نیست";
}else{
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];


}
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],"$target/".$_FILES['uploadedfile']['name']))
mysql_query("INSERT INTO uploads VALUES ('".$_POST['text']."' , '$client_ID', '$des')")or die(mysql_error());


}


}else
echo "لطفا یک فایل انتخاب کنید";
}else
echo "لطفا نام را وارد کنید";
}


?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20"><br>
<input type="submit" name="submit" VALUE="send" />
</form>

ravand
یک شنبه 23 آبان 1389, 01:01 صبح
کد رو من امتحان کردم این اخطار رو میده:

Warning: move_uploaded_file(uploads/40.jpg) [function.move-uploaded-file (http://barnamenevis.org/forum/function.move-uploaded-file)]: failed to open stream: No such file or directory in F:\xampp\xampp\htdocs\load\up.php on line 24

Warning: move_uploaded_file() [function.move-uploaded-file (http://barnamenevis.org/forum/function.move-uploaded-file)]: Unable to move 'F:\xampp\xampp\tmp\php5D.tmp' to 'uploads/40.jpg' in F:\xampp\xampp\htdocs\load\up.php on line 24
میشه فیلد هاش رو بگی؟
بهتر بود اون کدهای قبلی رو تغییر ندی و فقط اعتبارسنجیش رو درست کنی .

funpatogh
یک شنبه 23 آبان 1389, 01:57 صبح
من که فیلد های شما رو دست نزدم
وقتی الگوریتم که استفاده میکنید اشتباه است مجبورم که کدتان را تغییر بدهم
خطای شما مربوط به وجود نداشتن دایرکتوری uploads میشود !!!!!!!!!!!

ravand
یک شنبه 23 آبان 1389, 11:44 صبح
نام uploads نام جدول من در بانک اطلاعاتی بود ولی با این حال من یه پوشه توی پوشه ی htdocs لوکال هاستم با عنوان uploads ساختم و همین فایلی هایی که دادید رو توش گذاشتم ولی بازم همین اخطار رو میده :

Warning: move_uploaded_file(uploads/fekr.gif) [function.move-uploaded-file (http://barnamenevis.org/forum/function.move-uploaded-file)]: failed to open stream: No such file or directory in F:\xampp\xampp\htdocs\uploads\up.php on line 24

Warning: move_uploaded_file() [function.move-uploaded-file (http://barnamenevis.org/forum/function.move-uploaded-file)]: Unable to move 'F:\xampp\xampp\tmp\php22.tmp' to 'uploads/fekr.gif' in F:\xampp\xampp\htdocs\uploads\up.php on line 24به خط 24 گیر میده یعنی این خط :

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],"$target/".$_FILES['uploadedfile']['name']))وقتی من در کلمه ی $target/ میام و / رو بر میدارم دیگه هیچ پیام و اخطاری نمیده و در mysql و در فیلد text آدرس فایل یعنی مثلا : uploads/fekr.gif ذخیره میشه و در قسمت فیلد URL هم هیچی ذخیره نمیشه در صورتی که آدرس عکس باید در فیلد URL ذخیره بشه.
در صورتی که / رو برندارم هیچی ذخیره نمیشه.
بازم ممنون.

binyaft
یک شنبه 23 آبان 1389, 12:05 عصر
رفیق از این استفاده کن ، اعتبار سنجی رو انجام میده


<?php
$file_format=end(explode(".",$_FILES[name]['tmp_name']));
$formats=array('gif','png','jpg');
if(in_array($file_format,$formats)){
echo 'Code Baraye Upload!';
}
?>

کد کامل تری هم خواستی بنده در خدمتم

ravand
یک شنبه 23 آبان 1389, 12:39 عصر
اگه میشد کدهای اعتبارسنجی رو کامل ترش می کردی بهتر بود نمی دونم چرا وقتی میذارمشون به نوع عکس دیگه ای غیر از فرمت های انتخاب شده گیر نمیده ، اگه میشد اعتبارسنجی اندازه ی عکس رو هم براش میذاشتی خوب بود. کدهای من در صفحه ی 8 هست می خوام با اونا مطابقت کنه. فکر کنم من کد ها رو صحیح نمیذارم برای همین گفتم با کدهای صفحه ی 8 مطابقت کنه .ممنون.

binyaft
یک شنبه 23 آبان 1389, 17:38 عصر
<?php
@session_start();
$formats=array('jpg','gif','bmp','png');
$file_format=end(explode('.',$_FILES['uploadedfile']['name']));
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target_path = "";
$dbresult = mysql_query("SELECT * FROM 'uploads'");
$text = $_REQUEST['text'];
if($text=="")
die('نام را وارد نکرديد');
if(!empty($_FILES)){
// Add the original filename to our target path.
// Result is "uploads/filename.extension"
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
$hast=true;
while($hast)
{
if(file_exists($uploadedfile))
$uploadedfile="1".$uploadedfile;
else
$hast=false;
}
if(in_array($file_format,$formats)){
if($_FILES["uploadedfile"]["size"]/1000>100) // 100 KB
{
echo 'Image Size IS Large!';

}
else
{
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
mysql_query("INSERT INTO uploads(text,ID, URL) VALUES ('$text' , '$client_ID', '$target_path')");
echo "عکس با موفقت ارسال شد";
} else{
echo "مشکلي در هنگام ثبت نام روي داده است";
}
}
}
else
{
echo $file_format;
echo 'File Format Is Not Gif,Png,Jpg,Bmp !';


}
}
?>

funpatogh
یک شنبه 23 آبان 1389, 20:44 عصر
عزیز این کد رو توی یک فایل ذخیره کن


<?php
@session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
if($_FILES['uploadedfile']['size']>100000){
echo "حجم فایل زیاد است";
} elseif(!in_array($_FILES['uploadedfile']['type'],$format)){
echo "این نوع فایل مورد قبول نیست";
}else{
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];


}
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد";
mysql_query("INSERT INTO uploads VALUES ('".$_POST['text']."' , '$client_ID', '$des')")or die(mysql_error());
}
}


}else
echo "لطفا یک فایل انتخاب کنید";
}else
echo "لطفا نام را وارد کنید";
}



?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20"><br>
<input type="submit" name="submit" VALUE="send" />
</form>

بعد کنار همین فایل یک فولدر به نام uploads بساز و تست کن

ravand
یک شنبه 23 آبان 1389, 21:59 عصر
کدت عالیه ، هم اعتبارسنجی نوع عکس و هم اندازه ی عکس کار می کنه من دو تا متغییر $des و ".$_POST['text']." رو جاشون رو عوض کردم بعد متن در بانک اطلاعاتی ثبت شد ولی آدرس عکس ثبت نشد.
من برای آدرس عکس از $target_path استفاده کرده بودم و شما از $des استفاده کردید . توی جدول mysql هم برای آدرس عکس ، URL وارد کردم.
$target_path رو جایگزین $des کردم ولی کار نکرد.
اینو بگید دیگه کار تموم.
اینم بگم که قبل از اینکه این دو تا متغییر رو جاشون رو با هم عوض کنم . وقتی فایل آپلود می کردم آدرس عکس به جای متن توی فیلد text می رفت و متن هم توی هیچ کدوم از این دو تا فیلد نمیرفت. در صورتی که باید توی فیلد text می رفت.
بازم از لطفتون ممنونم. :تشویق:
راستی این کدی که شما گذاشتید امنیتش خوبه؟ چون بچه ها در مورد کدی قبلی من بهم گفتن امنیت لازم رو نداره.
یک نکته ای که فراموش کردم بگم این بود بعضی وقت ها هم به جای اخطار اندازه ی عکس اخطار echo "لطفا یک فایل انتخاب کنید"; را می دهد.

funpatogh
یک شنبه 23 آبان 1389, 22:59 عصر
من یک سوال واسم پیش امد مگه فیلد text که گزاشتی قرار هست که برای نام عکست انتخاب شود؟

funpatogh
یک شنبه 23 آبان 1389, 23:10 عصر
من دقیق هنوز نفهمیدم که چه طوری میخوای؟:لبخند:


راستی این کدی که شما گذاشتید امنیتش خوبه؟ چون بچه ها در مورد کدی قبلی من بهم گفتن امنیت لازم رو نداره.
یک نکته ای که فراموش کردم بگم این بود بعضی وقت ها هم به جای اخطار اندازه ی عکس اخطار echo "لطفا یک فایل انتخاب کنید"; را می دهد.
امنیتش هم مشکل نداره اگه دیگه میخوای عکس هات اسم های خیلی اتفاقی باشه یک تابع time هم باید توی اسم عکسهات ترکیب کنی
برای اون مشکل بعضی وقت ها هم من اول سایز رو چک میکردم بعد نوع رو اما الان بر عکس کردم که اول نوع فایل رو چک کنه بعد سایز رو
کدت رو بدون ارتباط با دیتابیس اول اجرا کن ببین پیام های که میدهد همش درسته؟
و اسم عکسی که قرار هست اپلود شود درسته یا نه؟


<?php
$target="uploads";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
if(!in_array($_FILES['uploadedfile']['type'],$format)){

echo "این نوع فایل مورد قبول نیست";
}elseif($_FILES['uploadedfile']['size']>100000){
echo "حجم فایل زیاد است";

}else{




$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];


}
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد<br>";
echo $des;

}
}


}else
echo "لطفا یک فایل انتخاب کنید";
}else
echo "لطفا نام را وارد کنید";
}



?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20"><br>
<input type="submit" name="submit" VALUE="send" />
</form>
الان فایل اپلود می شود و یک پیام هم میدهد که با موفقیت کار انجام شده و اسم عکس همرا با مسیر کاملش هم که قرار هست توی دیتابیس بریزد چاپ میشود

ravand
یک شنبه 23 آبان 1389, 23:34 عصر
اینم امتحان کردم . این کد منو کاملا گیج کرده . هر باری یه جوری پیام میده بعضی وقت ها قاطی می کنه و اونطوری که تعریفش کردید کار نمی کنه. اولش امتحانش کردم عکس با سایز بزرگ رو می نوشت که لطفا یه فایل انتخاب کنید بعدا که دوباره امتحان کردم نوشت فایل اپلود شد
uploads/40_1.jpg و این آدرسم کنار پیام موفقیت داد.
هر باری که امتحان می کنی این اتفاقا می افته.:متفکر: اعتبارسنجی برای نوع عکس خوب کار می کنه و مشکلی نداره.

funpatogh
چهارشنبه 26 آبان 1389, 00:29 صبح
عزیز من تمام کد هارو توی لوکال تست میکنم اشکالاتی که میگید برای من نیامد اما خوب تغییرات میدهم تست کنید خبر بدهید



<?php
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
$name=($_POST['text'])?$_POST['text']:"";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد<br>";
echo $des;

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";


}else
echo "لطفا نام را وارد کنید";
}


?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20" value="<?php echo $name;?>"><br>
<input type="submit" name="submit" VALUE="send" />
</form>

نام فایل هاتون نباید فارسی باشه و گرنه ایراد میگیره و همیشه پیغام نوع فایل مورد قبول نیست میدهد

ravand
چهارشنبه 26 آبان 1389, 00:48 صبح
فکر کنم این صدمین باری باشه که این اسکریپت رو امتحان می کنم. بازم این کد ها رو امتحان کردم مثل قبل بود . اگه فایل رو با حجم زیاد آپلود کنم میگه " لطفا فایل خودتان را انتخاب کنید " امروز یه مشکل دیگه هم پیدا کرد اینکه وقتی فایل آپلود میشه در قسمت name می نویسه Array . راستی من هنوز فایلی رو با نام فارسی آپلود نکردم و همه ی این اسکریپت هایی که دادی و من امتحان کردم عکسی با نام فارسی آپلود نکردم و نامشون انگلیسی بود.

funpatogh
چهارشنبه 26 آبان 1389, 23:28 عصر
آقا اینم امتحان کن :لبخند:
فکر کنم فهمیدم مشکلتون چی بود



<?php
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
$text=($_POST['text'])?$_POST['text']:"";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد<br>";
echo $des;

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";


}else
echo "لطفا نام را وارد کنید";
}


?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20" value="<?php echo $text;?>"><br>
<input type="submit" name="submit" VALUE="send" />
</form>

ravand
پنج شنبه 27 آبان 1389, 09:38 صبح
داداش یه دنیا ممنون کدهات کار می کنه . من کدها رو مثل کدهای قبلی کردم و دیتابیس رو هم بهش دادم . کاری کردم که اطلاعات به mysql ارسال بشه الان فقط متن به جدول در mysql ارسال شد و لینک عکس ارسال نشد . شما برای این کدها از لینک زیر استفاده کردی:

mysql_query("INSERT INTO uploads VALUES ('$des' , '$client_ID', '".$_POST['text']."')")or die(mysql_error());
و من در کد خودم از این لینک :

mysql_query("INSERT INTO uploads(text,ID, URL) VALUES ('$text' , '$client_ID', '$target_path')");

یعنی شما از $des برای لینک استفاده کردی و من از $target_path حالا باید یه کاری بکنیم که لینک عکس به جدول در mysql ارسال شود.:تشویق::لبخند:

binyaft
پنج شنبه 27 آبان 1389, 09:55 صبح
<?php
@session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");
$text=($_POST['text'])?$_POST['text']:"";
if(isset($_POST['submit'])){
if(isset($_POST['text']) && strlen(trim($_POST['text']))!=0){
if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد<br>";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";


}else
echo "لطفا نام را وارد کنید";
}


?>

<form id="form1" name="form1" enctype="multipart/form-data" action="" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20" value="<?php echo $text;?>"><br>
<input type="submit" name="submit" VALUE="send" />
</form>
نام فیلد ها رو برای insert ننوشته بودید ( در صورتی میتونید تعیین نکنید که ترتیب فیلد های یک جدول رو بدونید )

ravand
پنج شنبه 27 آبان 1389, 10:06 صبح
الان من یه جدول دارم با نام uploads و دو تا فیلد به نام های text و URL که text برای متن نام هست و URL برای آدرس عکس . حالا من از کدهای زیر برای چاپ کردن متن و آدرس عکس استفاده کردم .

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title></title>
</head>
<body>
<?php
$Host="localhost";
$User = "root";
$Password = "";
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");

$target_path = "";

$dbresult = mysql_query("SELECT * FROM 'uploads'");
$Link= mysql_connect($Host,$User,$Password);
// Displays all current files
$getDocuments = mysql_query("SELECT * FROM uploads");

while($row = mysql_fetch_array($getDocuments,$dbresult))
{
echo ($row["text"]."<br>"."Download: <a href='" . $row['URL'] . "'>" . $row['URL'] . "</a><br><br><br>");
}
?>
</body>
</html>

از داش مهدی (binyaft ) و آقای funpatogh هم ممنون که تا اینجا کمک کردن خدا خیرتون بده :لبخند::قلب:

ravand
پنج شنبه 27 آبان 1389, 15:34 عصر
امدم کد ها رو یه کم تغییرش دادم گفتم اینطوری بهتره کدهای سمت کلاینت رو جدا کردم و در کدهای سمت سرور یعنی کدهای قسمت php کدهای text رو عوض کردم .
دو تا صفحه ساختم یکی کدهای html رو گذاشتم مثلا با نام send.htm و کدهای سمت سرور که php بود رو با نام upload.php . کدهای value="<?php echo $text;?>" که در قسمت کدهای html بود رو حذف کردم.
کدهای قسمت html یعنی send.htm :

<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="POST">

Choose a file to upload: <input name="uploadedfile" type="file" id="uploadedfile" /><br />

name: <input type="text" name="text" id="text" size="20"><br>
<input type="submit" name="submit" VALUE="send" />
</form>و کدهای upload.php :

<?php
session_start();
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("tesavir");
$target="uploads";
$size=100000;
$format=array("image/gif","image/jpeg","image/pjpeg","image/png");

$text = $_REQUEST['text'];
if($text=="")
die('نامتان را وارد نکردید');

if($_FILES['uploadedfile']['error']==0){

if(in_array($_FILES['uploadedfile']['type'],$format)){
if($_FILES['uploadedfile']['size']<=$size){
$des="$target/".$_FILES['uploadedfile']['name'];
if(file_exists($des)){
$i=0;
$name=pathinfo($des);
while(file_exists($des))
$des="$target/".$name['filename']."_".(++$i).".".$name['extension'];
}

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$des)){
echo "فایل اپلود شد<br>";
mysql_query("INSERT INTO uploads (`url`,`text`) VALUES ('$des' ,'".$_POST['text']."')")or die(mysql_error());

}



}else
echo "حجم فایل زیاد است";




}else
echo "نوع فایل مورد قبول نمی باشد";



}else
echo "لطفا فایل خودتان را انتخاب کنید";




?>

گفتم اینطوری باشه بهتره :لبخند:

funpatogh
پنج شنبه 27 آبان 1389, 20:28 عصر
اما ایراد اصلیتون رو نپرسیدید ها:لبخند:
شما توی کدهاتون قسمت html اینو داشتید


<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
این کد شبه دستور upload_max_filesize رو توی تنظیمات php.ini که برابر با 2 Mb هست (حداکثر اندازه مجاز برای آپلود) رو تغییر میدهد و میکند 100 Kb
یعنی دیگه حتی مقدار سایز که توی برنامه تعریف کردی هم بی اثر میشود و نگاه به اون شبه دستور می کنه که اگر بالای 100 کیلو بایت باشه فایلی اپلود نمیشود
و چون توی برنامه خط


if($_FILES['uploadedfile']['error']==0){
گفتیم که اگر فایل با موفقیت آپلود شد و error=0 بود بره مراحل داخل if اما وقتی فایل بالای 100 کیلوبایت باشه این شرط داخل if بر قرار نمیشه و پیغام میدهد که


echo "لطفا فایل خودتان را انتخاب کنید";