मैं अपनी टेबल पर ट्रेल नाम की एक प्रक्रिया लिखना चाहता हूं जहां सभी लेनदेन संबंधित वैध लॉगिन प्रयासों और अमान्य लॉगिन प्रयासों को संग्रहीत करते हैं। मैं गणना करना चाहता हूं कि क्या एक ही उपयोगकर्ता 5 बार अमान्य प्रयास के साथ प्रयास कर रहा है तो यह 5 मिनट के लिए अवरुद्ध हो जाएगा।

मैं इस क्वेरी का उपयोग कर रहा हूं

"select count(*) from trail where username='$username' and date='$todaydate'"
if($count>5)
{
//redirect to blockpage
}
else
{
//check for password and

//redirect to dashboard
}

आउटपुट:

ट्रेल टेबल डेटा

date    Userid  Blocktime   Validlogin
--------------------------------------
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc 26-08-2019 12:04:08 0
26-08-2019  Abc Null    1
26-08-2019  Abc Null    0
26-08-2019  Abc 26-08-2019 12:09:08 0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc 26-08-2019 12:13:00 0

जब मैंने उपरोक्त क्वेरी का उपयोग किया तो उसके बाद केवल पहले पांच लेनदेन के लिए इसका काम उस उपयोगकर्ता के पुराने लेनदेन की गणना करेगा, और ब्लॉक समय को अपडेट करेगा

टेबल संरचना

date    Userid  Blocktime   Validlogin
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc 26-08-2019 12:04:08 0
26-08-2019  Abc Null    1
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc Null    0
26-08-2019  Abc 26-08-2019 12:04:08 0

असल में मैं संग्रहीत प्रक्रिया का उपयोग कर यह तालिका संरचना चाहता हूं

1
sumit kundan 26 अगस्त 2019, 19:16

1 उत्तर

सबसे बढ़िया उत्तर

यह वही करेगा जो आपको चाहिए। इसका एक कार्य एक प्रक्रिया नहीं है, लेकिन प्रक्रिया कुछ भी वापस नहीं कर सकती है, इसलिए शायद आप जो चाहते हैं वह नहीं।

CREATE OR REPLACE FUNCTION testfunc(
                                        p_username VARCHAR(64)
                                    ) RETURNS BOOLEAN
    LANGUAGE plpgsql
AS $$
DECLARE
        l_attempts integer;
BEGIN

        SELECT COUNT(*)
        INTO l_attempts
        FROM trail
        WHERE 1=1
        AND user_name = p_username
        AND log_time >= now()::date;


        IF l_attempts > 5 THEN
                RETURN TRUE;
        ELSE
                RETURN FALSE;
        END IF;

END;
$$;

PHP में इस फ़ंक्शन को कॉल करें और यदि यह सही है तो उपयोगकर्ता को लॉग इन करने से रोक दिया जाना चाहिए।

select testfunc('sumituser');
0
BlueIris 27 अगस्त 2019, 00:40