dodgy

آپلودر با چند فیلد + ذخیره در دیتابیس

6 پست در این موضوع قرار دارد

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

جستوجوهای زیادی در گوگل و همچنین در همین وب سایت کردم و به نتیجه هایی رسیدم اما کافی نبود و در بعضی موارد گنگ بود و تصمیم گرفتم اینجا مطرح کنم سوالم رو .

من یه فرم دارم که یه تعداد مشخصی آپلودر ( 6 ) عکس داره .

میخوام این آپلودرها چندتا کار انجام بده :

1 - اعتبار سنجی کنه که فایل آپلود شده واقعا عکس هست و حجم عکس کمتر از 3 مگابایت باشه .

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

در صورتی که همه عکسا آپلود نشد ، یه خطا بده و مثلا اگر عکس شماره 3 آپلود نشد و دوتای قبلی آپلود شد ، اون دوتا پاک بشه و درون هاست ذخیره نشه !

کدی که من برای یک عکس نوشتم اینه :


<?php

$uploadpath = '../uploads/';
$max_size = 2000;
$alwidth = 900;
$alheight = 800;
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');

if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) {
$uploadpath = $uploadpath . basename( $_FILES['fileup']['name']);
$sepext = explode('.', strtolower($_FILES['fileup']['name']));
$type = end($sepext);
list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']);
$err = '';

if(!in_array($type, $allowtype)) $err .= 'The file: <b>'. $_FILES['fileup']['name']. '</b> فرمت فایل شما غیر مجاز است . تنها فرمت تصاویر قابل قبول است .';
if($_FILES['fileup']['size'] > $max_size*1000) $err .= 'حجم فایل بیش از حد مجاز است : '. $max_size. ' KB.';
if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight)) $err .= 'ابعاد تصویر بیش از حد مجاز است: '. $alwidth. ' x '. $alheight;


if($err == '') {
if(move_uploaded_file($_FILES['fileup']['tmp_name'], $uploadpath)) {

include_once("../includes/config.php");
$cmelli = $_POST["cmelli"];
$fname = $_POST["fname"];
$lname = $_POST["lname"];
$pname = $_POST["pname"];
$nshenasname = $_POST["nshenasname"];
$bdateroz = $_POST["roz"];
$bdatemah = $_POST["mah"];
$bdatesal = $_POST["sal"];
$bdate = "$bdatesal"."$bdatemah"."$bdateroz";
$taahol = $_POST["taahol"];
$children = $_POST["children"];
$nvazife = $_POST["nvazife"];
$state = $_POST["state"];
$city = $_POST["city"];
$mtahsil = $_POST["mtahsil"];
$address = $_POST["address"];
$postalcode = $_POST["postalcode"];
$tellephone = $_POST["tellphone"];
$mobile = $_POST["mobile"];
$shoghl = $_POST["shoghl"];
$semat = $_POST["semat"];
$tellkar = $_POST["tellkar"];
$addresskar = $_POST["addresskar"];
$pic = $_FILES['fileup']['name'];
$email = $_POST["email"];
$email = $_POST["email"];
$password = MD5($_POST["userPass"]);
$loginip = $_SERVER['REMOTE_ADDR'];
$details = $_POST["details"];


$query ="INSERT INTO tbl_user ( cmelli,fname,lname,pname,nshenasname,bdate,taahol, children,nvazife,state,city,mtahsil,address,postal code,tellphone,mobile,shoghl,semat,tellkar,address kar,pic,email,password,loginip,details )
VALUES ('{$cmelli}','{$fname}','{$lname}' , '{$pname}' ,'{$nshenasname}' ,'{$bdate}' ,'{$taahol}' ,'{$children}' ,'{$nvazife}' ,'{$state}' ,'{$city}' ,'{$mtahsil}' ,'{$address}' ,'{$postalcode}' ,'{$tellephone}' ,'{$mobile}' ,'{$shoghl}' ,'{$semat}' ,'{$tellkar}' ,'{$addresskar}' ,'{$pic}' ,'{$email}' ,'{$password}' ,'{$loginip}' ,'{$details}' )";

if(mysql_query($query))
{
echo '<div class="add-user-ok"><i class="icon-ok-sign"></i> کاربر با موفقیت اضافه شد .</div>';
}
else
{
echo '<div class="add-user-error"><i class="icon-remove-sign"></i> در اضافه کردن کاربر خطایی رخ داده است !</div>';
}

}
else echo '<b>خطا در آپلود تصویر.</b>';
}
else echo $err;
}

?>

در موردی که گفتم از آرایه بعنوان اسم استفاده کردم و آپلود با موفقیت انجام مشد اما تمام شرطها اعمال نمیشد .

دوستان ، لطف میکنید کدم رو تکمیل کنید تا مشکلم رفع بشه؟

متشکرم .

ویرایش شده در توسط dodgy

به اشتراک گذاری این پست


لینک به پست

شما از $_FILES['fileup']['size'] استفاده کردید برای حجم، این درست هست و مشکلی نداره

برای نوع هم بهتره MIMETYPE استفاده کنید

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

بهتره تک تک به دیتابیس بریزید

به اشتراک گذاری این پست


لینک به پست

شما از $_FILES['fileup']['size'] استفاده کردید برای حجم، این درست هست و مشکلی نداره

برای نوع هم بهتره MIMETYPE استفاده کنید

بهتره تک تک به دیتابیس بریزید

نمیشه تک تک اینزرت کرد چون همه ی این اطلاعات و مسیر عکسها درون یک رکورد باید ثبت بشه .

در واقع هر رکورد مربوط به یک کاربر میشه و اطلاعاتی که ازش دریافت میشه !

امکانش هست راهنمایی دقیقتر کنید ؟

به اشتراک گذاری این پست


لینک به پست

1 - اعتبار سنجی کنه که فایل آپلود شده واقعا عکس هست و حجم عکس کمتر از 3 مگابایت باشه .

شما برا ی اینکار میتوانید از همان MIMETYPE که مرتضی گفتند استفاده کنید , اما اصلا بهتون توصیه نمیشه . این روش قابل دور زدن است . سعی کنید عکس آپلود شده را از توابع GD بگزرانید و عکس رو دوباره درست کنید . قطعا اگر محتوای عکس , عکس باشه , همان عکس خروجی داره و اگر چیزی جزء عکس باشه صفحه ی سیاه تولید میشه .نمیدونم منظور بنده رو متوجه شدید یا خیر

آرایه ی

FILES رو بیشتر بررسی کنید


http://php.net/manual/en/reserved.variables.files.php

قطعا بعد از بررسی دست شما بیشتر تو کدهاتون باز میشه

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

مقدار چی تو متغیر ریخته بشه ؟

این کدی که نوشتید برای یک عکس است .

نمیشه تک تک اینزرت کرد چون همه ی این اطلاعات و مسیر عکسها درون یک رکورد باید ثبت بشه .

شما مرحله ی اینسرت اطلاعات و عکس رو از هم جدا کنید , اینجوری بهتر میتوانید هندل کنید . میتوانید ابتدا اطلاعات کاربر را دریافت و در سشن ذخیره کنید و در صفحه ی بعد عکس ها را بگیرید . اگر پروسه ی عکس با مشکل مواجه شد میتوانید سشن را پاک کنید .بعد از آپلود عکس ها آنها را در مکانی از سرور ذخیره میکنید و آدرس آن را در متغیری میریزید . به همین صورت تا آخر . اگر یکی از عکس ها با مشکل اعتباری مواجه شد با آدرس هایی که ذخیره کردید میتوانید کل عکس ها را پاک کنید . یا اینکه میتوانید پیغام دهید شما 5 عکس با موفقیت آپلود کردید و یک عکس دیگر باید آپلود کنید

به اشتراک گذاری این پست


لینک به پست

ممنونم علیرضا جان :)

شما برا ی اینکار میتوانید از همان MIMETYPE که مرتضی گفتند استفاده کنید , اما اصلا بهتون توصیه نمیشه . این روش قابل دور زدن است . سعی کنید عکس آپلود شده را از توابع GD بگزرانید و عکس رو دوباره درست کنید . قطعا اگر محتوای عکس , عکس باشه , همان عکس خروجی داره و اگر چیزی جزء عکس باشه صفحه ی سیاه تولید میشه .نمیدونم منظور بنده رو متوجه شدید یا خیر

در مورد GD اطلاعات کمی دارم اما در مورد تابع Fildes یه سری چیزا میدونم و میدونم چطور میشه نوع ، پسوند و... رو بدست آورد و درون کدهایی که با آپلودر تکی استفاده کردم ، قرار دادمش :)

شما مرحله ی اینسرت اطلاعات و عکس رو از هم جدا کنید , اینجوری بهتر میتوانید هندل کنید . میتوانید ابتدا اطلاعات کاربر را دریافت و در سشن ذخیره کنید و در صفحه ی بعد عکس ها را بگیرید

منظورتون اینه که یکبار عکس رو بگیرم و اگر تعداد عکسهایی که صحیح آپلود شده ، به تعدادی که تعیین شده بود باشه ، اونوقت در مرحله ی بعد اینسرت کنم ؟

اگر اینطور باشه ، باید اسم عکس هارو درون یه متغییر بریزم که بتونم تو صفحه ی بعد ازش استفاده کنم و این درست در نمیاد !

اگر فرم جدا بشه ، میشه از یه متغییر که در یک صفحه مقدا گرفته ، در صفحه ی دیگه هم استفاده کرد ؟

یه تابع هست به اسم Curl ، به همین کار میاد ؟

یا شایدم پیشنهادتون اینه که درون session ذخیره کنم و بعد در صفحه بعد سشن چک کنم و ... ؟

گیج شدم :D

به اشتراک گذاری این پست


لینک به پست

دوستان ممنونم ، با این روش مشکلم حل شد :


<?php
$uploadpath = '../uploads/';
$max_size = 2000;
$alwidth = 900;
$alheight = 800;
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');
$pic = '';
$flag = true;
for($i=1;$i<=6;$i++)
{
if(!(isset($_FILES['fileup'.$i]) && strlen($_FILES['fileup'.$i]['name'])>0))
{
$flag = false;
break;
}
}
if($flag==true) {

$err = array();

for($i=1;$i<=6;$i++)
{
$sepext = explode('.', strtolower($_FILES['fileup'.$i]['name']));
$type = end($sepext);
if(!in_array($type, $allowtype))
{
$err[] = 'The file: <b>'. $_FILES['fileup'.$i]['name']. '</b> فرمت فایل شما غیر مجاز است . تنها فرمت تصاویر قابل قبول است .';
}
}
for($i=1;$i<=6;$i++)
{
if($_FILES['fileup'.$i]['size'] > $max_size*1000)
{
$err[] = '<br/>حجم فایل بیش از حد مجاز است : '. $max_size. ' KB.';
}
}
for($i=1;$i<=6;$i++)
{
list($width, $height) = getimagesize($_FILES['fileup'.$i]['tmp_name']);
if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight))
{
$err[] = '<br/>ابعاد تصویر بیش از حد مجاز است: '. $alwidth. ' x '. $alheight;
}
}

if(count($err)==0) {

$err = array();
$uploaded = array();
for($i=1;$i<=6;$i++)
{
$uploadpath = $uploadpath . basename( $_FILES['fileup'.$i]['name']);
if(!move_uploaded_file($_FILES['fileup'.$i]['tmp_name'], $uploadpath))
{
$err[] = 'فایل شماره '.$i.' با نام '.$_FILES['fileup'.$i]['name'].' آپلود نشد . .';
break;
}
else
{
$uploaded[] = $_FILES['fileup'.$i]['name'];
$pic .= $_FILES['fileup'.$i]['name'].",";
}
}
if(count($err)==0) {
include_once("../includes/config.php");
$cmelli = $_POST["cmelli"];
$fname = $_POST["fname"];
$lname = $_POST["lname"];
$pname = $_POST["pname"];
$nshenasname = $_POST["nshenasname"];
$bdateroz = $_POST["roz"];
$bdatemah = $_POST["mah"];
$bdatesal = $_POST["sal"];
$bdate = "$bdatesal"."$bdatemah"."$bdateroz";
$taahol = $_POST["taahol"];
$children = $_POST["children"];
$nvazife = $_POST["nvazife"];
$state = $_POST["state"];
$city = $_POST["city"];
$mtahsil = $_POST["mtahsil"];
$address = $_POST["address"];
$postalcode = $_POST["postalcode"];
$tellephone = $_POST["tellphone"];
$mobile = $_POST["mobile"];
$shoghl = $_POST["shoghl"];
$semat = $_POST["semat"];
$tellkar = $_POST["tellkar"];
$addresskar = $_POST["addresskar"];
$email = $_POST["email"];
$email = $_POST["email"];
$password = MD5($_POST["userPass"]);
$loginip = $_SERVER['REMOTE_ADDR'];
$details = $_POST["details"];


$query ="INSERT INTO tbl_user ( cmelli,fname,lname,pname,nshenasname,bdate,taahol,children,nvazife,state,city,mtahsil,address,postalcode,tellphone,mobile,shoghl,semat,tellkar,addresskar,pic,email,password,loginip,details )
VALUES ('{$cmelli}','{$fname}','{$lname}' , '{$pname}' ,'{$nshenasname}' ,'{$bdate}' ,'{$taahol}' ,'{$children}' ,'{$nvazife}' ,'{$state}' ,'{$city}' ,'{$mtahsil}' ,'{$address}' ,'{$postalcode}' ,'{$tellephone}' ,'{$mobile}' ,'{$shoghl}' ,'{$semat}' ,'{$tellkar}' ,'{$addresskar}' ,'{$pic}' ,'{$email}' ,'{$password}' ,'{$loginip}' ,'{$details}' )";

if(mysql_query($query))
{
echo '<div class="add-user-ok"><i class="icon-ok-sign"></i> کاربر با موفقیت اضافه شد .</div>';
}
else
{
echo '<div class="add-user-error"><i class="icon-remove-sign"></i> در اضافه کردن کاربر خطایی رخ داده است !</div>';
}

}
else
{
echo '<b>خطا در آپلود تصویر.</b>';
foreach($uploaded as $del_file)
@unlink($uploadpath.$del_file);
}
}
else
{
print_r($err);
}
}
else
{
echo "انتخاب تمامی فیلدهای اجباری هستند .";
}
?>
<div class="setting-base">
<div class="setting-head"><span>فرم افزودن کاربر :</span></div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<label class="lbl-adduser">تصویر کاربر : </label>
<input type="file" name="fileup1" /><br />
<input type="file" name="fileup2" /><br />
<input type="file" name="fileup3" /><br />
<input type="file" name="fileup4" /><br />
<input type="file" name="fileup5" /><br />
<input type="file" name="fileup6" /><br />


<label class="lbl-adduser">ایمیل کاربر : </label>
<input class="s-input" type="email" name="email" required="required" placeholder="ایمیل :" />

<label class="lbl-adduser">رمز عبور : </label>
<input class="s-input" type="password" name="userPass" required="required" placeholder="رمز عبور :" /><br />

<label class="lbl-adduser">نام : </label>
<input class="s-input" type="text" name="fname" required="required" placeholder="نام :" />

<label class="lbl-adduser">نام خانوادگی : </label>
<input class="s-input" type="text" name="lname" required="required" placeholder="نام خانوادگی :" /><br />

<label class="lbl-adduser">نام پدر : </label>
<input type="text" class="s-input" name="pname" required="required" placeholder="نام پدر :" />

<label class="lbl-adduser">کد ملی : </label>
<input type="text" class="s-input" name="cmelli" required="required" placeholder="کد ملی :" />

<label class="lbl-adduser">شماره شناسنامه : </label>
<input type="text" class="s-input" name="nshenasname" required="required" placeholder="شماره شناسنامه :" />

<label class="lbl-adduser">تاریخ تولد : </label>
<input type="text" class="s-input-day" name="roz" required="required" placeholder="روز :" />
<input type="text" class="s-input-day" name="mah" required="required" placeholder="ماه :" />
<input type="text" class="s-input-day" name="sal" required="required" placeholder="سال :" /><br />

<label class="lbl-adduser">وضعیت تاهل : </label>
مجرد <input type="radio" name="taahol" checked="checked" value="مجرد" />
متاهل <input type="radio" name="taahol" value="متاهل" />

<label style="width:110px;" class="lbl-adduser"></label>
<label class="lbl-adduser">تعداد فرزند : </label>
<input type="text" class="s-input" name="children" placeholder="تعداد فرزند :" /><br />

<label class="lbl-adduser">وضعیت نظام وظیفه : </label>
<select class="s-input" name="nvazife" >
<option value="0">---</option>
<option value="پایان خدمت">پایان خدمت</option>
<option value="معاف">معاف</option>
<option value="نرفتم">نرفتم</option>
</select>      

<label class="lbl-adduser">آخرین مدرک تحصیلی : </label>
<select class="s-input" name="mtahsil" >
<option value="0">---</option>
<option value="سیکل">سیکل</option>
<option value="دیپلم">دیپلم</option>
<option value="فوق دیپلم">فوق دیپلم</option>
<option value="لیسانس">لیسانس</option>
<option value="فوق لیسانس">فوق لیسانس</option>
<option value="دکترا">دکتری</option>
<option value="فوق دکتری">فوق دکتری</option>
</select><br />

<label class="lbl-adduser">استان محل سکونت : </label>
<input type="text" class="s-input" name="state" required="required" placeholder="استان محل سکونت :" />

<label class="lbl-adduser">شهر محل سکونت : </label>
<input class="s-input" name="city" required="required" placeholder="شهر محل سکونت :" /><br />

<label class="lbl-adduser">آدرس محل سکونت : </label>
<input type="text" class="s-input-address" name="address" required="required" placeholder="آدرس محل سکونت :" /><br />

<label class="lbl-adduser">کد پستی : </label>
<input class="s-input" type="text" name="postalcode" required="required" placeholder="کد پستی :" />

<label class="lbl-adduser">تلفن : </label>
<input class="s-input" type="tel" name="tellphone" required="required" placeholder="تلفن ثابت :" /><br />

<label class="lbl-adduser">تلفن همراه : </label>
<input class="s-input" type="tel" name="mobile" required="required" placeholder="تلفن همراه :" />

<label class="lbl-adduser">شغل : </label>
<input class="s-input" type="tel" name="shoghl" required="required" placeholder="شغل :" /><br />

<label class="lbl-adduser">سمت در شغل : </label>
<input class="s-input" type="tel" name="semat" required="required" placeholder="سمت در شغل :" />

<label class="lbl-adduser">تلفن محل کار : </label>
<input class="s-input" type="tel" name="tellkar" required="required" placeholder="تلفن محل کار :" /><br />

<label class="lbl-adduser">آدرس محل کار : </label>
<input class="s-input-address" type="tel" name="addresskar" required="required" placeholder="آدرس محل کار :" /><br />



<label class="lbl-adduser">توضیح در مورد کاربر : </label>
<textarea class="details" name="details" placeholder="توضیح کوتاه :"></textarea><br /><br />


<label class="lbl-adduser"></label><input class="s-submit" type="submit" value="ثبت کاربر" />
<input type="reset" class="s-submit" value="پاک کردن فرم" />
</form>
<div class="clear"></div>
</div>
<?php }else{ ?>
<?php redirect_to("login.php"); ?>
<?php } ?>
<?php include_once("footer.php"); ?>

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط MahTV
      سلام دوستان و اساتید عزیز
      اگه بخوایم به صورت شرطی (کوچک بودن صفحه نمایش ) تو موبایل یک باکس رو (مثل باکس دانلود) به کاربر در حالت چرخش صفحه نشون بدیم 
      و به کاربر بگیم که برا دیدن لینک ها باید گوشی موبایلت رو بچرخونی باید چیکار کنیم ؟
       
      من این کد رو از سایتی برداشتم ولی نمیدونم چطور باید ازش استفاده کنم 
      <div class="alerta"><b class="icon-screen-rotation"></b><p style="text-align: center;"><span style="font-family: tahoma,arial,helvetica,sans-serif;">برای دیدن لینکهای دانلود ، موبایل خود را بچرخانید . دقت کنید گزینه اسکرین روتیشن یا چرخش صفحه در دستگاه شما روشن باشد </span></p></div>  
       
       
       
       
    • توسط amir_hossein
      سلام دوستان من قصد دارم چندتا اسلاید کناره هم به صورت خطی (مثلا 4 تا اسلاید) اواسط صفحه اصلی یا انتهای صفحه قرار بدم.افزونه ای میتونید بهم معرفی کنید برای اینکار؟
    • توسط amir_hossein
      سلام دوستان من قصد دارم چندتا اسلاید کناره هم به صورت خطی (مثلا 4 تا اسلاید) اواسط صفحه اصلی یا انتهای صفحه قرار بدم.افزونه ای میتونید بهم معرفی کنید برای اینکار؟
    • توسط armakcell
      سلام ، بنده یک مشکل خیلی بزرگ دارم اگر به بنده کمک کنید واقعا مدیون شما میشم
      بنده افزونه سئو را در وردپرس نصب کرده ام و اما هویت گوگل وقتی کد را میفرستد و بنده میزنم میگوید نمایه وجود ندارد
      فایلی را آپلود میکنم ببینید متوجه مشکل بنده میشید
    • توسط yasmohamadi
      سلام
      دوستان یه صفحه مستقل می خوام بسازم توی وردپرس که بتونه دسترسی به دیتا بیس رو هم براش فراهم کنم . اما وقتی تمام این موارد رو که توی عکس هست رعایت می کنم قالب رو برام نمی آره که بتونم انتخابش کنم .