Mysql
 sql >> Database >  >> RDS >> Mysql

Recupera i dati nel menu a discesa ajax utilizzando PHP MySql JQuery

Pochi pensano al tuo codice

  • Con AJAX, prova a utilizzare JSON per inviare e recuperare dati, ti darà più libertà su vars e UI.

  • Dato che stai usando jQuery, cerca di usarlo il più possibile, non definendo gli eventi online, se li raggruppi nello script ti sarà più facile gestirlo.

  • Per quanto riguarda la selezione, è piuttosto complicato ricaricarli. In IE ricordo che non potevo aggiungere opzioni, quindi devi caricare l'INTERA selezione.

  • Non utilizzare le funzioni PHP mysql_query, sono piuttosto deprecate. Leggi e applica questo: Come posso prevenire l'SQL injection in PHP?

  • Quando carichi valori da AJAX, devi collegare il gestore agli elementi DOM, ecco perché usando la funzione .on(), per assicurarti che alleghi il gestore agli elementi.

  • Prova a usare le nuove librerie di jQuery, poiché sono più veloci, potenti e hanno prestazioni migliorate, la 1.4 è piuttosto vecchia...

Ti ho scritto un esempio di elenco a discesa dei paesi che utilizzano le cose sopra, per darti un'idea di come raggiungerlo, prendi quello che pensi ti piaccia:

indice.html:

<html>

    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
    </head>

    <body>

    <script>
    $(document).ready(function () {
        $(document).on('change', '#div_country select, #div_state select', function () {
            var $type = $(this).attr('data-type');
            var $id = $(this).val();

            if ( $id != -1 ) {
                loadSelect( $type, $id );
            }

        });

        function loadSelect( $type, $id ) {
            $.ajax({
                type: 'post',
                url: 'states.php',
                cache: false,
                data: {
                    'type': $type
                ,   'id': $id
                },
                dataType: 'json',
                success: function (data) {
                    if ( data.result == true ) {
                        if (data.html !== undefined) {
                            var $div = '';
                            if ( $type == 'country') {
                                $div = 'state';
                            } else {
                                $div = 'city';
                            }
                            $( "#div_" + $div ).html(data.html);
                        }
                    } else {
                        alert('Something went wrong!');
                    }
                }
            });
        }

    });
    </script>

    <div id="div_country">
        <select data-type="country">
            <option value="-1">Select Country</option>
            <option value="1">Spain</option>
            <option value="2">France</option>
            <option value="3">Germany</option>
        </select>
    </div>

    <div id="div_state">
        <select data-type="state">
            <option value="-1">Select Country</option>
        </select>
    </div>

    <div id="div_city">
        <select>
            <option value="-1">Select State</option>
        </select>
    </div>

    </body>
</html>

state.php

<?php
$type = isset( $_POST['type'] ) ? $_POST['type'] : '';

if ( !empty( $type ) ) {
    switch ($type) {
        case 'country':
            $result = true;
            $html = '<select data-type="state">
                        <option value="-1">Select State</option>
                        <option value="1">state 1</option>
                        <option value="2">state 2</option>
                    </select>';
        break;
        case 'state':
            $result = true;
            $html = '<select data-type="city">
                        <option value="-1">Select City</option>
                        <option value="1">city 1</option>
                        <option value="2">city 2</option>
                    </select>';
        break;
        default:
            $result = false;
            $html = '';
        break;
    }
}

$data = array(
    'result' => $result,
    'html' => $html
);

Ho aggiunto per darti un'idea su come raggiungerlo, è un esempio autonomo e vedrai le modifiche della casella personale. Dovrai aggiungere la logica PHP, ma volevo mostrarti un approccio migliore, XD