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

ذخیره اطلاعات کاربر در دیتابیس با PHP – در خیلی از فرم ها نیاز است که اطلاعاتی درباره کاربر دریافت کنیم و در صورت لزوم آن را در بانک داده ذخیره کنیم .
برای همین موضوع در این آموزش قصد داریم اطلاعاتی همچون :
- نام و نام خانوادگی
- سن
- جنسیت
- وسایل نقلیه
- شماره تماس
- تصویر کاربر
را با فرم دریافت و پس از پردازش در دیتابیس ذخیره کنیم .
دموی برنامه
اسکریپت 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 کنید
لیست نظرات
سلام . اگر بخوایم بجای وارد کردن سن ، تاریخ تولد به صورت شمسی از کاربر دریافت کنیم چطوری باید به برنامه اضافه کنیم؟ من از کتابخانه jdate , datepicker استفاده کردم ولی اعمال نشد. نمیدونم مشکل از کجاست!! امکانش هست راهنمایی بفرمائید.
طبق این آموزش پیش برید
سلام، چه عالی 😍 دستتون دردنکنه از آموزش خوبتون. یه سوال داشتم؛ چطوری میشه چندصفحه رو بهم متصل کرد؟ صفحه لاگین، ثبتنام و تغییر رمز و پروفایل فرد رو؟ پروژه کلاسیم هست و مهلتش کمه. و اینکه از تو گیتهاب خیلی نمونه دانلود کردم اما با وجود نصب xampp و vs code برنامه ها اجرا نمیشه!
سلام ، کافیه که هر عملی انجام میشه به صفحه دیگه ریدایرکت کنید : مثلا بعد از تایید حساب به صفحه لاگین هدایت بشه تکه کد برای ریدایرکت