۱۰ arman najafi
تولید رشته تصادفی
جامعه پی اچ پی ایجاد شده در ۱۳ مرداد ۱۴۰۱

سلام وقت بخیر

من یک کدی نوشتم که باهاش یکسری رشته تصادفی تولید میشه و یک input گذاشتم که کاربر اون رشته رو وارد کنه واگه رشته وارد شده با رشته تولید شده یکی بود yes و در غیر این صورت no بزنه

اما چون بعد از زدن دکمه send صفحه رفرش میشه رشته وارد شده با رشته تولید شده جدید بعد از رفرش مقایسه میشه ، همیشه جواب no هستش

چطور میشه درستش کرد؟


    
" echo $_SERVER['PHP_SELF'] ?>" method="post">         "text" name="strpass">         "submit" name="btnpass" value="send">     form> body> html> $str = "lfkslkdfdscl3464uy903t390twejklxcjds"; $substr = str_shuffle(substr($str, random_int(1, 36), random_int(1, 36))); echo $substr; if (isset($_POST['btnpass'])) {     echo "substr=" . $substr;     echo " ";     echo "fild=" . $_POST['strpass'];     if ($substr == $_POST['strpass']) {         echo "yes ";     } else {         echo " no";     } } ?>

سلام دوست عزیز

رشته تولید شده رو در سشن کاربر ذخیره کنید

موفق باشید ?

محمد گازری ۱۳ مرداد ۱۴۰۱، ۱۹:۴۳

به این صورت؟

چون بازم همون مقایسه اشتباهو انجام میده!


session_start();
$str = "abcdefghijklmnopqrstuvwxyz1234567890";
// echo strlen($str);
$_SESSION['char'] = str_shuffle(substr($str, random_int(1, 36), random_int(1, 36)));
echo $_SESSION['char'];
?>
html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form-randomtitle>
head>
<body>
    <form action=" echo $_SERVER['PHP_SELF'] ?>" method="post">
        <input type="text" name="strpass">
        <input type="submit" name="btnpass" value="send">
    form>
body>
html>

if (isset($_POST['btnpass'])) {
    // echo "substr=" . $substr;
    // echo "
";
    // echo "fild=" . $_POST['strpass'];     if ($_SESSION['char'] == $_POST['strpass']) {         echo "Done";     } else {         echo "error";     } } // session_destroy(); ?>
arman najafi ۱۳ مرداد ۱۴۰۱، ۲۱:۴۵

دلیلش اینه که شما هی دارید دوباره مقدار سشن رو بازنویسی میکنید

باید چک کنید اگر سشن مقدار نداشت بهش مقدار بدین!

میتونید از تابع empty استفاده کنید

موفق باشید ?

محمد گازری ۱۴ مرداد ۱۴۰۱، ۰۴:۲۰

خب من میخوام مقدار سشن تغییر کنه و هر سری مقدار جدید داشته باشه اما رشته وارد شده توسط کاربر با رشته تولید شده قبلی مقایسه بشه

کپچا طوری میخوام باشه

arman najafi ۱۴ مرداد ۱۴۰۱، ۰۶:۵۲

خب هدفتون اشتباهه!!

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

اگر قرار باشه با هر درخواست تغییر کنه که چه کاریه بذاریدش داخل سشن!!

محمد گازری ۱۴ مرداد ۱۴۰۱، ۰۷:۰۹

خب پیشنهاد شما چی هستش که این رشته تولید شده مثل یک کپچا عمل کنه و مقدار وارد شده با مقدار تولید شده قبلی مقایسه بشه؟

arman najafi ۱۴ مرداد ۱۴۰۱، ۰۷:۱۶

همونطور که عرض کردم باید داخل کدتون به این شکل عمل کنید

۱. زمانی که ریکوستی میاد چک میکنید که اگر سشن توکن مقداری نداشت مقدار دهی بشه

۲. مقدار توکن رو با مقدار ورودی کاربر چک کنید اگر برابر بود در نهایت و در آخر برنامه سشن توکن رو unset میکنید

موفق باشید ?

محمد گازری ۱۴ مرداد ۱۴۰۱، ۰۷:۳۵

سلام وقت بخیر

ممنون از شما برنامه کار میکنه منتها یک باگ داره، اونم اینکه وقتی دفعه اول وارد صفحه میشی هیچ رشته ای نیست که تا کابر اونو ببینه و حتما باید یکبار ریکوئست فرستاده بشه تا بشه برای بار دوم رشته رو دید و رشته تولید شده را وارد کرد ، اگه قبل شرط isset اونو بذاریم دوباره به همون مشکل‌های قبلی میخوریم

برای رفع این مشکل میشه راهنمایی کنید؟

سپاس از وقتی که میذارید


session_start();
$str = "abcdefghijklmnopqrstuvwxyz1234567890";
// echo strlen($str);
echo $_SESSION['char2'] = str_shuffle(substr($str, random_int(1, 36), random_int(1, 36)));
?>
html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form-randomtitle>
head>
<body>
    <form action=" echo $_SERVER['PHP_SELF'] ?>" method="post">
        <input type="text" name="strpass">
        <input type="submit" name="btnpass" value="send">
    form>
body>
html>

if (isset($_POST['btnpass'])) {
    if (empty($_SESSION['char'])) {
        $_SESSION['char'] = str_shuffle(substr($str, random_int(1, 36), random_int(1, 36)));
        // echo $_SESSION['char'];
    }
    if ($_SESSION['char'] == $_POST['strpass']) {
        echo "done
"
;         session_unset();         header("math-function.php");     } else {         session_unset();         echo "eror
 "
;         $_SESSION['char'] = str_shuffle(substr($str, random_int(1, 36), random_int(1, 36)));         echo $_SESSION['char'];     } } ?>
arman najafi ۱۴ مرداد ۱۴۰۱، ۲۲:۰۰

سلام مجدد

حس می‌کنم یه برنامه ساده رو الکی دارید پیچیده می‌کنید

با توجه به توضیحی که دادید من متوجه سوال و مشکلتون نشدم

لطفا اگر هنوز سوالی مونده کدتون رو زیپ و پیوست کنید سپس به شکل کامل عملکرد برنامتون بعلاوه مشکل رو توضیح بدین

بهترین پاسخ
محمد گازری ۱۵ مرداد ۱۴۰۱، ۰۴:۵۶

سلام مشکل برطرف شد

ممنون از شما


arman najafi ۱۵ مرداد ۱۴۰۱، ۱۱:۰۲