پرش به محتوای اصلی
پردازش زبان طبیعی

ارسال اطلاعات به ديتابيس در PHP

امیر صالحی امیر صالحی — دقیقه مطالعه ۹۸,۸۱۳ بازدید
ارسال اطلاعات به ديتابيس در PHP

در این مقاله به آموزش اتصال به دیتابیس در برنامه نویسی php می پردازیم و نحوه ی ارسال اطلاعات به ديتابيس در PHP را به شما آموزش می دهیم. یکی از جالب ترین قسمت های پیاده سازی یک وب سایت کار با پایگاه داده می باشد و از آن جایی که پایگاه داده بخش خیلی مهمی از پروژه ما است پس باید بتوانیم خیلی خوب با پایگاه داده کار کنیم تا مشکلات امنیتی و یا مشکلاتی نظیر خطا داشتن کدهایمان پیش نیاید. در این قسمت از آموزش قرار است که با هم یاد بگیریم که چگونه می توان اطلاعات مورد نظرمان را به پایگاه داده ارسال کنیم، با ما همراه باشید.

[title]آماده سازی محیط کار برای ارسال اطلاعات به ديتابيس در PHP[/title]

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

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

ما در این پروژه ی کوچک نیاز به سه فایل با نام های config.php و index.php و process.php داریم، فایل config.php قرار است که تمامی مشخصات مربوط به پایگاه داده را در خود ذخیره سازی کند تا بتوانیم در طول پروژه و زمانی که می خواهیم به پایگاه داده متصل بشویم از آن استفاده کنیم.

در فایل index.php نیز ما کدهای ساده ی html خود را درون آن قرار می دهیم نظیر یک فرم که در ادامه ی آموزش به طور کامل به آن می پردازیم. در فایل process.php قرار است کدهای PHP که اطلاعات را به سمت پایگاه داده ارسال و ثبت می کند را قرار دهیم.

[title]آماده سازی پایگاه داده برای ارسال اطلاعات به ديتابيس در PHP[/title]

قبل از هر پروژه ای ما باید ابتدا جداول و فیلدهای پایگاه داده خود را مشخص کنیم، نگاه کلی به این پروژه کوچک این است که ما یک فرم در صفحه index.php خود داشته باشیم و از کاربر اطلاعاتی نظیر نام کاربری، ایمیل و سن او را دریافت کنیم.

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

برای ساخت یک پایگاه داده درون mysql همان طور که گفتیم ابتدا باید XAMPP خود را نصب داشته باشیم و Apache و Mysql را Start یا روشن کنیم تا بتوانیم از این دو استفاده کنیم. با وارد کردن آدرس localhost/phpmyadmin در آدرس بار مرورگرمان می توانیم وارد محیط Phpmyadmin بشویم و از Mysql استفاده کنیم.

باز زدن دکمه new در بالا اسامی پایگاه داده می توانیم یک پایگاه داده ایجاد کنیم. ارسال اطلاعات به ديتابيس در PHP : پایگاه داده Mysql - Phpmyadmin

بعد از کلیک کردن بر روی دکمه new در صفحه باز شده ما باید نام پایگاه داده و Encoding آن را وارد کنیم، همان طور که در قبل هم گفته شد نام پایگاه داده خود را myProject می گذاریم و Encoding پایگاه داده را نیز utf8mb4_general_ci قرار می دهیم که مناسب ترین و سازگارترین نوع برای کلمات فارسی نیز می باشد. بعد از وارد کردن این موارد بر روی دکمه create بزنید تا پایگاه داده شما ایجاد شود.

ارسال اطلاعات به ديتابيس در PHP : ایجاد پایگاه داده در phpmyadmin

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

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

در فیلد Name ما باید نام جدول خود را قرار دهیم که در پروژه ی ما قرار است اطلاعاتی مربوط به کاربران را درونش ذخیره سازی کنیم پس با این اوصاف نام جدول خود را users قرار می دهیم. بعد از قرار دادن نام جدول حال باید تعداد فیلدهای جدول خود را درون Number of columns مشخص کنیم. همان طور که در بالاتر نیز گفته شد قرار است نام کاربری، ایمیل و سن کاربر را ذخیره سازی کنیم پس نتیجه می گیریم که ما نیاز به چهار فیلد داریم.

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

بعد از وارد کردن نام جدول و تعداد فیلدهای آن بر روی دکمه go کلیک می کنیم تا به صفحه ای که باید نوع و اسامی فیلدهای جدول خودمان را وارد کنیم برویم.

ارسال اطلاعات به ديتابيس در PHP : ایجاد جدول users در پایگاه داده

همان طور که شما انتخاب کردید چهار فیلد برای ما آماده شده است تا ما نام، نوع و دیگر خصوصیات آن ها را وارد کنیم، در بخش Name نام ستون هایی که از قبل هم گفته شد می آوریم. به ترتیب از سمت چپ به راست id، username، email، age را در ستون Name وارد می کنیم.

حال باید type و یا نوع آن ها را مشخص کنیم، برای id، ما int قرار می دهیم تا عددهای منحصر به فرد درونش قرار بگیرد، برای فیلد id ما دو ویژگی دیگر که یکی به اسم های Auto Increment که با A_I در Mysql شناخته می شود و باید تیک آن زده شود و دیگری ستون Index برای اینکه مشخص کنیم این عدد منحصر به فرد است، در گزینه هایی که دارد ما گزینه PRIMARY را انتخاب می کنیم تا عددی که تولید می شود یکتا باشد.

ارسال اطلاعات به ديتابيس در PHP : تنظیمات فیلد id

برای فیلدهای username، email ما نوع آن ها را VARCHAR انتخاب می کنیم تا بتوانیم داده ی رشته ای وارد کنیم، ویژگی دیگری که باید برای این دو تنظیم کنیم طول رشته است که ستون Length/Values قابل تنظیم است، شما می توانید طول 255 را برای هر دو قرار دهید تا 255 کاراکتر را بتوان درون ستون ها وارد کرد.

ارسال اطلاعات به ديتابيس در PHP : تنظیمات فیلدهای username , email

و درنهایت برای فیلد age ما باید نوع آن را int و طول آن را سه رقم قرار دهیم چون در حال حاضر ما سنی بزرگ تر از سه رقم نداریم. بر روی دکمه Save کلید کنید تا جدول تعریف شده ی شما ساخته شود.

ارسال اطلاعات به ديتابيس در PHP : تنظیمات فیلد age [title]آماده سازی فایل config.php برای ارسال اطلاعات به ديتابيس در PHP[/title]

همان طور که گفته شد ما درون فایل config.php مشخصات مربوط به پایگاه داده خود را قرار می دهیم و در آن به پایگاه داده متصل می شویم، این مشخصات شامل نام هاست، نام پایگاه داده، نام کاربری پایگاه داده و رمز پایگاه داده است. ما قصد داریم این اطلاعات را به صورت یک آرایه درون فایل config.php داشته باشیم.

<?php 

$database = [ 
    'host'   => 'localhost', 
    'dbname' => 'myProject', 
    'user'   => 'root', 
    'pass'   => '' 
];

در کد بالا ما یک آرایه به نام database تعریف کرده ایم که از نوع Associative array است، که ما این اطلاعات را در آن ذخیره می کنیم:

  • host که در وب سرورهای محلی با نام localhost شناخته می شود.

  • dbname که نام پایگاه داده ما است.

  • user نام کاربری ورود به Mysql که به طور پیش فرض root است.

  • و pass که رمز عبور Mysql ما است و به طور پیش فرض خالی یا هیچی است.

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

try { 
    $db = new PDO("mysql:host={$database['host']};dbname={$database['dbname']}", $database['user'], $database['pass']); 
} catch (PDOException $e) { 
    die("An error happend, Error: " . $e->getMessage()); 
}

کد اتصال به پایگاه داده را ما درون یک بلاک try و catch گذاشتیم که اگر خطایی در اتصال به پایگاه داده وجود داشت بتوانیم آن را کنترل کنیم.

درون بخش try ما آمده ایم از PDO برای اتصال به پایگاه داده استفاده کرده ایم، از آن جایی که PDO یک شئ است (درباره مبحث شئ گرایی به طول کامل درون دوره آموزشPHP تدریس شده است) ما باید یک از کلمه new برای ساختن یک نمونه از آن استفاده کنیم، درون PDO ما نوشته ایم که:mysql، به این معناست که پایگاه داده ما Mysql است، کلمه ی بعدی که host است باید نام host خود را مشخص کنیم که ما آن را درون آرایه ای که مشخصات پایگاه داده را در اختیار داشت فراخوانی کرده ایم، دو براکت {} بین متغیر برای جلوگیری از تداخل بین رشته و متغیر است.

در ادامه ما با یک ; (سمی کالمن) دو مقدار را از هم جدا کرده ایم، رو به روی کلمه dbname ما نام پایگاه داده خود را آورده ایم. در خارج از رشته ما نام کاربری و رمز عبور را فراخوانی کرده ایم. در نهایت نیز اتصال پایگاه داده را درون متغیر db نگه داشته ایم.

بلاک catch نیز زمانی اجرا می شود که خطایی در بلاک try رخ دهد و اگر خطایی رخ دهد تابع die اجرا می شود که خطا را چاپ و برنامه را متوقف می کند.

[title]آموزش ساخت فرم در سایت با php و mysql[/title]

درون فایل index.php ما باید فرم خود را قرار دهیم تا کاربر بتواند اطلاعات خود را درونش وارد کند و آن ها را درون پایگاه داده ذخیره کنیم. از آن جایی که هدف این آموزش، آموزش html و css نیست ما یک نمونه فرم برای شما آماده کرده ایم پیشنهاد می کنیم برای اینکه وقتتان ذخیره شود از همین کدهای زیر استفاده کنید.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Insert data to database</title>
    <style>
        .container {
            margin: 20px auto;
            width: 24%;
            text-align: left;
            border: 1px solid #eee;
            padding: 14px 26px;
            border-radius: 6px;
        }

        .form-control {
            padding: 8px;
        }

        input {
            border-radius: 5px;
            border: 1px solid #eee;
            padding: 8px 9px;
        }

        input#age {
            margin-left: 43px;
        }

        input#email {
            margin-left: 27px;
        }

        input[type="submit"] {
            background-color: dodgerblue;
            color: white;
            cursor: pointer;
        }

        label {
            margin-right: 22px;
        }
    </style>
</head>

<body>
    <div class="container">
        <form action="process.php" method="post">
            <div class="form-control">
                <label for='username'>Username</label>
                <input type="text" id="username" name="username" placeholder="Enter your username" autocomplete="off">
            </div>

            <div class="form-control">
                <label for='email'>Email</label>
                <input type="email" id="email" name="email" placeholder="Enter your email" autocomplete="off">
            </div>

            <div class="form-control">
                <label for='age'>age</label>
                <input type="text" id="age" name="age" placeholder="Enter age username" autocomplete="off">
            </div>

            <div class="form-control">
                <input type="submit" value="Submit">
            </div>
        </form>
    </div>
</body>

</html>

نکته ای که درون کد بالا وجود دارد این است که ما action فرم را به فایل process.php متصل کرده ایم و متد فرم را نیز POST قرار داده ایم.

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

[title]ذخیره اطلاعات فرم در دیتابیس[/title]

به بخش جذاب این پروژه ی کوچک رسیده ایم که قرار است آموزش اتصال فرم به دیتابیس را به شما بگوییم تا بتوانیم اطلاعاتمان را در پایگاه داده ثبت کنیم، در فایل index.php که فرم ما درون آن وجود دارد وقتی که فیلدهای فرم توسط کاربر پر می شوند و دکمه Submit یا ارسال فشرده می شود اطلاعات فرم به سمت فایل process.php ارسال می شود و تمامی اطلاعات از طریق آرایه Super global به نام POST قابل دسترس است. برای مثال بیایید داده هایی که به سمت فایل process.php می آید را چاپ کنیم تا مشاهده کنیم شامل چه محتوایی می باشد.

برای این کار شما ابتدا درون فایل process.php آرایه POST را print_r کنید، با print_r می توان آرایه های مختلف را چاپ کرد و محتوای آن ها را دید.

<?php

print_r($_POST);

درون فایل process.php این کد را قرار داده ایم حال بیایید شروع به وارد کردن داده ی درون فرم کنیم و آن را ارسال کنیم.

ذخیره اطلاعات فرم در دیتابیس

داده ای که در بالا وارد کردیم را ارسال می کنم و در صفحه ی process.php ما به این خروجی دست می یابیم.

Array ( [username] => amirsalehi [email] => example@gmail.com [age] => 18 )

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

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

ابتدا برای اینکه بتوانیم از ارتباطی که در فایل config.php ایجاد کرده ایم استفاده کنیم باید فایل config.php را include کنیم.

include_once 'config.php';

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

در ادامه می خواهیم بررسی کنیم که آیا مقادیری که قرار است ارسال بشود توسط کاربر پر شده است یا خیر؟ [subtitle]شرط های بررسی مقادیر ارسال شده[/subtitle]

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['email']) and isset($_POST['age'])) {
        if (!empty($_POST['username']) and !empty($_POST['email']) and !empty($_POST['age'])) {
                # data is valid
        }
    }
}

در کد بالا ما چندین شرط قرار داده ایم تا تقریبا از صحت داده ارسال شده مطمئن شویم، شرط اول بررسی می کند که آیا متد درخواستی (Request method) که آمده است از نوع POST است به این معناست که فرم ارسال شده است؟ در شرط خط دوم ما بررسی کرده ایم که آیا مقادیر username، email، age در آرایه POST وجود دارد یا خیر؟ و در شرط خط سوم بررسی کرده ایم که مقادیر ارسال حاوی اطلاعات پوچ یا خالی نباشد.

حال اگر آن سه شرط true شود، کد ما درون بلاک آخرین if اجرا می شود، نوبت آن است که کد مربوط به ارسال اطلاعات را درون آخرین بلاک بنویسیم.

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

[subtitle]ارسال اطلاعات به ديتابيس در PHP[/subtitle]

<?php
include_once 'config.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['email']) and isset($_POST['age'])) {
        if (!empty($_POST['username']) and !empty($_POST['email']) and !empty($_POST['age'])) {
            # data is valid
        }
    }
}

function insertUserData($username, $email, $age)
{
    global $db;
    $sql = "INSERT INTO users (username, email, age) VALUES (:username, :email, :age)";
    $stmt = $db->prepare($sql);
    $stmt->execute([':username' => $username, ':email' => $email, ':age' => $age]);
    return $stmt->rowCount();
}

همان طور که می بینید ما یک تابع به اسم insertUserData تعریف کرده ایم و پارامتر ورودی برای تابع به نام های username، email، id در نظر گرفته ایم. درون تابع ما متغیر db را که درون فایل config.php است global کرده ایم شاید بپرسید چرا؟ برای اینکه بتوانیم از متغیرهای تعریف شده درون پروژه مان در توابع استفاده کنیم باید کلید global را قبل از نام متغیر قرار بدهیم تا درون بلاک تابع قابل دسترس باشد.

در خط بعدی ما کوئری ارسال اطلاعات به پایگاه داده را نوشته ایم و درون متغیر sql قرار داده ایم. تنها جایی که در کوئری نیاز به توضیح دارد قسمت پرانتز بعد از  VALUES می باشد. در داخل پرانتز ما آمده ایم یک سری کلیدها با نام های مرتبط قرار دا ده ایم، چرایی این کار این است که اگر مقادیر وارد شده معتبر نباشد و هدف آن SQL Injection باشد (در مقاله آموزش کامل امنیت در PHP درباره SQL Injection صحبت کرده ایم و راحل رفع آن را نیز گفته ایم) جلوی این حمله را گرفته باشیم پس به خاطر همین است که ما مقادیر ورودی را به طور مستقیم درون کوئری قرار نداده ایم.

در ادامه کد کوئری را درون تایع prepare قرار داده ایم تا کوئری ما را آماده ی اجرا کردن کند و محتوای آن را بررسی کند، مقدار prepare شده کوئری را درون متغیر stmt قرار داده ایم تا بتوانیم کوئری را در ادامه اجرا کنیم، در ادامه ما از متغیر stmt تابع execute را صدا زده ایم تا کلیدهایی که درون کوئری تعریف کرده ایم با مقادیر اصلی شان جایگذاری کنیم و کوئری را اجرا کنیم. برای این کار کافی است در بین پرانتزهای تابع execute یک آرایه (درست مثل آرایه Associative) را به عنوان ورودی تابع بدهیم. که Index های آرایه مقدار کلید های تعریف شده درون کوئری است. و value های آرایه ورودی های تابع است. در نهایت نیز از stmt  تابع rowCount را صدا می زنیم تا برای ما تعداد فیلدهایی که تحت تاثیر این کوئری قرار گرفته است را برگرداند، واگر این کوئری به درستی کار کند عدد یک را برای ما بر می گرداند.

[subtitle]ارسال نهایی اطلاعات به ديتابيس در PHP[/subtitle]

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

<?php
include_once 'config.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['email']) and isset($_POST['age'])) {
        if (!empty($_POST['username']) and !empty($_POST['email']) and !empty($_POST['age'])) {
            $result = insertUserData($_POST['username'], $_POST['email'], $_POST['age']);
        }
    }
}

function insertUserData($username, $email, $age)
{
    global $db;
    $sql = "INSERT INTO users (username, email, age) VALUES (:username, :email, :age)";
    $stmt = $db->prepare($sql);
    $stmt->execute([':username' => $username, ':email' => $email, ':age' => $age]);
    return $stmt->rowCount();
}

در بالا ما تابع insertUserData که نوشته ایم را صدا می زنیم و به ترتیب مقادیر را به آن پاس می دهیم و مقدار خروجی تابع را درون یک متغیر به اسم result قرار می دهیم.

حال اگر به فرم ساخته شده درون index.php مراجعه کنیم و فیلدها را پر کنیم و بر روی دکمه ی submit یا ارسال بزنیم اطلاعات در پایگاه داده ذخیره می شوند و ما به صفحه process.php انتقال داده می شویم. اگر بخواهید مطمئن شوید که اطلاعات در پایگاه داده ذخیره شده است یا خیر می توانید وارد phpmyadmin خود شوید و درون جدول users مقدار ثبت شده را مشاهده خواهید کرد.

مشکلی که ممکن است در این قسمت به وجود بیاید این است که شما به process.php منتقل می شوید و وقتی در همان صفحه، صفحه را Refresh می کنید اطلاعات دوباره به پایگاه داده ارسال می شود، در ادامه راه حل برطرف کردن این مشکل را به شما می گوییم.

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['username']) and isset($_POST['email']) and isset($_POST['age'])) {
        if (!empty($_POST['username']) and !empty($_POST['email']) and !empty($_POST['age'])) {
            $result = insertUserData($_POST['username'], $_POST['email'], $_POST['age']);
            if ($result) {
                header('location: index.php?s=1');
                exit;
            } else {
                header('location: index.php?s=0');
                exit;
            }
        }
    }
}

اگر به خاطر داشته باشید ما خروجی تابع را درون متغیر result قرار می دادیم، پس با همین متغیر می توانیم مشکل مان را حل کنیم. اگر تابع به درستی اجرا شود مقدار درون result برابر با عدد یک می شود و اگر به درستی انجام نشود مقدار صفر که به معنای false است قرار می گیرد.

در ادامه ما مقدار درون result را در یک شرط بررسی می کنیم، اگر مقدار result برابر با یک بود وارد بلاک if می شود و ما را با کمک تابع header به index.php ارسال می کند، اما با یک مقدار اضافه در url که s=1 است. s حرف اول کلمه success است برای اینکه تشخیص بدهیم اطلاعات با موفقیت در پایگاه داده ثبت شده اند یا خیر. اگر مقدار result یک نبود وارد بلاک else می شود و ما را به صفحه index.php بر می گرداند اما با s=0 که نشان می دهد اطلاعات با موفقیت درون پایگاه داده ثبت نشده اند.

exit بعد از header برای این است که بعد از اجرا شدن تابع header ادامه ی کدهای درون آن صفحه خوانده نشوند و از همان جا خارج شود.

[subtitle]تمرین[/subtitle]

در نهایت یک تمرین برای شما در نظر گرفته ایم، با مقداری که از طریق url به صفحه ی index.php ارسال می شود پیام مرتبط چاپ کنید، برای مثال اگر s برابر با یک بود پیام موفقیت آمیز بدهید.

جمع بندی:

در مقاله ی ارسال اطلاعات به ديتابيس در PHP ، ما ابتدا محیط کار خودمان را آماده سازی کردیم و بعد از آن پایگاه داده خود را طراحی کردیم و شروع به اضافه کردن تنظیمات مربوط به پایگاه داده درون فایل config.php کردیم. بعد از آن یک فرم مناسب در صفحه index.php قرار دادیم و شروع به کد نویسی اصلی پروژه مان که در فایل process.php بود کردیم و یاد گرفتیم که چگونه می توانیم اطلاعاتمان را با روشی درست و مناسب به سمت پایگاه داده ارسال کنیم و حتی جلوی مشکلی که پیش می آمد را نیز گرفتیم. امیدواریم که از این مقاله بهره کافی را برده باشید. اگر در انجام این کار سوال یا مشکلی داشتید خوشحال می شویم که در بخش نظرات با ما به اشتراک بگذارید.

اگر به یادگیری بیشتر در زمینه ی PHP علاقه داری، با شرکت در دوره ی آموزشی متخصص PHP در کمتر از یکسال به یک متخصص PHP تبدیل می شوی که آماده ی استخدام، دریافت پروژه، کسب درآمد و یادگیری مباحثی مثل لاراول هستی.

اشتراک‌گذاری:
۷۷ دیدگاه
امیر صالحی
نویسنده امیر صالحی
۵

دیدگاه‌ها

۲۴ نفر تجربه‌شان را نوشته‌اند.

B
Behrouz Alborzi ۱۳۹۹/۳/۱۲

باسلام و وقت بخیر خدمت شما مقاله واقعا خوبیه ..
فقط اینکه من collation در mysql همیشه utf8_grenral_ci استفاده میکنم و بنظر بهتره
و لطفا یه مقاله درباره mysql schema هم میزارین ؟

ا
امیر صالحی ۱۳۹۹/۳/۱۲

سلام وقت شما هم بخیر، خیلی خوشحالیم که مقاله مفید بوده براتون
بله collation انتخابی شما هم مناسبه، مقاله پیشنهایی شما رو حتما بررسی میکنیم و اطلاع میدیم.

h
hhh ۱۳۹۹/۳/۳۱

سلام ممنون ازمطالب مفیدتون...
من یه سوال داشتم ممنون میشم بهم کمک کنید
مثل این کد function delpic() {
if(confirm("آیامطمعن به حذف تصویرهستید؟"))
window.location.assign("./delpic.php");
اینجامیخوام اون پیغاموبزارم
&lt;a href=&quot;./?pg=users&amp;action=del&amp;id=" title="حذف"&gt;

ا
امیر صالحی ۱۳۹۹/۴/۳

سلام، لطفا کدتان را در یک ظاهر مناسب تر قرار دهید تا بتوانم کمکتان کنم

ع
علی ۱۳۹۹/۴/۱۵

مطالب بسیارخوب هستندامااین جداول رابرای یک سایت پی اچ پی چگونه تنظیم نمایم لطفاراهنمائی فرمائید
متشکرم

ا
امیر صالحی ۱۳۹۹/۴/۲۴

خیلی ممنون از وقتی که برای خوندن این مقاله گذاشتید
اگه امکانش هست بیشتر توضیح بدید تا بتونم بهتون کمک کنم

ع
علی احمدی ۱۳۹۹/۴/۱۹

چطوری config.php رو include کنیم؟؟

ا
امیر صالحی ۱۳۹۹/۴/۲۴

سلام و احترام
میتونید خیلی راخت از تابع include استفاده کنید
include 'filename';

ع
علی ۱۳۹۹/۴/۲۵

سلام خیلی ممنون از مطالب خوبتون یک سوال داشتم،من فایل php را قرار داده ام و در phpmyadmin هم با همان اسامی یک جدول درست کرده ام ولی وقتی فرم تماس را پر میکنم و دکمه ی ارسل را میزنم چیزی در دیتا بیس زخیره نمیشه و در همون صفحه ی html اطلاعت وارد شده را به همراه این ارور نشان میدهد SQLSTATE[42S02]: Base table or view not found: 1146 Table ' tablename' doesn't exist
این هم کدهای php :

ا
امیر صالحی ۱۳۹۹/۴/۲۷

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

j
jafar ۱۳۹۹/۵/۱۰

با عرض سلام و خسته نباشد من به دیتا بیس وصلم و وقتی هم چیزی رو برای دیتا بیس ارسال میکنم هیچ اروری نمیده تمام ستونهای table هم ساختم ولی داخلش اطلاعاتم نمیشینه لطفا راهنماییم کنید اینم کدی که نوشتمه

ا
امیر صالحی ۱۳۹۹/۵/۱۰

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

ج
جعفر ۱۳۹۹/۵/۱۰

تو قسمت افزودن کد براتون فرستادم اینجا هم گذاشتم
$sql="INSERT INTO users_tbl (name,lastname,age,field,comment,picture) VALUES ('$data[name]','$data[lastname]','$data[age]','$data[field]','$data[comment]','$to')";
اینم اروری هست که تو phpstorm بهم میده :
No data sources are configured to run this SQL and provide advanced code assistance. Disable this inspection via problem menu (Alt+Enter).
SQL dialect is not configured.

ا
امیر صالحی ۱۳۹۹/۵/۱۰

وقتی که می‌خواهید یک کلید از یک ارایه رو صدا بزنید اگر اون کلید یک رشته باید اون رو درون دابل کوتیشن یا تک کوتیشن قرار بدید. برای مثال شما در بخش values باید کلید رو به این صورت $data["name"] قرار بدید.

s
sajad ۱۳۹۹/۵/۱۰

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

ا
امیر صالحی ۱۳۹۹/۵/۱۰

سلام مرسی از شما که برای مطالعه این مقاله وقت گذاشتید.
مشکل شما به خاطر اینکه collation مناسبی برای دیتابیستون انتخاب نکردید. بهتون پیشنهاد میدهم موقع ایجاد دیتابیس collationشو روی utf8mb4_general_ci قرار بدید

a
amin ۱۳۹۹/۵/۱۴

سلام یه مشکل بین هاست و سورس ها دارم میخواستم ببینم اگه میشه با any deskبرام رفع کنین

ا
امیر صالحی ۱۳۹۹/۵/۱۶

سلام دوست عزیز، متاسفانه همچین خدماتی رو توی مجموعه سون لرن ندارم

ه
هادی ۱۳۹۹/۵/۲۳

سلام
من کد هامو به همین شکلی که شما توضیح دادین نوشتم که امنیتش بیشتر بشه ولی اطلاعات فرم رو نمیفرسته تو دیتابیس داخل VALUES هر چی نوشتم اونارو میفرسته

ا
امیر صالحی ۱۳۹۹/۵/۲۴

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

m
mohammad ۱۳۹۹/۶/۱۸

من با این ارور روبرو شدم توی ارسال اطلاعات به دیتابیس لطفا راهنمایی کنید
Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\web\newz\process.php:16 Stack trace: #0 C:\xampp\htdocs\web\newz\process.php(7): insertUserData('m', 'm@gmail.com', '19') #1 {main} thrown in C:\xampp\htdocs\web\newz\process.php on line 16

ا
امیر صالحی ۱۳۹۹/۶/۲۱

سلام و احترام
مثل اینکه متد prepare رو روی یک متغیری که مقدار null داره صدا زدید، خط 16 فایل process.php رو بررسی کنید

م
محمد ۱۳۹۹/۷/۲

سلام ممنون از شما که دانشتون رو با ما در اختیار میگذارید
بنده از کد شما برای ایجاد صفحه فرمم استفاده کردم اما تغییراتی در کد انجام دادم که به کمک شما نیاز دارم
بنده قابلیت ارسال فایل رو اضافه کردم اما هنگامی که فایل آپلود میشود آدرس فایل چون به صورت آرایه هست در دیتابیس بجای آدرس فایل کلمه array نوشته میشود که دلیلش رو هم سرور اینگونه پاسخ میدهد:
( ! ) Notice: Array to string conversion in C:\wamp\www\php\procces.php on line 39
Call Stack
# Time Memory Function Location
1 0.0006 410848 {main}( ) ...\procces.php:0
2 0.0114 458560 insertUserData( ) ...\procces.php:19
3 0.0114 459680 execute ( ) ...\procces.php:39
که دلیلش هم استفاده از تابع execute است
بنابراین من به کمک شما برای رفع این مشکل نیازمندم
کد های بنده نیز اینگونه است:

ا
امیر صالحی ۱۳۹۹/۷/۴

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