Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

php चर के साथ नहीं गुजर रहा है

एचटीएमएल में कुछ त्रुटियां हैं और कैंपसाइट्स की खोज के लिए इस्तेमाल किया जाने वाला फॉर्म वास्तव में कोई भी डेटा सबमिट नहीं करता है, संभवतः एचटीएमएल में कुछ त्रुटियों के कारण। एक ul तत्व में li हो सकता है केवल बच्चों के रूप में तत्व - लेकिन वे li तत्वों में अन्य सामग्री हो सकती है (आमतौर पर इस मामले में आईएमओ करने का सबसे अच्छा तरीका नहीं है) और किसी भी प्रकार के इनपुट तत्वों में नाम विशेषता और आम तौर पर एक मूल्य होना चाहिए। आरक्षण फॉर्म के मामले में fire ,electric और sewer 1 के मान के साथ इस तरह नामित किया जाना चाहिए (पिछले प्रश्न का संदर्भ लें)। दिनांक चयनकर्ताओं के नाम होने चाहिए, इसलिए या तो आईडी के बजाय या साथ ही, उन्हें startdate नाम दें और enddate चूंकि PHP स्क्रिप्ट उन्हें POST सरणी में उम्मीद कर रही है।

यदि फॉर्म ने सफलतापूर्वक डेटा जमा किया है और एसक्यूएल क्वेरी ठीक है, तो परिणाम कहां दिखाई देंगे? मैं देख सकता हूं कि फ़ॉर्म की क्रिया includes/reserve.inc.php है जो कोड का दूसरा भाग है (PHP) लेकिन वह किसी भी सामग्री को आउटपुट नहीं करता है।

विभिन्न प्रपत्र तत्वों में विशेषताओं को जोड़ने के लिए ब्राउज़र में HTML को संपादित करना और फॉर्म जमा करने से पहले उनके मूल्यों को बदलने से लाइव पेज पर निम्नलिखित POST पैरामीटर प्राप्त हुए...

startdate=01%2F03%2F2018&enddate=01%2F17%2F2018&fire=1&electric=1&sewer=1&submit1=

जबकि इससे पहले केवल submit1 लग रहा था। हालांकि अभी भी कोई परिणाम वापस नहीं भेजा गया था।

जैसा कि आपके पास पहले से ही jQuery है विभिन्न कार्यों के लिए पृष्ठ पर शायद बैकएंड PHP स्क्रिप्ट पर डेटा पोस्ट करने के लिए AJAX का उपयोग करना और वर्तमान पृष्ठ पर HTML सामग्री जोड़ने के लिए कॉलबैक का उपयोग करना होगा? निश्चित रूप से शायद सोचने के लिए कुछ है।

<?php
    @session_start();
    require_once("includes/dbh.inc.php");
?>

<!DOCTYPE html>
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script>

            $(document).ready(function(){
              $('#login-trigger').click(function(){
                $(this).next('#login-content').slideToggle();
                $(this).toggleClass('active');

                if ($(this).hasClass('active')) $(this).find('span').html('&#x25B2;')
                  else $(this).find('span').html('&#x25BC;')
                })
            });

            $(document).ready(function(){
              $('#reserve-trigger').click(function(){
                $(this).next('#reserve-content').slideToggle();
                $(this).toggleClass('active');
                })
            });

            $('#reserve-trigger').on('focusout', function () {
              $(this).toggleClass('active');
            });

            $('#login-trigger').on('focusout', function () {
              $(this).toggleClass('active');
            });
        </script>
        <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
        <script>
            $(document).ready(function() {  $("#startdate").datepicker();  });
            $(document).ready(function() {  $("#enddate").datepicker();  });
        </script>
        <link rel="stylesheet" href="./css/style.css">
    </head>
    <body>
        <header>
            <div class='container'>
                <div id='branding'>
                    <h1><span class='highlight'>Whispering</span> Winds Park</h1>
                </div>
                <nav>
                    <ul>
                        <li class='current'><a href='index.php'>Home</a></li>
                        <li><a href='mission.php'>Our Mission</a></li>
                        <li><a href='donate.php'>Donate</a></li>
                        <li><a id='reserve-trigger' href='#'>Camping</a>
                            <div id='reserve-content' tabindex='-1'>

                                <form action='includes/reserve.inc.php' method='POST'>
                                    <fieldset>
                                        <!--

                                            child elements of a `ul` should be `li` only
                                            so you required a few more `<li></li>` around
                                            certain items here

                                            Form input elements require a name attribute and a type for the datepickers

                                        -->
                                        <ul>
                                            <li><input type='text' id='startdate' name='startdate' placeholder='Start Date' /></li>
                                            <li><input type='text' id='enddate' name='enddate' placeholder='End Date'/></li>
                                            <!--

                                                The checkboxes require a name attribute otherwise they will not appear
                                                in the POST array data. Set the value to `1` as it is a bit stored in 
                                                the db anyway

                                            -->
                                            <li><label for='fire'>Fire Pit: </label><input type='checkbox' name='Fire' value=1></li>
                                            <li><label for='electric'>Electricity: </label><input type='checkbox' name='Electric' value=1></li>
                                            <li><label for='sewer'>Sewage: </label><input type='checkbox' name='Sewer' value=1></li>
                                            <li><button type='submit' class='button3' name='submit1'>Find a Reservation</button></li>
                                        </ul>
                                    </fieldset>
                                </form>

                            </div>
                        </li>

                        <!-- /*login button*/ -->
                        <?php
                            if( isset( $_SESSION["u_uid"] ) ) {
                                echo '
                                <li>
                                    <form action="includes/logout.inc.php" method="POST">
                                        <button type="submit" class="button_1" name="Submit">Logout</button>
                                    </form>
                                </li>';

                            } else {

                                echo
                                '<li id="login">
                                    <a id="login-trigger" href="#">
                                        <button class="button_1">Log in <span>▼</span></button>
                                    </a>
                                    <div id="login-content" tabindex="-1">
                                        <form action="includes/login.inc.php" method="POST">
                                            <fieldset id="inputs">
                                                <input type="text" name="uid" placeholder="Username" required>
                                                <input type="password" name="pwd" placeholder="Password" required>
                                                <button type="submit" class="button3" name="Submit">Log In</button>
                                            </fieldset>
                                        </form>
                                    </div>
                                </li>
                                <li id="signup">
                                    <a href="signup.php"><button class="button_1">Sign up</button></a>
                                </li>';
                            }
                            if( isset( $_SESSION["u_admin"] ) ) {
                                echo '
                                <li id="signup">
                                  <a href="admin.php"><button class="button_1">Admin</button></a>
                                </li>';
                            }
                        ?>
                  </ul>
                </nav>
            </div>
        </header>
    </body>
</html>

बैकएंड स्क्रिप्ट पर आगे बढ़ते हुए।

क्या आपके पास campsite . नाम की टेबल हैं और campsites ? sql स्टेटमेंट में सभी एम्बेडेड वैरिएबल होते हैं, जो mysqli_real_escape_string के उपयोग के बावजूद होते हैं। , आपके कोड को SQL इंजेक्शन के लिए संभावित रूप से असुरक्षित छोड़ देता है, इसलिए आपको prepared statements . का उपयोग करना चाहिए जब भी आप उपयोगकर्ता द्वारा प्रदत्त इनपुट का उपयोग कर रहे हों। यह सिर्फ एक क्षेत्र लेता है जिसका उपयोग पूरे सिस्टम से समझौता करने के लिए किया जा सकता है! मैं वहां जो कुछ चल रहा था उसके साथ कुछ तर्कों का पालन नहीं कर सका (शायद अभी तक पर्याप्त कैफीन नहीं है) इसलिए निम्नलिखित निशान व्यापक हो सकते हैं

<?php
    session_start();

    /* Prevent direct access to this script in the browser */
    if ( realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {

        /* could send a 403 but Not Found is probably better */
        header( 'HTTP/1.0 404 Not Found', TRUE, 404 );
        die( header( 'location: /index.php' ) );
    }

    if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['submit1'], $_POST['startdate'], $_POST['enddate'], $_POST['fire'], $_POST['electric'], $_POST['sewer'] ) ) {

        if ( empty( $_POST['startdate'] ) || empty( $_POST['enddate'] ) ) {
            exit( header( 'Location: ../index.php?index=empty_dates' ) );
        }


        /* results from search query will be stored in this array for later use */
        $output=array();

        require_once('dbh.inc.php');

        /*
            Do startdate and enddate need to be session variables???
        */
        $startdate = filter_input( INPUT_POST,'startdate',FILTER_SANITIZE_SPECIAL_CHARS );
        $enddate = filter_input( INPUT_POST,'enddate',FILTER_SANITIZE_SPECIAL_CHARS );
        $fire = filter_var( filter_input( INPUT_POST,'fire', FILTER_SANITIZE_NUMBER_INT ), FILTER_VALIDATE_INT );
        $electric = filter_var( filter_input( INPUT_POST,'electric', FILTER_SANITIZE_NUMBER_INT ), FILTER_VALIDATE_INT );
        $sewer = filter_var( filter_input( INPUT_POST,'sewer', FILTER_SANITIZE_NUMBER_INT ), FILTER_VALIDATE_INT );

        /*
            Dates from the DatePicker are in mm/dd/yyyy
            but typically we would want to use yyyy/mm/dd
            in the database.
        */
        $startdate=DateTime::createFromFormat( 'm/d/Y', $startdate )->format('Y-m-d');
        $enddate=DateTime::createFromFormat( 'm/d/Y', $enddate )->format('Y-m-d');



        if( $fire > 1 or $fire < 0 or is_string( $fire ) ) $fire=0;
        if( $electric > 1 or $electric < 0 or is_string( $electric ) ) $electric=0;
        if( $sewer > 1 or $sewer < 0 or is_string( $sewer ) ) $sewer=0;


        $sql='select `site_id`,`uid`,`startdate`,`enddate`,`s_price` from `campsite` 
                where `water`=? and `fire`=? and `electric`=? and `site_id` not in ( 
                    select `site_id` 
                    from `reservation` 
                    where `startdate` >= ? and `startdate` <= ?
                )';

        $stmt=$conn->prepare( $sql );
        if( $stmt ){

            $stmt->bind_param('iiiss', $sewer, $fire, $electric, $startdate, $enddate );
            $result = $stmt->execute();
            $rows = $result->num_rows;

            if( $result && $rows > 0 ){

                $stmt->store_result();
                $stmt->bind_result( $id, $uid, $start, $end, $price );

                while( $stmt->fetch() ){
                    $output[]=array(
                        'site_id'   =>  $id,
                        'uid'       =>  $uid,
                        'startdate' =>  $start,
                        'enddate'   =>  $end,
                        's_price'   =>  $price
                    );
                }
                $stmt->free_result();
                $stmt->close();
                $conn->close();

                /* 
                    Now we should have an array with the recordset data from the search
                    Depending upon form submission method ( standard or ajax ) you need to
                    do something with that data. Typically you would let the user know the
                    results of the search ( otherwise what is the point of letting them search? )

                    So, you could format the results here as HTML or send back json etc
                */
                foreach( $output as $index => $site ){
                    echo "
                    <pre>
                        {$site['site_id']}
                        {$site['uid']}
                        {$site['startdate']}
                        {$site['enddate']}
                        {$site['s_price']}
                    </pre>";
                }

            } else {
                exit( header('Location: /index.php?error=no_available_camps') );
            }
        } else {
            echo "Failed to prepare sql query";
        }
    }
?>
"; } } और {बाहर निकलें (हेडर ('स्थान:/index.php?error=no_available_camps')); }} और {गूंज "एसक्यूएल क्वेरी तैयार करने में विफल"; } }?>

वहाँ अन्य sql स्टेटमेंट थे, लेकिन जैसा कि मैंने कहा था कि मैं तर्क का काफी पालन नहीं कर सकता, इसलिए उपरोक्त सबसे अधिक अपूर्ण/गलत है, लेकिन कम से कम तैयार बयानों के साथ थोड़ी मदद करनी चाहिए।

अन्य बिंदु

campground.php . पर आपके पास एक हैंडल न की गई त्रुटि है पृष्ठ जो प्रकट करता है

includes/reserve.php और /reserve.php दोनों एक 404-Not Found yield उत्पन्न करते हैं त्रुटि

शायद एक .htaccess . का उपयोग करें images . के भीतर फ़ाइल करें निर्देशिका हॉटलिंकिंग या निर्देशिका ब्राउज़िंग को रोकने के लिए।

वहाँ कुछ आश्चर्यजनक छवियां हैं, लेकिन कुछ, ईमानदार होने के लिए, बिल्कुल विशाल हैं और अधिकांश लोगों के पास 3.7Mb jpg डाउनलोड करने वाले तेज़ ब्रॉडबैंड होने के बावजूद, HTML प्रवाह के हिस्से के रूप में कुछ हद तक धीमा हो जाता है - इसलिए शायद कुछ छवि अनुकूलन एक अच्छा होगा विचार भी। उसने कहा - मुझे खुद इस जगह पर जाना अच्छा लगेगा!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही सर्वर पर दो mysql डेटाबेस में क्वेरी करने का प्रदर्शन?

  2. डेटाबेस में चेकबॉक्स मान सम्मिलित करना

  3. मैं MySQL में किसी फ़ील्ड से केवल पहला विशिष्ट मिलान कैसे चुन सकता हूं?

  4. डालने के दौरान धर्मत्यागी (Mysql)

  5. मैं एक MySQL डेटाबेस में संभावित मान कैसे प्राप्त कर सकता हूं?