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

امروز آموزش ساخت فرم ارسال اطلاعاتی چون متن و عکس را در اینجا قرار دادم . ارسال عکس به دیتابیس یا همان بانک اطلاعاتی ، از لحاظ امنیتی کار درستی است ولی این کار باعث می شود که حجم زیادی اشغال شود و سرعت را پایین آورد. شما می توانید متن رو به دیتابیس ارسال کنید و عکس را هم به پوشه و آدرس عکس را به دیتابیس بفرستید که انشاالله این موضوع را من در پست های بعدی قرار خواهم داد. این فرم یه فرم ساده است که میشد قسمت رادیو و چکمارک و قسمت توضیحات و قسمت ویرایش و پاک کردن را هم به آن اضافه کرد ولی من خواستم یه فرم ساده ای باشه تا بهتر یاد بگیرید. قبل از هر چیزی می خوام از آقای  سید علی ساعدی به دلیل راهنمایی ایشان در ساخت قسمت خواندن اطلاعاتی چون متن و عکس این فرم از ایشان تشکر نماییم. کمتر کسی پیدا میشه که به این خوبی بیاد و این مطالب رو به آدم آموزش بده . البته من قصدم یادگیری این مطلب و گذاشتن در وبلاگ برای یادگیری عموم بود. هر کسی خواست این مطلب رو در سایتش بذاره نام آقای سید علی ساعدی را هم قید بفرماید. و همچین آدرس انجمن php به آدرس :‌ www.phpgroup.ir  

اول باید اگه این کار ها را در لوکال هاست انجام میدید با استفاده از برنامه ی XAMPP  به آدرس http://localhost/phpmyadmin/ بروید و و نام دیتابیس را upload بگذارید و utf8_persian_ci را هم انتخاب نمایید و پس از انتخاب دیتابیس بر روی گزینه ی SQl در بالا کلیک کنید و کدهای جدول را در آن وارد کنید و دکمه ی تایید را کلیک کنید: 

CREATE TABLE `upload`.`images` (
`imageID` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`imageData` LONGBLOB NOT NULL ,
`text` text not null,
PRIMARY KEY ( `imageID` )

 

توضیحات : در خط اول ما یک جدول با نام  images ایجاد کردیم در خط دوم ما imageID را برای شماره ی عکس که بعدا ID نام می گیرد ایجاد کردیم . در خط سوم imageData برای ثبت و آپلود عکس ایجاد کردیم  که باید مقدار LONGBLOB  هم داشته باشد. خط چهارم هم مقدار text برای متن را ایجاد کردیم  و imageID هم قسمت اصلی جدول. 

 

 حالا می رسیم به قسمت ارسال متن و عکس  

کدهای زیر را با نام upload.php در پوشه ی  htdocs یا ریشه ی سرور وبتان ذخیره کنید: 

 

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>آپلود عکس به دیتابیس</title>

<body>

 <?php

 if(isset($_POST['text'])){

  $text = $_POST['text'];

 }

 // اگر دکمه ی ارسال کلیک شود

if(isset($_POST['Submit']))

{

// اتصال به مای اس کیو ال سرور

$link = mysql_connect('localhost', 'root', ''); 

if (!$link) {

    die('Not connected : ' . mysql_error());

}

// اتصال به دیتابیس

$db_selected = mysql_select_db('upload', $link);

if (!$db_selected) {

    die ('Database error : ' . mysql_error());

    // انتخاب دیتابیس

}


  //این کد برای ثبت متن در قسمت تکست است

$maxFileSize = "1000000";

 // اندازه ی فایل یک مگابایت

$image_array  = array("image/jpeg","image/jpg","image/gif","image/bmp","image/pjpeg","image/png");

 //  نوع عکسی که می توانید وارد کنید


$fileType = $_FILES['userfile']['type'];

 

$msg = '';



if (in_array($fileType, $image_array)) 

{

// چک می کند که آیا فایل آپلود شد؟

 if(is_uploaded_file($_FILES['userfile']['tmp_name'])) 

 {

 

 // چک می کند که آیا اندازه ی فایل زیر یک مگا بایت است؟

        if($_FILES['userfile']['size'] < $maxFileSize)

            {

 


                  $imageData =addslashes (file_get_contents($_FILES['userfile']['tmp_name']));

 

 // وارد کردن اطلاعاتی چون متن و تصویر

        $sql = "INSERT INTO images (text,imageData) VALUES ('$text','$imageData')";

 

              

        mysql_query($sql) or die(mysql_error());

                $msg = " Data successfully uploaded";

         }

     else 

         {

     

             $msg = ' Error :  File size exceeds the maximum limit ';

                 

             }

   }

}

else

{

$msg = 'Error: Not a valid image ';

}

 echo "<span style='color:#FF0000'>$msg</span><br />";

}

?>

        <h3>Select File to upload</h3>

 

        <form enctype="multipart/form-data" action="upload.php" method="post">

             <input name="userfile" type="file" /> <br>

             name:  <input type="text" name="text" size="20">

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

        </form>

    </body>

</html>

 

توضیح بخش html : قسمت span که مربوط به پیغام ذخیره شده در متغیر $msg که آپلود شدن تصویر را نشان می دهد. البته من برای ارسال متن پیغامی قرار ندادم شما می تونید قرار بدید.

در بخش form خط اول و دوم مربوط به فایل عکس است .  

name="userfile" این قسمت را هم حتما برای ثبت رکورد باید نامگذاری کنید تا جدول بشناسد. 

خط بعدی هم مربوط به متن است . 

name="text" را هم باید نامگذاری کنید که متن در جدول ثبت شود . اینجا که نامش را text گذاشتید بعد در فایل akhar.php هم نامش را در قسمت $record["text"] را هم text گذاشتیم . قسمت فایل هم به همین صورت . تا بتوانند با هم ارتباط داشته باشند. 

 

حالا نوبت رسید به فایل show.php 

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

 

<?php

if(isset($_GET['id'])){

$id= $_GET['id'];

$servername="localhost";

$dbname="upload";

$user="root";

$pass="";

$dblink=mysql_connect($servername,$user,$pass);

mysql_select_db($dbname,$dblink);

// انتخاب دیتابیس

$dbresult=mysql_query("SELECT * FROM  images where imageID=$id",$dblink);

// انتخاب آی دی یا شماره ی عکس از جدول

mysql_query("SET CHARACTER SET  utf8",$dblink);

// سازگاری با زبان فارسی

while($record=mysql_fetch_assoc($dbresult))

{

print ($record["imageData"]."<hr>");

// چاپ عکس

}

mysql_close($dblink);

}

?> 

 

حالا نوبت به چاپ عکس و متن یا خواندن عکس و متن از دیتابیس یا بانک اطلاعاتی رسید من برای ساخت این قسمت خیلی دردسر کشیدم و یه جورایی کار مشکلی بود . این کد ها را با نام akhar.php را در همان پوشه ی htdocs یا در ریشه ی سرور وبتان ذخیره کنید: 

<?php

$servername="localhost";

$dbname="upload";

$user="root";

$pass="";

$dblink=mysql_connect($servername,$user,$pass);

mysql_select_db($dbname,$dblink);

$dbresult=mysql_query("SELECT * FROM  images",$dblink);

mysql_query("SET CHARACTER SET  utf8",$dblink);

while($record=mysql_fetch_assoc($dbresult))

{

echo ($record["text"]."<br>"."<img width='50' src=show.php?id=".$record['imageID'].">"."<hr>" );

}

mysql_close($dblink);

?> 

 

توضیحات : در قسمت echo ما text یا همان متن را چاپ می کنیم . 

و برای ثبت عکس همین متن باید از <img src=show.php?id=".$record['imageID']."> استفاده کنیم . که در قسمت  id=".$record['imageID']  خود عکس متن مشخص می شود . و اگر نباشد تصاویر تکراری و برای همه ی متن ها یکی خواهد بود. و هر عکسی کنار متن خاص خودش نخواهد بود. 

حالا به آدرس مثلا : http://localhost/akhar/upload.php بروید و متن را نوشته و عکس خود را وارد کنید .  پس از آن به آدرس : http://localhost/akhar/akhar.php بروید و تصاویر را به همراه متن خودشان می بینید.

خواندن عکس و متن از دیتابیس  

شاد و موفق پیروز باشید.

نظرات 14 + ارسال نظر
پویا جمعه 2 مهر‌ماه سال 1389 ساعت 03:47 ب.ظ

سلام آقا چرا آموزش تصویری نمی زارید! من هیچی نفهمیدم خواهش میکنم توضیحات بیشتری بدید من آیا با نرم افزار دیگری نمی شه این کار رو انجام داد

داداش همینم توی هیچ سایتی توضیح نداده بودن که من برات توضیح دادم

محمد جمعه 27 خرداد‌ماه سال 1390 ساعت 02:56 ق.ظ

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

اینم آموزشی که می خواستی
ravand: http://barnamenevis.org/forum/showthread.php?p=1150530#post1150530

[ بدون نام ] دوشنبه 7 شهریور‌ماه سال 1390 ساعت 10:48 ق.ظ

عالی بود

sd سه‌شنبه 17 آبان‌ماه سال 1390 ساعت 01:49 ب.ظ

واقعا دمت گرم.درود به شرفت.میدونی چقدر کمکم کردی پسر؟؟؟از صمیم قلب ممنونم

javad سه‌شنبه 13 دی‌ماه سال 1390 ساعت 01:43 ب.ظ

سلام....دستت درد نکنه استفاده کردم.....

فاطیما دوشنبه 23 مرداد‌ماه سال 1391 ساعت 07:34 ب.ظ

سلام من به صفحه ای که به سایت نرنامه نویس ارجاع دادید رو دیدم و کدها را وارد کردم و خطاهای زیر را داد میشه کمک کنید ؟
خطای 1
Warning: move_uploaded_file(uploads/b12.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in E:\wamp\www\meshkat2\uplaod.php on line 34

خطای 2
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'E:\wamp\tmp\php217.tmp' to 'uploads/b12.jpg' in E:\wamp\www\meshkat2\uplaod.php on line 34

آیا شما پوشه ی uploads رو ساختید؟
اگه این مشکل شما نیست با آی دی من تماس بگیرید و فایل مورد نظرتون رو برام ارسال کنید تا مشکلتون رو بررسی کنم
موفق باشید.

فاطیما سه‌شنبه 24 مرداد‌ماه سال 1391 ساعت 10:26 ب.ظ

سلام
پوشه uploads رو توی دیتا بیس ساختم با فیلد های i d و url و text و 2 تا هم صفحه درست کردم یکی برای فرم و دومی upload.php که action همین صفحه دوم هست نمی دونم چیز دیگری هم هست . البته من mail server ندارم نمی دونم ربطی داره یا نه .
خیلی ممنون میشم کمکم کنید .

ببخشید من اصلا متوجه نشدم شما دارید سوالتون رو در مورد ارسال عکس به دیتابیس می پرسید. و به اشتباه گفتم باید پوشه ی upload بسازید در صورتی که نیاز به این کار نیست.
چون قراره عکس وارد دیتابیس بشه نه پوشه.
درسته نیازی به میل سرور نیست چون قرار نیست ایمیل ارسال کنیم.
شما یا باید برنامه ی wamp داشته باشی یا xampp .
الان شما گفتید "پوشه uploads رو توی دیتا بیس ساختم با فیلد های i d و url و text" آیا این تغییرات رو توی کدها هم اعمال کردید؟
مثلا شما به جای imageID در خط زیر از id استفاده کردید:
`imageID` INT( 10 ) NOT NULL AUTO_INCREMENT ,
تغییر رو در کدهاتون هم اعمال کردید؟

فاطیما چهارشنبه 25 مرداد‌ماه سال 1391 ساعت 12:28 ب.ظ

سلام
نه من می خوام عکس در جایی دیگه باشه و ادرسش در دیتابیس ذخیره بشه که حجم دیتابیس کم باشه ولی نمی دونم عکس دقیقا کجا قرار می گیره و ادرسش چطوری به دیتابیس فرستاده میشه .
در مورد میل سرور هم چون دلشتم صفحه ارتباط با ما را می ساختم برای اولین بار و توش گیر کرده بودم یهو قاطی کردم ببخشید .
من با ومپ کار می کنم . پوشه uplode کجا باید ساخته بشه توی پوشه www ؟ این کدی که شما توی صفحه سوم از اعتبار سنجی عکس توی سایت برنامه نویس زده بودید مگه ذخیره ادرس در دیتابیس نبود ؟
ممنون از اینکه میخونید و پاسخ میدید خدا خیرتون بده .

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

نیمرخ سافت شنبه 14 اردیبهشت‌ماه سال 1392 ساعت 10:43 ق.ظ

احسن برشما هموطن بزرگوار انشاءالله در پناه خدا و زیر سایه اما عصر(عج) موفق و سربلند باشید.
باتشکر از شما
نیمرخ سافت

سمانه ملکی دوشنبه 18 آذر‌ماه سال 1392 ساعت 06:23 ب.ظ http://web4schools.ir

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

مهسا دوشنبه 11 اسفند‌ماه سال 1393 ساعت 11:39 ب.ظ

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

علی چهارشنبه 27 خرداد‌ماه سال 1394 ساعت 01:36 ق.ظ http://helli5students.blog.ir/

سلام
فوقالعاده بود فقط چند تا سوال داشتم...
میشه ای دی تونو بدید؟

این تیکه رو کلا نفهمیدم چی شد؟
<img src=show.php?id=".$record['imageID'].">"

خیلی واضح توضیح دادم چطور متوجه نشدید؟

علی چهارشنبه 27 خرداد‌ماه سال 1394 ساعت 02:02 ب.ظ http://helli5students.blog.ir/

show یه متده درسته؟
کارش چیه؟

این show.php فایل هست که مقداری که داخل $record['imageID'] هست براش ارسال میشه. و توسط id گرفته میشه اونم به روش GET .

ملیحه دوشنبه 22 آذر‌ماه سال 1395 ساعت 11:25 ق.ظ

آقا دستت درد نکنه عالللی
من اصلا کامنت نمیذارم ولی کارمو راه انداختی گفتم حتما تشکر کنم

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد