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

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

ذخیره اطلاعات کاربر در دیتابیس با PHP – در خیلی از فرم ها نیاز است که اطلاعاتی درباره کاربر دریافت کنیم و در صورت لزوم آن را در بانک داده ذخیره کنیم .

برای همین موضوع در این آموزش قصد داریم اطلاعاتی همچون :

  1. نام و نام خانوادگی
  2. سن
  3. جنسیت
  4. وسایل نقلیه
  5. شماره تماس
  6. تصویر کاربر

را با فرم دریافت و پس از پردازش در دیتابیس ذخیره کنیم .

دموی برنامه


اسکریپت index.php

<?php
if($_POST)
require_once "process.php";
?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>Rapidcode.iR - سورس کد</title>
    <link rel="stylesheet" href="static/css/main.css">
</head>
<body>


    <div class="container">
        <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>

        <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>اطلاعات کاربر</legend>
            <input required type="text" name="firstname" placeholder="نام"><br><br>
            <input required type="text" name="lastname" placeholder="نام خانوادگی"><br><br>
            <input required type="number" name="age" placeholder="سن"><br><br>
            <input required type="text" name="phone" placeholder="شماره تماس"><br><br>
            <label>جنسیت :</label><br>
            <label for="male">مذکر</label>
            <input type="radio" required name="gender" id="male" value="male">
            <label for="female">مونث</label>
            <input type="radio" required name="gender" id="female" value="female"><br><br>
            <label>چه وسایل نقلیه ای دارید ؟</label><br>
            <label for="car">خودرو</label>
            <input type="checkbox" name="vehicles[]" id="car" value="خودرو">
            <label for="bike">موتور</label>
            <input type="checkbox" name="vehicles[]" id="bike" value="موتور">
            <label for="bicycle">دوچرخه</label>
            <input type="checkbox" name="vehicles[]" id="bicycle" value="دوچرخه"><br><br>
            <label for="user_avatar">تصویر شما :</label>
            <input type="file" id="user_avatar" name="user_avatar">
            <div class="preview-container">
                <div id="preview"></div>
            </div>
        </fieldset><br>
        <input type="submit" name="submit" value="ارسال">    
        </form>
       
    </div>

    <script src="static/js/app.js"></script>
</body>
</html>

دقت داشته باشید که form دارای ویژگی enctype=”multipart/form-data” جهت آپلود تصویر داشته باشد .


اسکریپت process.php

<?php 
require_once "db.php";

$file_data = $_FILES['user_avatar'];
$allowed_image = ['image/png', 'image/jpg', 'image/jpeg'];
if(!in_array($file_data['type'], $allowed_image)) die("فرمت نا معتبر");

$image_ext = str_replace('image/', '', $file_data['type']);
$time = time();
$avatar_path = "avatar/{$time}.{$image_ext}";
$avatar_path_www = getBaseHttp();
$avatar_path_www .= "/{$avatar_path}";

$is_moved = move_uploaded_file($file_data['tmp_name'], $avatar_path);

if(!$is_moved) die("خطایی در ذخیره تصویر به وجود آمده");

unset($_POST['submit']);
$_POST['user_avatar'] = $avatar_path_www;
$data = json_encode($_POST);
$id = setData("INSERT INTO {$table} (udata) VALUES (?)",[$data]);

$basehttp = getBaseHttp();
header("Location: http://{$basehttp}/user.php?id={$id}");

$stmt->close();
$mysqli->close();
?>

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


اسکریپت db.php

این script برای دریافت و ثبت اطلاعات در دیتابیس می باشد .

<?php

$mysqli = new mysqli("localhost", "root", "", "cms");
$table = 'user_data';
if ($mysqli->connect_error) {
    die("MYSQL ISSUE : " . $mysqli->connect_error);
}

$mysqli->set_charset("utf8");
$stmt = $mysqli->stmt_init();



function get_user_data($uid){
    global $table;
	$data = getData("select * from `{$table}` WHERE id=?" , [$uid]);
	$data = end($data);
	return $data;
}

function getData($uquery,$data){
    global $mysqli;
    global $stmt;
    $query = $uquery;
    $rows = [];
  
    $stmt->prepare($query);
	$stmt->bind_param(str_repeat("s",count($data)), ...$data);
 
	if ($stmt->execute() && $res = $stmt->get_result()) {
    	if ($stmt->affected_rows || $res->num_rows) {
        	while ($row = $res->fetch_assoc()) {
            	$rows[] = $row;
        	}
    	}
	}
    return $rows;
}

function setData($uquery , $data){
    global $mysqli;
    global $stmt;
     
    $query = $uquery;
    $stmt->prepare($query);
    $type = str_repeat("s",count($data));
    $stmt->bind_param($type, ...$data);
    $inserted_id=0;
    if ($stmt->execute()) {
        $inserted_id = $stmt->affected_rows ? $stmt->insert_id : 0;
    }
    return $inserted_id;
}

function getBaseHttp(){
    $path_www = $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
    $path_www = explode("/", $path_www);
    $path_www_size = count($path_www)-1;
    unset($path_www[$path_www_size]);
    $path_www = implode("/", $path_www);
    return $path_www;
}

?>


اسکریپت user.php

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

<?php 
$uid = @$_GET['id'];

if(!$uid) die("شناسه کاربر وارد نشده");

require_once "db.php";
$user_data = get_user_data($uid);

if(!$user_data) die("کاربر در دیتابیس یافت نشد");

$udata = json_decode($user_data['udata'] , true);

?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>Rapidcode.iR - سورس کد</title>
    <link rel="stylesheet" href="static/css/main.css">
</head>
<body>


    <div class="container">
        <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>

        <table>

        	<tr>
        		<td>تصویر پروفایل</td>
        		<td><img src="http://<?php echo $udata['user_avatar'] ?>"></td>
        	</tr>

        	<tr>
        		<td>نام</td>
        		<td><?php echo $udata['firstname'] ?></td>
        	</tr>

        	<tr>
        		<td>نام خانوادگی</td>
        		<td><?php echo $udata['lastname'] ?></td>
        	</tr>

        	<tr>
        		<td>سن</td>
        		<td><?php echo $udata['age'] ?></td>
        	</tr>

        	<tr>
        		<td>شماره تماس</td>
        		<td><?php echo $udata['phone'] ?></td>
        	</tr>

        	<tr>
        		<td>جنسیت</td>
        		<td><?php echo $udata['gender'] ?></td>
        	</tr>

        	<tr>
        		<td>وسایل نقلیه</td>
        		<td><?php echo join(", " , $udata['vehicles']) ?></td>
        	</tr>
        </table>
       
       <a href="http://<?php echo getBaseHttp(); ?>">بازگشت</a>
    </div>



    <script src="static/js/app.js"></script>
</body>
</html>


استایل برنامه با main.css

td img{
    width: 75px;
}

.preview-container{
    text-align: center;
}

#preview{
    display: inline-block;
    width: 100px;
    height: 100px;
    background-size: 100px;
}


اسکریپت app.js

جهت پیش نمایش تصویر کاربر قبل از آپلود تصویر

const freader = new FileReader();
const fileInpDOM = document.getElementById("user_avatar");

if(fileInpDOM)
fileInpDOM.addEventListener("change" , loadFileReader);

function loadFileReader(event){

	const files = event.target.files;
    const file = files[0];console.log(file);
    if(!file) return false;
     
    freader.readAsDataURL(file);
    freader.onload = function(event){
        const result = event.target.result;
        const img = document.getElementById("preview");
        img.setAttribute("style" , `background-image:url(${result});`);
    }
}

قبل از اجرای برنامه وارد پوشه DB To Import شده cms را import کنید


دانلود پروژه دریافت و ثبت داده کاربر در دیتابیس با PHP

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. Mina
    Mina

    سلام . اگر بخوایم بجای وارد کردن سن ، تاریخ تولد به صورت شمسی از کاربر دریافت کنیم چطوری باید به برنامه اضافه کنیم؟ من از کتابخانه jdate , datepicker استفاده کردم ولی اعمال نشد. نمیدونم مشکل از کجاست!! امکانش هست راهنمایی بفرمائید.

    27 بهمن 1400 | 10:15:05
  • حسین باقری
    حسین باقری

    طبق این آموزش پیش برید

    27 بهمن 1400 | 11:01:19
  • زهرا
    زهرا

    سلام، چه عالی 😍 دستتون دردنکنه از آموزش خوبتون. یه سوال داشتم؛ چطوری میشه چندصفحه رو بهم متصل کرد؟ صفحه لاگین، ثبت‌نام و تغییر رمز و پروفایل فرد رو؟ پروژه کلاسیم هست و مهلتش کمه. و اینکه از تو گیت‌هاب خیلی نمونه دانلود کردم اما با وجود نصب xampp و vs code برنامه ها اجرا نمیشه!

    23 بهمن 1400 | 04:30:26
    • حسین باقری
      حسین باقری

      سلام ، کافیه که هر عملی انجام میشه به صفحه دیگه ریدایرکت کنید : مثلا بعد از تایید حساب به صفحه لاگین هدایت بشه تکه کد برای ریدایرکت

      header("location: login.php")
      
      23 بهمن 1400 | 11:13:04
    contact us

    انجام انواع پروژه های وب


    ( فروشگاهی ، خبری ، رزرواسیون ، وردپرس ، حل مشکلات وردپرسی )

    شماره تماس و واتساپ : 09398554859