Visualizzazione risultati 1 fino 4 di 4

Discussione: Piccola funzione da PHP a JS

  1. #1
    Guest

    Question Piccola funzione da PHP a JS

    Salve a tutti! Ho sviluppato un codice PHP che, dopo opportune verifiche, aumenta di uno un determinato record in una tabella. Ora, mi sono reso conto che questo codice consuma parecchie risorse e può essere ottimizzato passando alcuni calcoli lato client con JS, rendendo anche più rapida la compilazione del form in questione.

    Allego codice:

    Codice PHP:
    <?php /*Stampo il form di incremento se il pg ha abbastanza px*/
    if ((((($PARAMETERS['settings']['px_x_rank']*$ranks[$row['id_abilita']])/2)+($PARAMETERS['settings']['px_x_rank']*($ranks[$row['id_abilita']]+1)))<=$record['esperienza'])&&($ranks[$row['id_abilita']]<$PARAMETERS['settings']['skills_cap'])&&((gdrcd_filter('get',$_REQUEST['pg'])==$_SESSION['login'])||($_SESSION['permessi']>=MODERATOR))) { ?>
    <form action="main.php?page=scheda_abilita&pg=<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>" method="post" name="add_skill" id="add_skill">
    <input type="hidden" value="<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>" name="pg" />
    <input type="hidden" value="addskill" name="op" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" name="abilita" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $ranks[$row['id_abilita']]); ?>" name="rank" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $record['esperienza']); ?>" name="esp" />
    <input type="hidden" value="<?php echo ((($PARAMETERS['settings']['px_x_rank']*$ranks[$row['id_abilita']])/2)+($PARAMETERS['settings']['px_x_rank']*($ranks[$row['id_abilita']]+1))); ?>" name="costo" />
    <input type="submit" value="+" />
    </form>
    <?php } if(($_SESSION['permessi']>=MODERATOR)&&
    (
    $ranks[$row['id_abilita']]>0)){ ?>
    <form action="main.php?page=scheda_abilita&pg=<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>" method="post" name="sub_skill" id="sub_skill">
    <input type="hidden" value="<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>" name="pg" />
    <input type="hidden" value="subskill" name="op" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" name="abilita" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $ranks[$row['id_abilita']]); ?>" name="rank" />
    <input type="hidden" value="<?php echo gdrcd_filter('num', $record['esperienza']); ?>" name="esp" />
    <input type="hidden" value="<?php echo ((($PARAMETERS['settings']['px_x_rank']*($ranks[$row['id_abilita']]-1)/2)+($PARAMETERS['settings']['px_x_rank']*$ranks[$row['id_abilita']]))); ?>" name="costo" />
    <input type="submit" value="-" />
    </form>
    <?php }?>
    Nella fattispecie avrei bisogno che questa verifica:

    Codice PHP:
    ((((($PARAMETERS['settings']['px_x_rank']*$ranks[$row['id_abilita']])/2)+($PARAMETERS['settings']['px_x_rank']*($ranks[$row['id_abilita']]+1)))<=$record['esperienza'])&&($ranks[$row['id_abilita']]<$PARAMETERS['settings']['skills_cap']))
    venga eseguita lato client con JS e che la pressione del submit (che sostituirò con qualcos'altro ovviamente) non invii il form, ma aumenti di un unità il contenuto di input text "disattivato" (in modo che l'utente non possa scriverci). Qualcuno può aiutarmi? ^^

    Grazie a tutti delle possibile risposte :)

    P.S.:= Ho più urgenza di avere la "pappa pronta" che di imparare, brutto a dirsi, ma è così, quindi se qualcuno ha una soluzione "copia ed incolla" l'accetto volentieri, come volentieri accetterò comunque ogni consiglio, guida aiuto.

    Informazioni utili:
    -Non voglio usare jQuery
    -Uso xHTML1.1

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Hai presente però che qualiasi dato lato client può essere modificato con grande facilità, anche se disabiliti il campo? Se sono numeri importanti, che i tuoi giocatori potrebbero voler incrementare per qualsiasi motivo, non puoi fidarti di controlli nel browser.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Hai presente però che qualiasi dato lato client può essere modificato con grande facilità, anche se disabiliti il campo? Se sono numeri importanti, che i tuoi giocatori potrebbero voler incrementare per qualsiasi motivo, non puoi fidarti di controlli nel browser.

    Azz... su questo anche ragione, non c'avevo pensato. Potrei però implementare in PHP una verifica sui dati inviati dal form, per accertarmi che siano corretti Oggettivamente perderei il risparmio di query quasi del tutto, ma guadagnerei in estetica (che purtroppo, ultimamente, vale fin troppo).

    EDIT: Ho pensato che posso non fare la verifica lato client e limitarmi a fare un conto "d'esempio" in modo che il giocatore sappia regolarsi, ma alla fin fine la verifica la fa comunque il PHP.

    EDIT2: Ho praticamente risolto usando solo il PHP, sinceramente mi rendo conto che lancio qualche query di troppo così, ma funziona ed è estetico, quindi, cambio la mia iniziale priorità :D Vorrei capire come farlo sistemato in JS, se qualcuno mi sa consigliare qualche guida, gliene sono grato u.u. Se volete la soluzione che ho adottato, posto l'intero codice della pagina ^^
    Ultima modifica di morgensterngdr : 31-01-2013 alle ore 17.29.43

  4. #4
    Guest

    Cool

    AGGIORNAMENTO

    Ho risolto usando la seguente funzione JS:

    Codice:
    function add(ab, pay, cap)
    {
    	var idinput='input'+ab;
    	var rank=document.getElementById(idinput).value;
    	var esp=document.getElementById('esp').innerHTML;
    	if ((rank < cap)&&(((++rank)*pay) <= esp)) {
    	document.getElementById('esp').innerHTML=(esp-(rank*pay));
    	document.getElementById(idinput).value=rank;
    	}
    }
    
    function sub(ab, pay, cap)
    {
    	var idinput='input'+ab;
    	var rank=document.getElementById(idinput).value;
    	var esp=parseInt(document.getElementById('esp').innerHTML);
    	if ((rank > 0)&&(rank > cap)) {
    	document.getElementById('esp').innerHTML=(esp+(rank*pay));
    	document.getElementById(idinput).value=--rank;
    	}
    }
    Richiamata così:

    Codice PHP:
    <div class="form_info"><?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['avalaible_xp']).': <span id="esp">'.($px_totali_pg-$px_spesi.'</span>');?></div>
    <form action="main.php?page=scheda_abilita&pg=<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>" method="post" name="skill" id="skill">
    <table>
    <?php while($row=gdrcd_query($result, 'fetch')){?>
    <tr>
    <input type="hidden" value="<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" name="abilita<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" />
    <td class="casella_elemento"><div class="elementi_elenco_abilita"><?php echo gdrcd_filter('out',$row['nome']); ?></div></td>
    <td class="casella_elemento"><div class="elementi_elenco"><?php echo '('.gdrcd_filter('out',substr($PARAMETERS['names']['stats']['car'.$row['car']], 0, 3)).')'; ?></div></td>
    <td class="casella_elemento"><div class="elementi_elenco"><input class="abilita_rango" type="text" name="rank_ab<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" id="input<?php echo gdrcd_filter('num', $row['id_abilita']); ?>" value="<?php echo 0+gdrcd_filter('num',$ranks[$row['id_abilita']]); ?>" /></div></td>
    <td>
    <div class="elementi_elenco">
    <?php /*Stampo il form di incremento se il pg ha abbastanza px*/
    if ((((($ranks[$row['id_abilita']]+1)*$PARAMETERS['settings']['px_x_rank'])<=($px_totali_pg-$px_spesi))<=$record['esperienza'])&&($ranks[$row['id_abilita']]<$PARAMETERS['settings']['skills_cap'])&&((gdrcd_filter('get',$_REQUEST['pg'])==$_SESSION['login'])||($_SESSION['permessi']>=MODERATOR))) { ?>
    [<a href="#" onClick="javascript:add(<?php echo gdrcd_filter('num', $row['id_abilita']); ?>, <?php echo gdrcd_filter('num', $PARAMETERS['settings']['px_x_rank']); ?>, <?php echo gdrcd_filter('num', $PARAMETERS['settings']['skills_cap']); ?>)" />+</a>]
    <?php } else { echo '<input type="submit" value="/" disabled />'; }?>
    <?php if($_SESSION['permessi']>=MODERATOR){ ?>
    [<a href="#" onClick="javascript:sub(<?php echo gdrcd_filter('num', $row['id_abilita']); ?>, <?php echo gdrcd_filter('num', $PARAMETERS['settings']['px_x_rank']); ?>, <?php echo gdrcd_filter('num', $ranks[$row['id_abilita']]); ?>)" />-</a>]
    <?php }?>
    </div>
    </td>
    </tr>
    <?php
    }//while
    gdrcd_query($result, 'free');
    ?>
    </table>
    <div class='form_submit'>
    <input type="submit" value="<?php echo $MESSAGE['interface']['forms']['submit']; ?>" class="form_submit" />
    <input type="hidden" value="editskill" name="op" />
    <input type="hidden"
    value="<?php echo gdrcd_filter('get',$_REQUEST['pg']); ?>"
    name="pg" />
    </div>
    </form>
    A beneficio di chi può avere il mio stesso problema ^^ Ora sono bloccato con il PHP invece XD ma ho aperto un topic apposito, questo, per me, si può chiudere :D Grazie
    Ultima modifica di morgensterngdr : 01-02-2013 alle ore 02.36.13

Regole di scrittura

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