الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الكابتشا لاتعمل

بدأه terroristpc في 10 مايو 2012 · 6 رد · 800 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

عندى مشكلة فى الكابتشا وهي تخطى التحقق من الكابتشا عند الضغط على الارسال

ياليت تصححون لى الكود :S

<?php

include('../config.php');
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from form 

$myusername=addslashes($_POST['username']); 
$mypassword=md5($_POST['password']); 

$sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$active=$row['active'];

$count=mysql_num_rows($result);



// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
session_register("myusername");
$_SESSION['login_user']=$myusername;
header("location: index.php");
}
else 
{
$error="اسم المستخدم أو كلمة المرور خاطئة حاول مره اخرى ";
}
}
?>
<?php
session_start();

$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];

if(isset($_POST['Submit']))
{
$captcha=(int)$_POST['captcha'];	
if($captcha != $_SESSION['expect']
)
	$error='The captcha code is wrong!';


}
?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>تسجيل الدخول</title>

<style type="text/css">
body
{
font-family:Arial, Helvetica, sans-serif;
font-size:14px;
background-color:#bbb;

}

.box {

width:300px; 
border: solid 1px #d0e0ef; 
background-color:#eee;
margin:100px auto;	

}

.title {

background-color:#d0e0ef; 
color:#2f557c; 
padding:3px; 
text-align: center;


}


.submit
{
	width: 120px;
	padding: 2px;
	color:#2f557c;
	background:#d0e0ef;
	font-family: Arial,  Verdana, Helvetica, sans-serif;
	font-size: 16px;
	font-weight:bold;
	border: 1px solid #cecece;
	float:right;

}

.input
{
	width: 220px;
	padding: 6px;
	color:#bbb;
	direction:rtl;
	font-family: Arial,  Verdana, Helvetica, sans-serif;
	font-size: 13px;
	border: 1px solid #cecece;

}

.error {
font-size:13px; 
font-weight:bold;
color:#ff0000; 
margin-top:20px	

}

.post{
margin:30px	

}


.post b{
	margin-left:2px;
	color:#2f557c;
	font-size: 15px;
	font-weight:bold;
}
</style>
</head>
<div class="box">
<div class="title"><b>تسجيل الدخول</b></div>


<div class="post">

<form action="" method="post">
<input type="text" name="username" class="input" value="اسم المستخدم"/>
<br /><br />
<input type="password" name="password" class="input" value="كلمة المرور" />
<br/><br />


<label for="captcha"><?=$_SESSION['n1']?> + <?=$_SESSION['n2']?> =</label>
          <input type="text" class="" name="captcha" id="captcha" />

<input type="submit"  class="submit" value=" دخول "/><br />

</form>
<div class="error"><?php echo $error; ?></div>
</div>
</div>

</body>
</html>

تم تعديل هذه المشاركة بواسطة terroristpc في 10 مايو 2012 في 02:51

#2

نرجو إضافه الخطأ الذي يظهر لك

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#3

الخطأ انه يتم التنفيذ حتى لو كان ادخال الكابتشا خاطئ :S

#4

اهلا وسهلا بك

اخي عندك مشكلة في اسم الانبوت تبع الارسال من شان هيك لايمكنة ان يتحقق

<?php 

include('../config.php'); 
session_start(); 

if($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
// username and password sent from form  

$myusername=addslashes($_POST['username']);  
$mypassword=md5($_POST['password']);  

$sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'"; 
$result=mysql_query($sql); 
$row=mysql_fetch_array($result); 
$active=$row['active']; 

$count=mysql_num_rows($result); 



// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1) 
{ 
session_register("myusername"); 
$_SESSION['login_user']=$myusername; 
header("location: index.php"); 
} 
else  
{ 
$error="اسم المستخدم أو كلمة المرور خاطئة حاول مره اخرى "; 
} 
} 
?> 
<?php 
session_start(); 

$_SESSION['n1'] = rand(1,20); 
$_SESSION['n2'] = rand(1,20); 
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2']; 

if(isset($_POST['Submit'])) 
{ 
$captcha=(int)$_POST['captcha'];         
if($captcha != $_SESSION['expect']){


        $error='The captcha code is wrong!'; 
 }

} 
?> 



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>تسجيل الدخول</title> 

<style type="text/css"> 
body 
{ 
font-family:Arial, Helvetica, sans-serif; 
font-size:14px; 
background-color:#bbb; 

} 

.box { 

width:300px;  
border: solid 1px #d0e0ef;  
background-color:#eee; 
margin:100px auto;       

} 

.title { 

background-color:#d0e0ef;  
color:#2f557c;  
padding:3px;  
text-align: center; 


} 


.submit 
{ 
        width: 120px; 
        padding: 2px; 
        color:#2f557c; 
        background:#d0e0ef; 
        font-family: Arial,  Verdana, Helvetica, sans-serif; 
        font-size: 16px; 
        font-weight:bold; 
        border: 1px solid #cecece; 
        float:right; 

} 

.input 
{ 
        width: 220px; 
        padding: 6px; 
        color:#bbb; 
        direction:rtl; 
        font-family: Arial,  Verdana, Helvetica, sans-serif; 
        font-size: 13px; 
        border: 1px solid #cecece; 

} 

.error { 
font-size:13px;  
font-weight:bold; 
color:#ff0000;  
margin-top:20px  

} 

.post{ 
margin:30px      

} 


.post b{ 
        margin-left:2px; 
        color:#2f557c; 
        font-size: 15px; 
        font-weight:bold; 
} 
</style> 
</head> 
<div class="box"> 
<div class="title"><b>تسجيل الدخول</b></div> 


<div class="post"> 

<form action="" method="post"> 
<input type="text" name="username" class="input" value="اسم المستخدم"/> 
<br /><br /> 
<input type="password" name="password" class="input" value="كلمة المرور" /> 
<br/><br /> 


<label for="captcha"><?=$_SESSION['n1']?> + <?=$_SESSION['n2']?> =</label> 
          <input type="text" class="" name="captcha" id="captcha" /> 

<input type="submit"  class="submit" value=" دخول " name="Submit"/><br /> 

</form> 
<div class="error"><?php echo $error; ?></div> 
</div> 
</div> 

</body> 
</html>
#5

الله يعطيك العافيه اخوي ماقصرت

جربت الكود وبرضه نفس المشكله

#6

كيف نفس المشكلة !!!!

تظهر معك رسالة الخطاء تبع الكود نخبرك بان الكود غير صحيح ام يتخطى الكود ويدخل

تم تعديل هذه المشاركة بواسطة legendq في 11 مايو 2012 في 08:27

#7

تسلسل تنفيذ الشفرة لديك غير سليم. عملية توليد التحقق من المفترض أن تكون آخر خطوة ولكن تسلس التنفيذ لديك يجعلك تكتب فوق القيمة المحفوظة في الجلسة في كل مرّة. عدّلت ماكتابته ويعمل جيداً :

<?php 

//include('../config.php'); 
session_start();

$error  = "";   // defualt value is an empty string

if($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
    // username and password sent from form  

    /*
    $myusername = addslashes($_POST['username']);  
    $mypassword = md5($_POST['password']);  

    // هذا الكود عير آمن ومعرض للحقن. إستخدم بدلها : mysql_real_escape_string()

    $sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'"; 
    $result=mysql_query($sql); 
    $row=mysql_fetch_array($result); 
    $active=$row['active']; 

    $count=mysql_num_rows($result); 
     */

     //$count = 1;


    // If result matched $myusername and $mypassword, table row must be 1 row 
    /*
    if($count==1) 
    { 
    session_register("myusername"); 
    $_SESSION['login_user']=$myusername; 
    header("location: index.php"); 
    } 
    */


    if( isset($_POST["captcha"]) && isset($_SESSION["expect"])
            && isset($_POST["username"]) && isset($_POST["password"])) {

        $myusername = $_POST["username"];
        $mypassword = $_POST["password"];

        if( $_POST["captcha"] == $_SESSION["expect"] ) {
        // إتصل بقاعدة البيانات هنا كأخر خطوة كي تقلق من الإتصال بقاعدة البيانات وتحقق من إسم المستخدم وكلمة المرور
            if( $myusername == "admin" && $mypassword == "pass" ) {

                $error  = "مرحباً بكّ";
            }
            else { 

                $error  = "اسم المستخدم أو كلمة المرور خاطئة حاول مرة أخرى "; 
            }
        }

        else {
            $error      = "لم تحلّ الكابتشا";
        }
    }
} 
// أعد توليد كابتشا جديدة وإكتب فوق السابقة أو أنشئ واحدة إذا كان هذا أول دخول.

$_SESSION['n1']     = rand(1,20); 
$_SESSION['n2']     = rand(1,20); 
$_SESSION['expect'] = $_SESSION['n1'] + $_SESSION['n2']; 

?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>تسجيل الدخول</title> 

<style type="text/css"> 
body 
{ 
font-family:Arial, Helvetica, sans-serif; 
font-size:14px; 
background-color:#bbb; 

} 

.box { 

width:300px;  
border: solid 1px #d0e0ef;  
background-color:#eee; 
margin:100px auto;       

} 

.title { 

background-color:#d0e0ef;  
color:#2f557c;  
padding:3px;  
text-align: center; 


} 


.submit 
{ 
        width: 120px; 
        padding: 2px; 
        color:#2f557c; 
        background:#d0e0ef; 
        font-family: Arial,  Verdana, Helvetica, sans-serif; 
        font-size: 16px; 
        font-weight:bold; 
        border: 1px solid #cecece; 
        float:right; 

} 

.input 
{ 
        width: 220px; 
        padding: 6px; 
        color:#bbb; 
        direction:rtl; 
        font-family: Arial,  Verdana, Helvetica, sans-serif; 
        font-size: 13px; 
        border: 1px solid #cecece; 

} 

.error { 
font-size:13px;  
font-weight:bold; 
color:#ff0000;  
margin-top:20px  

} 

.post{ 
margin:30px      

} 


.post b{ 
        margin-left:2px; 
        color:#2f557c; 
        font-size: 15px; 
        font-weight:bold; 
} 
</style> 
</head> 
<div class="box"> 
<div class="title"><b>تسجيل الدخول</b></div> 


<div class="post"> 

<form action="" method="post"> 
<input type="text" name="username" class="input" value=""/> 
<br /><br /> 
<input type="password" name="password" class="input" value="" /> 
<br/><br /> 


<label for="captcha"><?= $_SESSION['n1'] ?> + <?= $_SESSION['n2'] ?> =</label> 
          <input type="text" class="" name="captcha" id="captcha" /> 

<input type="submit"  class="submit" value=" دخول " name="Submit"/><br /> 

</form> 
<div class="error"><?php echo $error; ?></div> 
</div> 
</div> 

</body> 
</html>

إنتبه لهذه الأخطاء :

ﻻتستخدم addslashes لأنها غير آمنة ومعرضة لحقن الإستعلام ,ثغرة! إستخدم بدلها mysql_real_escape_string.

إستخدم طريقة تجهيز الإستعلام فبدل أن تكتب شيء مثل :

<?php
    $result = $db->query("SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'");
    $row    = $db->fetch($result); 
?>

إستخدم , فهي آمن وأكثر تنظيم :

<?php
    $con    = $db->prepare("SELECT id FROM admin WHERE username = ? and ?");
    $db->bindParam(1, $myusername);
    $db->bindParam(2, $mypassword);
    $db->execute();
    $row    = $db->fetch($result); 
?>

أكثر مايتسبب ببطئ الموقع والضغط عليه هي عملية الإتصال بقاعدة البيانات. في الشفرة التي كتبتها ,لما إتصلت بقاعدة البيانات في البداية طالما لم تتأكّد بعد من أن الكابتشا وكل الخانات سليمة؟ سيكون إتصال بدون فائدة. دوماً إجعلها آخر خطوة تقوم بها عندما تتأكّد من أن كل شيء سليم.

حاول أن تنسّق طريقة كتابتك وإستخدم مفتاح الـTAB في لوحة المفاتيح , فكتابة :

if( isset($_POST["username"] && isset($_POST["password"]) ) {
    $username   = $_POST["username"];
    $password   = $_POST["password"];
    echo "Your username is " . strip_tags($username) . " and your password" . strip_tags($password);
}
else {
    echo "You've sent nothing";
}

أفضل وأسهل قراءة من :

if(isset($_POST["username"] && isset($_POST["password"]))
{
$username=$_POST["username"];
$password=$_POST["password"];
echo "Your username is ".strip_tags($username)." and your password".strip_tags($password);
}
else 
{
echo "You've sent nothing";
}
3

مواضيع مشابهة