PDA

View Full Version : سوال: جلوگیری از ورود اطلاعات تکراری و ناخواسته در دیتابیس



parsat26
پنج شنبه 09 بهمن 1393, 11:49 صبح
سلام
ممنون میشم کسی کمک کنه
توی کد پی اچ زیر میخوام کدی اضافه کنم که از ورود کاراکترهای ناخواسته و همچنین اطلاعات تکراری جلوگیری کنه


<?php
session_start();

$userCaptcha = strtoupper($_POST['captcha']);
if($_SESSION['captcha'] == $userCaptcha){



include('config.php');
if(isset($_POST['yahoo_id']))
{
$yahoo =mysql_real_escape_string($_POST['yahoo_id']) ;
$result = mysql_query('INSERT `tbl_id` (`yahoo_id`) VALUES ("'.$yahoo.'")') OR die(mysql_error());
if($result){
header('Location:index.php?submit=1');
}
else{
header('Location:index.php?submit=0');

}

}else{

header("Location:index.php?error=1");
}
}else{
header("Location:index.php?captcha=0");
}


?>
<?php
if(isset($_GET['submit']) and $_GET['submit']==1){

echo "<center style=\"color:Green\">آیدی شما با موفقیت ثبت شد</center>";
}elseif(isset($_GET['submit']) and $_GET['submit']==0){

echo "<center style=\"color:red\">متاسفانه ایمیل شما ثبت نشد , دوباره امتحان کنید</center>";

}elseif(isset($_GET['captcha']) and $_GET['captcha']==0){

echo "<center style=\"color:red\"> کد امنیتی وارد شده اشتباه می باشد </center>";

}
?>

parsat26
پنج شنبه 09 بهمن 1393, 12:10 عصر
منظورم از کاراکترهای ناخواسته > < " ' ? و چیزهایی شبیه اینهاست

mohamadali1374
پنج شنبه 09 بهمن 1393, 12:12 عصر
برای جلوگیری از کارکتر ناخواسته از کد
$pass = str_replace(";", "P", $pass);
این کد مقدار متغیر pass را میگیرد واگر در آن علامت ; باشد مثلا آن رابه P تغییر میرهد
در مورد سوال دوم یه دستور select بنویسد اگر آن مقدار در جدول موجود بود که خطا میگیرید در غیر اینصورت عمل insert را انجام میدهید

thacker
پنج شنبه 09 بهمن 1393, 12:58 عصر
میتونید از این تابع استفاده کنید :‌

function valid_input($input){
//xss Filter
$xss = array("(",")","*","~","+","-","_",".","\\,",":",";","?","@","[","/","|"," ","]","^","`","=","$");
$input = str_replace("$xss","\'\'","$input");
//SQL Injection Filter
$sqlinj = array(";","\'","-","/","\\*","\\.","/","xp_");
$input = str_replace($sqlinj,"\'\'",$input);
return $input;
}

parsat26
پنج شنبه 09 بهمن 1393, 13:38 عصر
برای جلوگیری از ثبت داده تکراری از چه کدی استفاده کنم؟

thacker
پنج شنبه 09 بهمن 1393, 13:48 عصر
ستون مربوطه رو توی دیتابیس unique تعریف کنید ...
قبل از ذخیره کردن اطلاعات هم میتونید با mysql_num_rows هم چک کنید که داده تکراری وارد دیتابیس نشه .

parsat26
پنج شنبه 09 بهمن 1393, 14:09 عصر
دوستان عزیز من از برنامه نویسی سردرنمیارم میشه یکی کدبالا رو که دادم برام با توضیحات دوستان ویرایش کنه
ممنون میشم

thacker
پنج شنبه 09 بهمن 1393, 14:51 عصر
کد شما رو ویرایش کردم ... یه بار خودتون چک کنید مشکلی وجود نداشته باشه ... ( اسم جدول دیتابیس و ستون ها رو خودتون تغییر بدید )

<?php
session_start();

$userCaptcha = strtoupper($_POST['captcha']);
if($_SESSION['captcha'] == $userCaptcha){

function valid_input($input){
//xss Filter
$xss = array("(",")","*","~","+","-","_",".","\\,",":",";","?","@","[","/","|"," ","]","^","`","=","$");
$input = str_replace("$xss","\'\'","$input");
//SQL Injection Filter
$sqlinj = array(";","\'","-","/","\\*","\\.","/","xp_");
$input = str_replace($sqlinj,"\'\'",$input);
return $input;
}

include('config.php');
if(isset($_POST['yahoo_id']))
{
$yahoo =mysql_real_escape_string(valid_input($_POST['yahoo_id'])) ;

$check = mysql_num_rows("SELECT yahoo_id WHERE yahoo_id = $yahoo LIMIT 1");

if($check > 0) {
header('Location:index.php?submit=3');
} else {
$result = mysql_query('INSERT INTO `table_name` (`yahoo_id`) VALUES ("'.$yahoo.'")') OR die(mysql_error());
}

if($result){
header('Location:index.php?submit=1');
}
else{
header('Location:index.php?submit=0');

}

}else{

header("Location:index.php?error=1");
}
}else{
header("Location:index.php?captcha=0");
}


?>
<?php
if(isset($_GET['submit']) and $_GET['submit']==1){

echo "<center style=\"color:Green\">آیدی شما با موفقیت ثبت شد</center>";
}elseif(isset($_GET['submit']) and $_GET['submit']==0){

echo "<center style=\"color:red\">متاسفانه ایمیل شما ثبت نشد , دوباره امتحان کنید</center>";

}elseif(isset($_GET['submit']) and $_GET['submit']==3){

echo "<center style=\"color:red\">متاصسفانه ایمیل وارد شده قبلا در سامانه ثبت شده است.</center>";

}elseif(isset($_GET['captcha']) and $_GET['captcha']==0){

echo "<center style=\"color:red\"> کد امنیتی وارد شده اشتباه می باشد </center>";

}
?>

parsat26
پنج شنبه 09 بهمن 1393, 15:25 عصر
کد شما رو ویرایش کردم ... یه بار خودتون چک کنید مشکلی وجود نداشته باشه ... ( اسم جدول دیتابیس و ستون ها رو خودتون تغییر بدید )

<?php
session_start();

$userCaptcha = strtoupper($_POST['captcha']);
if($_SESSION['captcha'] == $userCaptcha){

function valid_input($input){
//xss Filter
$xss = array("(",")","*","~","+","-","_",".","\\,",":",";","?","@","[","/","|"," ","]","^","`","=","$");
$input = str_replace("$xss","\'\'","$input");
//SQL Injection Filter
$sqlinj = array(";","\'","-","/","\\*","\\.","/","xp_");
$input = str_replace($sqlinj,"\'\'",$input);
return $input;
}

include('config.php');
if(isset($_POST['yahoo_id']))
{
$yahoo =mysql_real_escape_string(valid_input($_POST['yahoo_id'])) ;

$check = mysql_num_rows("SELECT yahoo_id WHERE yahoo_id = $yahoo LIMIT 1");

if($check > 0) {
header('Location:index.php?submit=3');
} else {
$result = mysql_query('INSERT INTO `table_name` (`yahoo_id`) VALUES ("'.$yahoo.'")') OR die(mysql_error());
}

if($result){
header('Location:index.php?submit=1');
}
else{
header('Location:index.php?submit=0');

}

}else{

header("Location:index.php?error=1");
}
}else{
header("Location:index.php?captcha=0");
}


?>
<?php
if(isset($_GET['submit']) and $_GET['submit']==1){

echo "<center style=\"color:Green\">آیدی شما با موفقیت ثبت شد</center>";
}elseif(isset($_GET['submit']) and $_GET['submit']==0){

echo "<center style=\"color:red\">متاسفانه ایمیل شما ثبت نشد , دوباره امتحان کنید</center>";

}elseif(isset($_GET['submit']) and $_GET['submit']==3){

echo "<center style=\"color:red\">متاصسفانه ایمیل وارد شده قبلا در سامانه ثبت شده است.</center>";

}elseif(isset($_GET['captcha']) and $_GET['captcha']==0){

echo "<center style=\"color:red\"> کد امنیتی وارد شده اشتباه می باشد </center>";

}
?>

خیلی ممنون دوست من لطف کردی ولی وقتی ایدی رو میخوام ثبت کنم این ارور میاد

Warning: mysql_num_rows() expects parameter 1 to be resource, string given in /home/akhtar2/domains/2ads.ir/public_html/yahoo/insert.php on line 22 Table 'akhtar2_yahoo.table_name' doesn't exist

چکارکنم:گریه:

thacker
پنج شنبه 09 بهمن 1393, 15:30 عصر
از اسم جدولتون داره ایراد میگیره ... میگه وجود نداره همچین جدولی

parsat26
پنج شنبه 09 بهمن 1393, 15:34 عصر
lمرسی اون مشکل حل شد ولی الان هرچی ایدی تکراری ثبت میکنم، بدون هیچ اروری ثبت میشه
جلوگیری نمیکنه از ثبت ایدی تکراری

thacker
پنج شنبه 09 بهمن 1393, 15:55 عصر
آیدی جداول رو باید روی AI تنظیم کنید توی دیتابیس تا خودش بصورت خودکار و غیرتکراری آیدی رو ذخیره کنه

parsat26
پنج شنبه 09 بهمن 1393, 16:41 عصر
وقتی میخوام قسمت ایدی رو روی AI تنظیم کنم این اروز میاد
#1063 - Incorrect column specifier for column 'yahoo_id'

thacker
پنج شنبه 09 بهمن 1393, 16:42 عصر
آیدی های قبلی رو یکبار به ترتیب از ۱ شماره گذاری کنید یا کل ستون ها رو یک بار پاک کنید درست میشه .

parsat26
پنج شنبه 09 بهمن 1393, 19:23 عصر
ایدی هارو یکبار پاک کردم ولی بازم نشد توی استراکچر تیک Ai رو بزنم دوباره همون ارور رو میده یبار هم شماره گذاری رو از 1 مرتب کردم بازم نشد:گریه:
راهی نیست که اون کدی که نوشتین خودش جلوگیری کنه از ورود ایدی تکراری؟؟؟؟؟؟؟

parsat26
جمعه 10 بهمن 1393, 10:06 صبح
کسی میتونه کمک کنه مشکل ما حل بشه:گریه:

hamedarian2009
جمعه 10 بهمن 1393, 10:22 صبح
الان مشکلتون چیه؟

parsat26
جمعه 10 بهمن 1393, 11:10 صبح
کد شما رو ویرایش کردم ... یه بار خودتون چک کنید مشکلی وجود نداشته باشه ... ( اسم جدول دیتابیس و ستون ها رو خودتون تغییر بدید )

<?php
session_start();

$userCaptcha = strtoupper($_POST['captcha']);
if($_SESSION['captcha'] == $userCaptcha){

function valid_input($input){
//xss Filter
$xss = array("(",")","*","~","+","-","_",".","\\,",":",";","?","@","[","/","|"," ","]","^","`","=","$");
$input = str_replace("$xss","\'\'","$input");
//SQL Injection Filter
$sqlinj = array(";","\'","-","/","\\*","\\.","/","xp_");
$input = str_replace($sqlinj,"\'\'",$input);
return $input;
}

include('config.php');
if(isset($_POST['yahoo_id']))
{
$yahoo =mysql_real_escape_string(valid_input($_POST['yahoo_id'])) ;

$check = mysql_num_rows("SELECT yahoo_id WHERE yahoo_id = $yahoo LIMIT 1");

if($check > 0) {
header('Location:index.php?submit=3');
} else {
$result = mysql_query('INSERT INTO `table_name` (`yahoo_id`) VALUES ("'.$yahoo.'")') OR die(mysql_error());
}

if($result){
header('Location:index.php?submit=1');
}
else{
header('Location:index.php?submit=0');

}

}else{

header("Location:index.php?error=1");
}
}else{
header("Location:index.php?captcha=0");
}


?>
<?php
if(isset($_GET['submit']) and $_GET['submit']==1){

echo "<center style=\"color:Green\">آیدی شما با موفقیت ثبت شد</center>";
}elseif(isset($_GET['submit']) and $_GET['submit']==0){

echo "<center style=\"color:red\">متاسفانه ایمیل شما ثبت نشد , دوباره امتحان کنید</center>";

}elseif(isset($_GET['submit']) and $_GET['submit']==3){

echo "<center style=\"color:red\">متاصسفانه ایمیل وارد شده قبلا در سامانه ثبت شده است.</center>";

}elseif(isset($_GET['captcha']) and $_GET['captcha']==0){

echo "<center style=\"color:red\"> کد امنیتی وارد شده اشتباه می باشد </center>";

}
?>

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

hamedarian2009
جمعه 10 بهمن 1393, 11:37 صبح
خط 22 رو اینجوری اصلاح کن


$result = mysql_query("SELECT `yahoo_id` WHERE `yahoo_id` = '$yahoo' LIMIT 1");
$check = mysql_num_rows($result);

parsat26
جمعه 10 بهمن 1393, 12:01 عصر
ممنون از راهنماییت، اصلاح کردم ولی بازم همون جوریه:ناراحت:

hamedarian2009
جمعه 10 بهمن 1393, 12:34 عصر
مقدار رو هم باید داخل تک کوتیشن بزارین . پست رو اصلاح کردم دوباره تست کنید

parsat26
جمعه 10 بهمن 1393, 13:23 عصر
ممنون ولی متاسفانه بازم همونطوریه:ناراحت:

parsat26
شنبه 11 بهمن 1393, 09:22 صبح
کسی میتونه کمک کنه کد جلوگیری از ثبت ایدی تکراری که دوستان نوشتن کارکنه:گریه:

thacker
شنبه 11 بهمن 1393, 11:33 صبح
لطفا ساختار جدولتون رو پیوست کنید ...

parsat26
شنبه 11 بهمن 1393, 11:57 صبح
ممنون دوست من
اینم ساختار جدول

128059

thacker
شنبه 11 بهمن 1393, 12:02 عصر
شما منظورتون از آیدی تکراری کدومه ؟‌ YahooID یا Id ؟

parsat26
شنبه 11 بهمن 1393, 12:07 عصر
YahooID میخوام توسط کاربرهای سایت تکراری ثبت نشه

thacker
شنبه 11 بهمن 1393, 12:23 عصر
آخ آخ آخ ببخشید ... من توی خط ۲۲ یک اشتباهی کردم ... خط ۲۲ رو تغییر بدید :

$check = mysql_num_rows("SELECT yahoo_id FROM tbl_id WHERE yahoo_id = $yahoo LIMIT 1");

parsat26
شنبه 11 بهمن 1393, 12:33 عصر
مرسی دوست من ولی بازم تکراری ثبت میشه و ارور نمیده:ناراحت:

hamedarian2009
شنبه 11 بهمن 1393, 15:05 عصر
توی سلکتی که شما نوشتین اسم جدول رو نیاورده بودین و منم حواسم نبود اینو یک بار دیگه تست کنید


$result = mysql_query("SELECT `yahoo_id` FROM `tbl_id` WHERE `yahoo_id` = '$yahoo'");
$check = mysql_num_rows($result);