Visualizzazione risultati 1 fino 7 di 7

Discussione: query PHP alla compilazione di un campo input

  1. #1
    Guest

    Exclamation query PHP alla compilazione di un campo input

    Buongiorno,
    Scrivo per chiedervi un piccolo aiuto...
    devo sviluppare uno script che mi esegua uno script php al variare di un campo input

    vi spiego

    ho due campi input
    • <input name="cod_articolo_parziale" type="text" class="form-control cod-articolo" id="cod_articolo" placeholder="Ex: AA ">
    • <input name="cod_articolo" type="text" class="form-control cod-articolo" id="cod_articolo" placeholder="Ex: AA 0000">


    la composizione del campo "cod_articolo_parziale" è sempre di tipologia 2 lettere quindi per esempio
    • AA
    • BC
    • DE
    • ...


    La query non è altro che un select sul DB che verifica se esiste già un valore nella colonna cod_prodotto che inizia con le lettere inserite manualmente nel campo appena compilato e,
    se il numero di risultati è pari a 0: compila il campo "cod_articolo" con: le due lettere inserite nel campo "cod_articolo_parziale" 0000
    se invece ne esite già uno lo riempie le lettere inserite nel campo "cod_articolo_parziale" ed il numero successivo (quindi se il db esiste il campo AA 0005 sarà AA 0006).

    il tutto però deve essere fatto automaticamente e nella stessa pagina, in quanto, ci sarà un'altra pagina dopo che mi va ad inserire il contenuto del campo cod_articolo nella medesima colonna del db


    Qualcuno mi riesce a dare un aiuto con il codice? (di JS purtroppo non ne so nulla)

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Hai bisogno di:
    • un event listener con cui intercettare la compilazione del campo cod_articolo_parziale
    • una chiamata AJAX per interrogare il sistema così da ottenere il primo codice disponibile, sia esso 0000 in caso di numero di risultati pari a zero o un valore diverso in caso di risultati già presenti
    • una pagina PHP responsabile di gestire la chiamata AJAX interrogando la base di dati

    Ti consiglio di usare jQuery, rende le prime due operazioni molto semplici.

    Prima di procedere c'è una questione da chiarire: come sono ordinati i codici prodotto. Questo influisce nel modo in cui dovrai scrivere l'interrogazione. La colonna cod_articolo è di tipo VARCHAR o simili? Ritieni che
    Codice:
    SELECT cod_articolo FROM articolo ORDER BY cod_articolo DESC LIMIT 1
    sia sufficiente ad ottenere il "più grande" codice inserito?

    I suggerimenti che do più spesso:


  3. #3
    Guest

    Predefinito

    io più che
    Codice PHP:
    SELECT cod_articolo FROM articolo ORDER BY cod_articolo DESC LIMIT 1
    utilizzerei un
    Codice PHP:
    $strSQL = "SELECT * FROM prodotti WHERE cod_articolo LIKE "%_VALORE_INSERITO_NEL_CAMPO_INPUT_% ";
    $risultato = mysql_query($strSQL);
    $cod_prodotto_completo=mysql_result($risultato,0,'cod_articolo');

    a titolo informativo il campo input dove io andrò ad inserire la prima parte del codice (le due lettere) ha name "cod_articolo_parziale"

    La colonna è di tipo varchar(255)
    Il cod. prodotto è univoco ma l'iniziale del codice si ripete
    ad esempio
    • AA 0000
    • AA 0001
    • AA 0002
    • BB 0000
    • BB 0001
    • DE 0000
    • DE 0001
    • ...
    Ultima modifica di monicagestionale : 24-10-2018 alle ore 17.25.45

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quella query soddisfa l'esigenza di trovare i prodotti il cui codice articolo ha il prefisso indicato, ma non è quello che ti ho chiesto .

    Dall'esempio che hai mostrato, comunque, è chiaro che l'ordinamento lessicografico è sufficiente a determinare il "più grande" dei codici.

    Per quanto riguarda la pagina PHP, supponiamo di chiamarla next_product_code.php. Riceverà richieste tramite GET, il prefisso da cercare si chiamerà prefix e dovrà essere una stringa di due lettere. La risposta sarà in formato JSON e conterrà il prossimo codice prodotto non utilizzato:
    next_product_code.php
    Codice PHP:
    if (!isset($_GET['prefix']) || strlen($_GET['prefix']) !== 2) {
    die(
    'Missing prefix, or wrong format.');
    }


    $prefix = $_GET['prefix'];
    $db = qualsiasi_cosa_usi_per_il_database_(tranne_mysql_che_è_deprecato!!!);

    $query = "SELECT cod_articolo FROM prodotti WHERE cod_articolo LIKE '" . $prefix . " %' ORDER BY cod_prodotto DESC LIMIT 1";
    $result = $db->query($query);

    $next_code = '0000';
    if (
    $result->ci_sono_risultati()) {
    $row = $result->fetch();
    $numeric_part = substr($row, 3);
    $next_code = intval($numeri_part) + 1;
    }

    $code = $prefix . " " . $next_code;

    header('Content-Type: application/json');
    echo
    json_encode($code);
    Potrebbero esserci errori di sintassi o qualche svista del genere.
    Fatto questo (e provato) la parte in jQuery è abbastanza semplice da vedere.

    I suggerimenti che do più spesso:


  5. #5
    Guest

    Predefinito

    ok tieni conto tuttavia, che più informazioni riesco a ricavare automaticamente dal db in riferimento alla categoria meglio è

    ti faccio un esempio
    http://prntscr.com/l9z43t queste sono le colonne del mio db
    ad esempio la colonna categoria sarà uguale per tutti i codice che iniziano per AA come la colonna colore_etichetta

    quindi, se io riuscissi a far si che alla compilazione con AA del mio campo input lui in automatico rilevi qui valori e me li inserisca come value nei campi della mia pagina sarebbe TOP

    (sottolineo che per praticità il name dei singoli campi input è uguale al nome della colonna
    e sono i seguenti: http://prntscr.com/l9z5nz

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Mh, sembra che la tua base di dati non sia in forma normale.

    Da come lo descrivi, e dalle immagini mostrate, sembra opportuno creare una tabella categoria identificata dal codice di due lettere (chiave primaria) con i suoi attributi, come il nome ed il colore dell'etichetta.
    Il codice prodotto dovrebbe quindi diventare un attributo composto, articolato in codice_categoria CHAR(2) NOT NULL (chiave esterna) ed il codice numerico, quest'ultimo CHAR(4) o addirittura INT UNSIGNED.
    Le letture diventano quindi delle operazioni di JOIN.
    La chiave primaria diventa la combinazione PRIMARY KEY(codice_categoria, codice_numerico).

    Un lavoro anologo probabilmente è opportuno anche per la sotto categoria.

    Con queste modifiche diventa più semplice da gestire e mantenere. Per esempio non hai più bisogno né di selezionare la categoria, né di inserire il colore dell'etichetta, poiché diventa implicito.

    Se preferisci non seguire questo consiglio, puoi modificare il codice del messaggio precedente in modo che restituisca tutte le informazioni di un record:
    Codice PHP:
    $query = "SELECT * FROM prodotti WHERE cod_articolo LIKE '" . $prefix . " %' ORDER BY cod_prodotto DESC LIMIT 1";
    $result = $db->query($query);

    $next_code = '0000';
    if (
    $result->ci_sono_risultati()) {
    $row = $result->fetch();
    $numeric_part = substr($row, 3);
    $next_code = intval($numeri_part) + 1;
    $row['next_code'] = $prefix . " " . $next_code;
    }

    header('Content-Type: application/json');
    echo
    json_encode($row);
    Questo produce un JSON che contiene tutte le informazioni dell'"ultimo" prodotto nella stessa categoria di quello che si sta inserendo, con in più il nuovo codice prodotto.

    I suggerimenti che do più spesso:


  7. #7
    Guest

    Predefinito

    purtroppo non mi è possibile
    posso usare solo quella tabella :/

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •