فرم ثبت نام (بخش چهارم فیلم های آموزشی) [حل شد]
سلام
من سعی کردم فرم ثبت نامی که استاد توی بخش چهارم درست کردند رو پیشرفته تر کنم، یعنی میخواستم دستوری رو درونش بنویسم که از کاربر ، بعد از اینکه ایمیلش رو وارد کرد ، تایید ایمیل رو هم در فیلد دیگری بخواد ، و در صورتی که کاربر هر دو فیلد رو یکسان پر نکرد بهش اخطار بده .
یک نمونه از دستوری که نوشتم بدین ترتیب هست :
$sql = "SELECT id FROM info WHERE email='$email' " ;
$result = $conn->query($sql);
if ($result->num_rows != 0) { ?>
<div class="submiting">Your email address is submitted already,plz change it and try again.</div>
<? } else {
$sql = "SELECT id FROM info WHERE reemail='$reemail' " ;
$result = $conn->query($sql);
if($result->reemail=='$email'){
$sql = "INSERT INTO info (firstName,email,reemail) VALUES ( '$firstName', '$email' ,'$reemail')";
$result = $conn->query($sql);
?>
<div class="submiting">Your information is submitted</div>
<? } else {?>
<div class="submiting">Your E-mail addresses does not match.plz try again.</div>
<?
} }
$conn->close();
?>
اما این کد درست کار نمیکنه
موارد مشابه این رو هم امتحان کردم ولی فایده نداشت.
خیلی کارو سخت کردی
به نظرم بهتره چک کردن ایمیل دوم رو با جاوا اسکریپت انجام بدی
یعنی تو onclick ِ دکمه ی submit چک کنی که اگه valueی دومی مساوی اولی نبود پیغام بده
چطوری باید بهش دستور بدیم که مقدار وارد شده در input رو (یا بقول شما مقدار value رو) بخونه؟
الان این کد رو من نوشتم و امتحان کردم ، ولی باز جواب نداد
$conn->query("SET NAMES UTF8");
$sql = "SELECT id FROM info WHERE email='$email' " ;
$result = $conn->query($sql);
if ($result->num_rows != 0) { ?>
<div class="submiting">Your email address is submitted already,plz change it and try again.</div>
<? } else { ?>
<script>
var button = $("#submit");
var reemail = $("#reemail");
var email = $("#email");
button.click( function(){
if("$email"=="$reemail"){
<?$sql = "INSERT INTO info (firstName,email,reemail)
VALUES ( '$firstName', '$email' ,'$reemail')";
$result = $conn->query($sql); ?>
"Your information is submitted"
else{
"Your E-mail addresses does not match.plz try again."
}
}
});
</script>
<?
}
$conn->close();
?>
خوب من الان فایل کدهای جلسه ی 4 رو دیدم که از mysqli استفاده شده بود.فک نمیکردم انقد زود شی گرایی کد زده بشه :دی
شما reEmail رو نباید داخل دیتابیس ثبت کنی چون یک ایمیل قراره ثبت بشه.reEmail فقط یک تکست باکس واسه چک کردن ایمیل اوله که درست وارد شده یا نه.
در کدهای اولین پست قسمت else اینها اضافیه :
$sql ="SELECT id FROM info WHERE reemail='$reemail' ";
$result = $conn->query($sql);
if($result->reemail=='$email'){
بعد از اینسرت بهتره این کدو بزاری:
if ($result->affected_rows > 0)
{
echo '<div class="submiting">Your information is submitted</div>';
}
else
{
// ....
}
کدهای قبلیتو خودت اضافه کن...کلیتش اینجوریه:
// ........
// ........
$reEmail = $_POST['reEmail'];
if ($reEmail == $email)
{
$sql = "SELECT id FROM info WHERE email = '{$email}'" ;
$result = $conn->query($sql);
if ($result->num_rows > 0)
{
echo '<div class="submiting">Your email address is submitted already,plz change it and try again.</div>';
}
else
{
$sql = "INSERT INTO info (firstName,email) VALUES ('{$firstName}', '{$email}')";
$result = $conn->query($sql);
if ($result->affected_rows > 0)
{
echo '<div class="submiting">Your information is submitted</div>';
}
else
{
echo 'There was an error.try again later...'
}
}
}
else
{
echo 'Email address does not match...';
}
?>
البته مقادیر باید بیشتر از این validate بشن.مثلا چک بشن خالی هستن یا نه و آدرس ایمیل وارد شده فرمتش معتبر هست یا نه و ....
محسن جان ممنون ،
بالاخره انجامش دادم ؛البته کد من تفاوت هایی داره با کدی که شما نوشتی ، ولی نکته ی کلیدی درونش بود و من استفاده کردم.
کد رو قرار میدم تا سایر دوستان هم استفاده کنند ،
کار جالبی شد در کل.
این کد مربوط به فایل insert-query.php هست که وقتی کاربر اطلاعات رو در فرم پر میکنه ، اطلاعات به این فایل ارسال میشن و در دیتابیس ثبت میشن.
<?php
$firstName=$_POST['firstName'];
$email=$_POST['email'];
$reemail=$_POST['reemail'];
if($email==$reemail){
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "YOUR DATA BASE NAME";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$conn->query("SET NAMES UTF8");
$sql = "SELECT id FROM info WHERE email='$email'";
$result = $conn->query($sql);
if ($result->num_rows == 0) {
$conn->query("INSERT INTO info (firstName,email) VALUES ('$firstName','$email')");
?>
<div class="submiting">Your information is submitted.</div>
<? } else { ?>
<div class="submiting">Your Email address is submitted before,plz
change it and try again.</div>
<?
}
$conn->close();
}else{?>
<div class="submiting">Your Email addresses does not match.</div>
<?}
?>
برای چک کردن ایمیل سمت کلاینت از جی کوئری استفاده می کنیم.
یه مثال ساده:
<form id="target" action="javascript:alert( 'success!' );" method="post">
Email: <input id='email' type='text'>
<br><br>
reEmail: <input id='reEmail' type='text'>
<br><br>
<input id='sub' type='submit'>
</form>
$(document).ready(function (){
$('#reEmail').focusout(function () {
email = $('#email').val();
reEmail = $('#reEmail').val();
if (email.length > 0)
{
if (reEmail == email)
{
$(this).css( "background-color", "#00ff00");
}
else
{
$(this).css( "background-color", "#ff0000");
}
}
else
{
$(this).css( "background-color", "#fff");
}
});
$('#target').submit(function () {
email = $('#email').val();
reEmail = $('#reEmail').val();
if (email == reEmail && email.length > 0)
{
alert('OK');
return;
}
alert('NO');
event.preventDefault();
});
});
میتونین با keyup هم reEmail رو پیاده سازی کنید.البته هنوز جا داره کارهای دیگم صورت بگیره و تمیز ترش کرد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .