Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

php không truyền theo các biến

HTML có một vài lỗi và biểu mẫu được sử dụng để tìm kiếm địa điểm cắm trại không thực sự gửi bất kỳ dữ liệu nào, rất có thể do một số lỗi trong HTML. A ul phần tử có thể có li phần tử chỉ là phần tử con - nhưng những phần tử li đó các phần tử có thể có nội dung khác (thường không phải là cách tốt nhất để làm điều đó IMO trong trường hợp này) và các phần tử đầu vào của biểu mẫu thuộc bất kỳ loại nào cũng phải có thuộc tính tên và nói chung là một giá trị. Trong trường hợp của biểu mẫu đặt chỗ fire , electricsewer nên được đặt tên như vậy với giá trị là 1 (tham khảo câu hỏi trước). Bộ chọn ngày cần phải có tên, vì vậy thay vì ID hoặc cũng như đặt tên cho chúng là startdateenddate vì tập lệnh php đang mong đợi chúng trong mảng ĐĂNG.

Nếu biểu mẫu đã gửi dữ liệu thành công và truy vấn sql chạy OK, kết quả sẽ xuất hiện ở đâu? Tôi có thể thấy rằng hành động của biểu mẫu là includes/reserve.inc.php là phần thứ hai của mã (PHP) nhưng không xuất ra bất kỳ nội dung nào.

Việc chỉnh sửa HTML trong trình duyệt để thêm các thuộc tính vào các phần tử biểu mẫu khác nhau và thay đổi giá trị của chúng trước khi gửi biểu mẫu mang lại các thông số POST sau trên trang trực tiếp ...

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

Trong khi trước đó chỉ có submit1 đã xuất hiện. Tuy nhiên vẫn không có kết quả nào được gửi lại.

Như bạn đã có jQuery trên trang cho các tác vụ khác nhau, có lẽ điều cần làm là sử dụng ajax để ĐĂNG dữ liệu lên tập lệnh PHP phụ trợ và sử dụng lệnh gọi lại để thêm nội dung HTML vào trang hiện tại? Chắc chắn có điều gì đó cần suy nghĩ.

<?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>

Chuyển sang tập lệnh phụ trợ.

Bạn có bảng tên campsite không và campsite ? Tất cả các câu lệnh sql đều có các biến nhúng, mặc dù sử dụng mysqli_real_escape_string , làm cho mã của bạn có khả năng dễ bị tấn công bởi SQL Injection, vì vậy bạn nên sử dụng prepared statements bất cứ khi nào bạn đang sử dụng đầu vào do người dùng cung cấp. Chỉ cần một trường có thể bị khai thác để xâm phạm toàn bộ hệ thống! Tôi không thể hoàn toàn tuân theo một số logic với những gì đang diễn ra ở đó (có thể là chưa đủ caffeine) vì vậy phần sau có thể không phù hợp

<?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";
        }
    }
?>
"; }} else {exit (header ('Vị trí:/index.php?error=no_available_camps')); }} else {echo "Không chuẩn bị được truy vấn sql"; }}?>

Có những câu lệnh sql khác trong đó nhưng như tôi đã nói, tôi không thể tuân theo logic vì vậy phần trên rất có thể là không đầy đủ / sai nhưng ít nhất nên chỉnh sửa một chút với các câu lệnh đã chuẩn bị.

Các điểm khác

Bạn gặp lỗi chưa được khắc phục trên campground.php trang tiết lộ

includes/reserve.php/reserve.php cả hai đều mang lại 404-Not Found lỗi

Có thể sử dụng .htaccess tệp trong images thư mục để ngăn chặn liên kết nóng hoặc duyệt thư mục.

Có một số hình ảnh tuyệt đẹp trong đó nhưng một số hình ảnh, thành thật mà nói, hoàn toàn rất lớn và mặc dù phần lớn mọi người tải xuống băng thông rộng nhanh jpg 3,7Mb vì một phần của luồng HTML làm chậm mọi thứ - vì vậy có lẽ một số tối ưu hóa hình ảnh sẽ là tốt ý tưởng quá. Điều đó nói lên rằng - tôi muốn tự mình đến nơi này!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symfony2 - Doctrine2 QueryBuilder Ở đâu trong trường ManyToMany

  2. Zend Framework và Mysql - rất chậm

  3. Sử dụng chỉ mục trong LEFT JOIN với điều kiện OR

  4. Làm cách nào để tạo truy vấn an toàn để thực hiện chèn hàng loạt trong MySQL bằng MySQLCommand trong C # mà không sử dụng proc được lưu trữ?

  5. Làm cách nào để tạo cơ sở dữ liệu MySQL từ tệp kết xuất trong tập lệnh Mong đợi / TCL?