سایت خود را بسازید ، به روش saalek110

saalek110

Well-Known Member
پست ۸۱ :
خوب ما تمریناتی با فرم و جواب فرم کردیم،
ولی جواب فرم فقط چاپ نام و ایمیل بود ،
و هنوز در دیتابیس اطلاعات را ذخیره نکردیم....
 

saalek110

Well-Known Member
خوب ، من یک دیتابیس ساختم و می خوام یک تیبل بسازم...با من همراه شوید...
Screenshot_۲۰۲۴-۰۱-۱۹_۱۰۱۴۱۰.jpg

در شکل بالا می بینید هیچ جدولی نیست ، چون تازه دیتابیس ساختم...
یک اسم دادم به جدول و سه تا ستون می خوام داشته باشه...دکمه Go را می زنم...

بعد زدن Go می رویم صفحه بعدی...۳ سطر برای پر کردن داریم، شکل زیر:

Screenshot_۲۰۲۴-۰۱-۱۹_۱۰۱۷۵۷.jpg
در شکل بالا من ستون اول را عددی گرفتم و دو ستون بعدی را تکست ، برای اسم ۲۰ کاراکتر در نظر گرفتم و برای ایمیل ۴۰ کاراکتر....

این جدول برای تست است و Int کافیه ، می توانید برای سایت خود bigint انتخاب کنید تا خیلی اعداد بزرگ درش جا بشه.
اصلا ستون عدد شاید من نیاز نداشتم ، فقط خواستم ببینید ستون عددی چطور ایجاد میشه ، انواع داده دیگر هم داره.. ولی فعلا همین ها برای ما کافیه. چون نمی خوام شرح فعلا طولانی بشه.

بعد پر کردن جدول فوق دکمه save را بزنید.

مبارک باشه ، اولین جدول دیتابیس را ساختید.
 
آخرین ویرایش:

saalek110

Well-Known Member
بعد ساختن جدول نمای عکس زیر را داریم:
Screenshot_۲۰۲۴-۰۱-۱۹_۱۰۲۵۳۸.jpg
اون بالا ، اسم جدول را نوشته، و کنارش اسم دیتابیس بود...که من سیاه کردم...
یک چیزی داریم به نام colation ... فعلا مهم نیست ، ولی برای فارسی کار کردن احتمالا نیاز به انتخاب نوع خاصی داره ، بعدا بحث می کنیم ، فعلا انگلیسی کار می کنیم.

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

Screenshot_۲۰۲۴-۰۱-۱۹_۱۰۳۲۱۷.jpg

در عکس بالا ، من بعد ستون name انتخاب کردم... البته فعلا نمی خوام ستون اضافه کنم ، خواستم ابزارش را ببینید.

اون بالا که اسم دیتابیس را من سیاه کردم ، در عکس اول این پست ، اگر روی اسم دیتابیس بزنی می روی به لیست جداول .....
 

saalek110

Well-Known Member
عکس زیر لیست جداول است...
پایینش هم باز ابزار ساختن جدول جدید را می بینید.
جلوی هر جدول یک سری دکمه است .
دگمه بروس ، برای دیدن جدول است
دکمه استراکچر برای کار با ساختار جدول است
دکمه اینسرت برای افزودن یک سطر
دکمه های امپتی و دروپ هم برای خالی کردن یا حذف جدول است.


Screenshot_۲۰۲۴-۰۱-۱۹_۱۰۳۵۱۳.jpg
 

saalek110

Well-Known Member
خوب طرز ساختن جدول را دیدید .. و باید جدول بسازید اگر می خواهید کدهای بعدی را تست کنید...

من می خوام کدهای افزودن سطر به جدول را بگم.
 

saalek110

Well-Known Member
در فایل منیجر این هاست اگر بخوای ۲۰ خط درج کنی ، بین خطوط فاصله می افته و باید با زحمت فواصل را پاک کنی...
پس بهتره در یک ادیتور کدها را کار کنید و بعد در فایل منیجر آپلود کنید، من خودم از ادیتور زیر استفاده می کنم:





نرم افزار فوق را من ماهها برای کارهای php در گوشی استفاده کردم .... میشه باهاش تکه ای کد را کپی کرد و کارهای دیگر لازم مثل ذخیره فایل و ... را داره.
 

saalek110

Well-Known Member
result.png

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



PHP:
<html>
<body>

<?php
 if( !isset($_POST['action_2']))
 {
?>
<form id="myform" action="<?php echo $_SERVER["PHP_SELF"]; ?>"  method = "POST">

Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>


 <input type="submit" name='action_2' value="Submit">
</form>
<?php
}



 if(isset($_POST['action_2']))
{
$name=$_POST["name"];
$email=$_POST["email"];

    require "ccoonn.php";

mysqli_set_charset($ccoonn, "utf8");

    $sql = "INSERT INTO `name_email` (`number`,`name`, `email`) VALUES ('2','$name','$email')";
 
     $result = mysqli_query($ccoonn ,$sql);
 
echo"ghesmate sabt dar database";

}

?>

</body>
</html>

کد بالا ، اسم و ایمیل شما را می گیرد و در دیتابیس ثبت می کند.
کد زیر قبل کد insert گذاشته می شود تا اطلاعات در دیتابیس خوانا باشد:وگرنه وقتی بروید داخل دیتابیس شکلهای نامفهوم می بیند به جای حروف فارسی...
PHP:
    mysqli_set_charset($ccoonn, "utf8");

 
آخرین ویرایش:

saalek110

Well-Known Member
به خط زیر از کد پست قبل نگاه کنید:
PHP:
require "ccoonn.php";

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

به خط زیر نگاه کنید:
PHP:
$sql = "INSERT INTO `name_email` (`number`,`name`, `email`) VALUES ('2','$name','$email')";
کارش اینسرت اطلاعات به جدول با نام name_email است که در مستهای قبل با هم ساختیم..
به اون کوتیشن های کج نگاه کنید و بعدش به اون کوتیشن های عمودی... همین جوری باید بنویسید... کوتیشن کج در کیبورد گوشی من ، اول باید بروم به علائم ، بعد بروم به سری دوم علائم ، بعدش زیر عدد ۱ است...

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

Screenshot_۲۰۲۴-۰۱-۱۹_۱۱۲۲۲۱.jpg

و در عکس زیر کوتیشن کج نشان داده شده:

Screenshot_۲۰۲۴-۰۱-۱۹_۱۱۲۴۵۷.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
کد زیر را ببینید:

PHP:
     $result = mysqli_query($ccoonn ,$sql);

می بینید با استفاده از متغیر کانکشن که قبلا با require کردن فایل کانکشن بدست آمده بود داره کوئری insert را برای ما اجرا می کنه. در خط قبلی ما کوئری insert را در متغیر $sql ریختیم.

به خطوط زیر نگاه کنید:
PHP:
$name=$_POST["name"];
$email=$_POST["email"];
دو متغیر تعریف شده و اون اطلاعاتی که از فرم ارسال شده را ریختیم داخل این دو متغیر.

خط زیر:
PHP:
echo"ghesmate sabt dar database";
فقط نشون میده به قسمت جواب به فرم وارد شدیم و چیز دیگه ای را ثابت نمی کند.


و در کدهای بعدی می بینید که محتوای این دو متغیر در کوئری insert داخل دیتابیس ریخته میشه.

Screenshot_۲۰۲۴-۰۱-۱۹_۱۱۳۰۵۷.jpg
در عکس بالا می بینید اسم من و ایمیل من در جدول ثبت شده..
عدد را هم ۲ مر کردم همین جوری .. هر کس اسم و ایمیلش را ثبت کنه در ستون عدد یک ۲ الکی ثبت میشه.

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

 
آخرین ویرایش:

saalek110

Well-Known Member
result.png


حالا یک کمی امنیت اضافه کنیم...

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

پس بهتره یک فیلترهایی اضافه کنیم جلوی ورودی کاربر.
 
آخرین ویرایش:

saalek110

Well-Known Member
حالا شما قادر شدید یک سایتی بسازید که دوستانتان بتوانند روی سایت پیام بزارند.

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

پس شاید قسمت ثبت نام و لوگین لازم باشه ، شاید هم لازم نباشه.
 

saalek110

Well-Known Member
خطاهای رایج:
خطا از فایل کانکشن، میگه connection error
قبلا گفتیم خود فایل کانکشن را با نوشتن آدرسش تست کنید ، اگر قبلا تست کرده باشید این خطا را نمی دهد.

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

می توانید قبل کدهای اینسرت در دیتابیس اون متغیرهای نام و ایمیل را با echo چاپ کنید تا ببینید متغیرها پر هستند یا خیر.در پست بعل کد جدید را همراه چاپ می زارم.
 

saalek110

Well-Known Member
PHP:
<html>
<body>

<?php
 if( !isset($_POST['action_2']))
 {
?>
<form id="myform" action="<?php echo $_SERVER["PHP_SELF"]; ?>"  method = "POST">

Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>


 <input type="submit" name='action_2' value="Submit">
</form>
<?php
}



 if(isset($_POST['action_2']))
{
$name=$_POST["name"];
$email=$_POST["email"];


echo "name= ".$name;
echo"<br>";
echo "email= ".$email;


    require "ccoonn.php";
    $sql = "INSERT INTO `name_email` (`number`,`name`, `email`) VALUES ('2','$name','$email')";
  
     $result = mysqli_query($ccoonn ,$sql);
  
echo"<br><br>ghesmate sabt dar database";

}

?>

</body>
</html>

کد بالا ، همان کد insert در جدول است که چند پست بالاتر گذاشتیم ، ولی قبل اینسرت کردن اطلاعات در جدول ، روی صفحه هم اسم و ایمیل را چاپ می کند.
قبل کوئری insert کد زیر را درج کنید تا حروف فارسی در دیتابیس خوانا باشد:
PHP:
    mysqli_set_charset($ccoonn, "utf8");

 
آخرین ویرایش:

saalek110

Well-Known Member
result.png


در مورد بحث امنیت تابع زیر را ته فایل اضافه می کنیم و ورودی کاربر را از داخلش رد می کنیم.

PHP:
function test_input($data) {
                    $data = trim($data);
 $data = stripslashes($data);
     $data = htmlspecialchars($data);
 return $data;
}
شرح خطوط:
اون تابع trim فواصل خالی قبل و بعد ورودی کاربر را حذف می کند.
اون تابع strisplashes در سایت مانوال php گفته Un-quotes a quoted string گویا کوتیشن ها از خنثی می کند ، نباید وارد دیتابیس بشوند.
تابع htmlspecialchars فکر می کنم کاراکترهای مخصوص html را اجازه نمی دهد اخلال ایجاد کنند.

بعدا که ته فایلمون این تابع test_input را اضافه کردیم ... این طوری ازش استفاده می کنیم:
PHP:
      $name=test_input($_POST["name"]);

یعنی در قسمت جواب به فرم ، دریافتی از فرم را از این صافی رد می کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
کدمان با این اقدام حفاظتی این طوری شد:

PHP:
<html>
<body>

<?php
 if( !isset($_POST['action_2']))
 {
?>
<form id="myform" action="<?php echo $_SERVER["PHP_SELF"]; ?>"  method = "POST">

Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>


 <input type="submit" name='action_2' value="Submit">
</form>
<?php
}



 if(isset($_POST['action_2']))
{
        $name=test_input($_POST["name"]);
        $email=test_input($_POST["email"]);

echo "name= ".$name;
echo"<br>";
echo "email= ".$email;


    require "ccoonn.php";
    mysqli_set_charset($ccoonn, "utf8");
    $sql = "INSERT INTO `name_email` (`number`,`name`, `email`) VALUES ('2','$name','$email')";
  
     $result = mysqli_query($ccoonn ,$sql);
  
echo"<br><br>ghesmate sabt dar database";

}


function test_input($data) {
       $data = trim($data);
       $data = stripslashes($data);
       $data = htmlspecialchars($data);
        return $data;
                           }
?>

</body>
</html>

دقت کنید تابع بیرون قسمت جواب به فرم است ، یعنی بعد کروشه اون و قبل بسته شدن قسمت php

الان شما دو لینک دارید ، فایل insert و فایل insert2
که یکی فقط در دیتابیس ثبت می کنه و دیگری قبل ثبت نام و ایمیل را چاپ هم می کند.


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

saalek110

Well-Known Member
result.png


خواندن یک جدول:
شما در کد بالا ، کوئری insert یعنی افزودن یک سطر به جدول را دیدید.... اگر کوئری خواندن را جایگزین اون خط کنیم ، می تونه جدول های دیتابیس را بخواند.

کوئری:

PHP:
 $sql = "SELECT * FROM name_email";

من فعلا نظرم اینه قبل فرم ، جدول را چاپ کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
<html>
<body>

<?php
    require "ccoonn.php";
  
    mysqli_set_charset($ccoonn, "utf8");

$sql = "SELECT * FROM name_email";
  $result = mysqli_query($ccoonn ,$sql);
 echo"<center>";     
    echo"<table border=1>";   
   while($info = mysqli_fetch_array( $result ))
 {
 echo"<tr>";
  $name=$info['name'];
$email=$info['email'];
    echo"<td>";   echo $name;  echo"</td>";
   echo"<td>";   echo $email;  echo"</td>";                                                                                                                                                        echo"</tr>";
              }
     echo"</table>";
      echo"</center>"; 


 if( !isset($_POST['action_2']))
 {
?>
<form id="myform" action="<?php echo $_SERVER["PHP_SELF"]; ?>"  method = "POST">

Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>


 <input type="submit" name='action_2' value="Submit">
</form>
<?php
}



 if(isset($_POST['action_2']))
{
        $name=test_input($_POST["name"]);
        $email=test_input($_POST["email"]);

echo "name= ".$name;
echo"<br>";
echo "email= ".$email;

    mysqli_set_charset($ccoonn, "utf8");

    $sql = "INSERT INTO `name_email` (`number`,`name`, `email`) VALUES ('2','$name','$email')";
  
     $result = mysqli_query($ccoonn ,$sql);
  
echo"<br><br>ghesmate sabt dar database";

}


function test_input($data) {
                    $data = trim($data);
                     $data = stripslashes($data);
                          $data = htmlspecialchars($data);
                           return $data;
                           }
?>

</body>
</html>

کد بالا ، اول جدول را چاپ می کنه ، بعد اسم و ایمیل می خواهد ، و بعد اون را به جدول اضافه می کنه. ولی برای دیدن اسم خود باید مجدد لینک را باز کنید.



Screenshot_۲۰۲۴-۰۱-۱۹_۱۲۴۷۵۳.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
نکات کد پست فبل :
دقت کنید require را بردم قبل خوندن جدول ، چون اون هم به کانکشن نیاز داره ، قبلا داخل قسمت جواب به فرم بود.. کلا بهتره require و اینکلود اول فایل باشند.

اینکه چرا کدهای خواندن جدول دیتابیس اون جوریه ... دلیلی نمیشه برایش آورد ، همان را باید رعایت کرد. میشد بدون جدول هم زیر هم چاپ کرد ولی جالب نمیشد...
 

saalek110

Well-Known Member
خوب خواندن جدول های دیتابیس را هم یاد گرفتید....
قبلا هم insert کردن اطلاعات جدید به یک جدول را کار کردیم...

می مونه update یعنی تغییر دادن یک سطر یک جدول ...
و حذف یک سطر....

البته کارهایی مثل حذف یک جدول یا ساختن جدول را هم میشه با کد انجام داد ولی ما این جور کارها را در phpmyadmin دستی خودمون انجام می دهیم.
 

saalek110

Well-Known Member
آشنایی با کوئری ها:

PHP:
$sql = "SELECT * FROM $the_table ORDER BY number DESC ";   // WHERE serialH=4

کوئری بالا هم می خونه جدول را ولی با نگاه به ستون number صعودی یا نزولی می خونه ، بر اساس اون کلمه DESC

اون کلمه $the_table یک متغیر است که نام جدول داخلش است ، می توانید اون را پاک کنید اسم جدول را اونجا بنویسید.

در ادامه کوئری قبلا یک WHERE هم بوده که من به شکل کامنت درآوردم...یعنی سطرهایی را نگاه کن که ستون مثلا سریال فلان چیز باشه...در اینجا دنبال ۴ می گرده....
خوب این WHERE برای پیدا کردن سطرهای خاصی که یک ستونش فلان مقدار باشه خوبه.


کوئری آپدیت:
PHP:
  $sql = "UPDATE $db SET $soton='$meghdar' WHERE number=$number";

اون $db باز اسم جدول است می توانید خودتان جایگزین کنید...
اون $soton که اسم ستون است .... اون $meghdar یعنی داریم به اون ستون این مقدار را می دهیم...
قبلا هم در مورد WHERE گفتیم ، یعنی در سطر یا سطرهای خاصی این کار را می کند. در اینجا جایی که ستون number برابر با عدد خاصی باشد.


کوئری دیلت:
PHP:
  $sql = "DELETE FROM $the_table WHERE number=$number";

اون $the_table اسم جدول است ، می توانید جایگزین کنید...
باز WHERE اومده یعنی به ستون number نگاه می کنه ، اگر عدو خاصی بود ، اونسطر دیلت میشه...
خلاصه اش اینه مثلا برو سطری که ستون نامبرش مثلا ۳۳ است را حذف کن...
می دونید که کوئری دیلت حتما باید WHERE را داشته باشه وگرنه کل سطرها را پاک می کنه... پس حواستون باشه با این کوئری دیلت با احتیاط کار کنید.... بهتره یک کپی از جدولتون قبلش بگیرید.. و وقتی کوئری دیلت درست کار کرد و خیالتون راحت بود اون کپی جدول را می توانید پاک کنید... چون اگر شرط را درست ننویسید کل سطرها را پاک می کنه.

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

جدیدترین ارسال ها

بالا