آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

فرم ثبت نام (بخش چهارم فیلم های آموزشی)  [حل شد]

Mehrad  11 سال پیش  11 سال پیش
+1 0

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

$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();
?>


اما این کد درست کار نمیکنه
موارد مشابه این رو هم امتحان کردم ولی فایده نداشت
.

 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
JSONObject  11 سال پیش
+2 0

خیلی کارو سخت کردی
به نظرم بهتره چک کردن ایمیل دوم رو با جاوا اسکریپت انجام بدی

یعنی تو onclick  ِ دکمه ی submit چک کنی که اگه valueی دومی مساوی اولی نبود پیغام بده

0 0
جاوا اسکریپت سمت کلاینته و توسط کاربر غیر فعال میشه!!! (11 سال پیش)
پاسخ به سوال 
Mehrad  11 سال پیش
0 0

چطوری باید بهش دستور بدیم که مقدار وارد شده در 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();
?>

0 0
چرا این خط شرطی از پراپرتی استفاده کردی؟ $result->num_rows از چه کلاسی واسه دیتابیس استفاده میکنی؟ مقادیر تکست باکس با .val در جی کوئری گرفته میشه. بهتره php رو با js تا جایی که میتونی قاطی ننویسی. js واسه چک کردن مقادیر امن نیست چون اگه غیر فعال بشه توسط کاربر دیگه عمل نمیکنه. یعنی هم باید سمت کلاینت چک کنی که اگر مثلا مثل هم نبود دکمه سابمیت کار نکنه و هم باید در سمت سرور چک بشه.. (11 سال پیش)
0 0
الان کلا یه راه حل اساسی ارائه بدید برای انجام اینگار ، کدهاش رو هم بذارید! (11 سال پیش)
پاسخ به سوال 
محسن موحد  11 سال پیش
+1 0

خوب من الان فایل کدهای جلسه ی 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 بشن.مثلا چک بشن خالی هستن یا نه و آدرس ایمیل وارد شده فرمتش معتبر هست یا نه و ....

پاسخ به سوال 
Mehrad  11 سال پیش
0 0

 محسن جان ممنون ،
بالاخره انجامش دادم ؛البته کد من تفاوت هایی داره با کدی که شما نوشتی ، ولی نکته ی کلیدی درونش بود و من استفاده کردم.
کد رو قرار میدم تا سایر دوستان هم استفاده کنند ،
کار جالبی شد در کل.
این کد مربوط به فایل 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>

<?}
?>
0 0
if ($result->affected_rows > 0) این خط چک میکرد که داده مورد نظر ثبت شده که اگه ثبت شده بود مقدار 1 بر میگردوند.پس همیشه استفاده کنید. کد باگ sql injection داره. حتی اگه همین داده های کاربرو فقط اکو کنید باگ xss هم داره. باگ csrf هم داره. (11 سال پیش)
0 0
خیلی ممنون از راهنمایی شما. منم مشکلم حل شد. مرسی که کدت را اینجا گذاشتی. فقط یه چیزی اگر بخوایم کادر بعد از این که چک کردن صحیح بود سبز بشه باید چه کدی بنویسیم.؟ (11 سال پیش)
0 0
والا من تست کردم باگ نداشت (11 سال پیش)
0 0
چجوری تست کردین؟ ابن باگ ها با چشم دیده میشن نیاز به تست نیست. (11 سال پیش)
0 0
توی مرورگر دیگه (بصورت لوکال)، طبق آموزشی که استاد داد ، فقط این بخشش رو بجای کدهای استاد با این کدها اجرا کردم ، بدون مشکل اطلاعات وارد دیتابیس میشد ، و اون اخطارهایی که تنظیم کرده بودم رو هم (درصورت تکراری بودن ایمیل یا برار نبودن فیلدها) میداد. مشکلی نبود... (11 سال پیش)
0 0
این سه تا باگی که گفتمو هکر سوء استفاده میکنه (11 سال پیش)
0 0
مثلا شما این عبارتو داخل تکست باکس ایمیل و ری ایمیل بزارید: not an email' or 1=1# (11 سال پیش)
0 0
هدف من تست کردن این قضیه روی لوکال بود فقط ، وگرنه مشخصه کدی که من نوشتم امنیت نداره ، و حتما استاد توی فیلم ها روش های امن سازی فرم ها و ... رو توضح خواهند داد. (11 سال پیش)
0 0
اگه دنبال چیز یاد گرفتنی بجای این هدفاااایی که داری , همون اول بپرس راه حل چیه و من توو چند خط بگم هر سه تا باگ چطوری رفع میشن , نیاز به این همه کش دادن هم نبود. موفق باشید. (11 سال پیش)
0 0
من دنبال تامین امنیتش نبودم ، سوالمم توی پست اول تاپیک مطرح کرده بودم که جوابشو گرفتم ، شما بحث امنیت رو راه انداختی و کشش دادی.اگر میخواستی راه حل امنیت رو بگی میگفتی اگر نمیخواستی بگی دیگه انقدر لازم نبود بگی این باگو داره اون باگو نداره! (11 سال پیش)
0 0
اگه راه حل می خواستی کامل میگفتم...بهر حال من قصدم کمک بود ولی از همون اول درشت حرف زدی ... طبق نظر خودتون بهتره منتظر فیلم ها باشید , یکسال صبر کنید تا مطالب کم کم گفته بشه و یاد بگیری .البته امکانش نزدیک به صفره تمام گستردگیه php در یک کورس آموزشی بشه گنجوندش. (11 سال پیش)
0 0
به هر حال ما به روش تدریس استاد باور داریم و بر اساس همون زمانبندی هم پیش میریم ، البته متناسب با نیازمون هم به سورس های دیگه مراجعه و استفاده میکنیم. ضمن اینکه تا اینجایی که من فیلم ها رو دیدم "اصلا" هدف استاد این نیست که "تمام گستردگیPHP" رو یاد بدن ، و بارها گفتن که در حد نیاز از PHP استفاده میشه ، هر وقت هم به موارد بشتری نیاز بود از سورس های دیگه مثل اینترنت میشه استفاده کرد. (11 سال پیش)
0 0
صحبتام اشتباه برداشت نشه.در مورد استاد و تدریس حرفی نزدم.گفتم مسیر یادگیری هیچوقت نباید متوقف بشه تا سر فصل های بعدی بیاد.و این مطلبو خود استاد هم گفتن که تا جایی که وقت بشه ادامه میدن که اینهم طبیعیه , بخاطر گستردگیه مطالب. (11 سال پیش)
پاسخ به سوال 
محسن موحد  11 سال پیش
+1 0

برای چک کردن ایمیل سمت کلاینت از جی کوئری استفاده می کنیم.

یه مثال ساده:

 <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 رو پیاده سازی کنید.البته هنوز جا داره کارهای دیگم صورت بگیره و تمیز ترش کرد.

لینک دمو


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .