Visualizzazione risultati 1 fino 9 di 9

Discussione: switch di php

  1. #1
    Guest

    Predefinito switch di php

    ho provato a creare questi casi con switch.
    il mio intento sarebbe quello di trovare il caso, controllare la condizione e successivamente modificare i dati contenuti nel database.

    Codice PHP:
    switch ($var_t) {
    case
    '0':
    if (
    $var_s >= $var_c) {
    $query = "UPDATE db_prova SET
    var_s = '
    $var_s - $var_c'
    var_t = '1'
    WHERE id =
    $id";
    } else { echo
    ' non consentito '; }
    break;
    case
    '1':
    if (
    $var_s >= $var_c2) {
    $query = "UPDATE db_prova SET
    var_s = '
    $var_2 - $var_c2'
    var_t = '2'
    WHERE id =
    $id";
    } else { echo
    ' non consentito'; }
    break;
    case
    '2':
    if (
    $var_s >= $var_c3) {
    $query = "UPDATE db_prova SET
    var_s = '
    $var_s - $var_c3'
    var_t = '3'
    WHERE id =
    $id";
    } else { echo
    ' non consentito'; }
    break;
    case
    '3':
    echo
    ' cambiato al massimo ' ; }
    break;
    premetto che:
    - le variabili var_c1, c2, c3 le ho definite prima all'inizio della funzione cosi:
    Codice PHP:
    $var_c1 = 250000;
    $var_c2 = 300000;
    $var_c3 = 350000;
    -le altre due variabili da modificare le ho richiamate dal database cosi:
    Codice PHP:
    $var_s = intval($_POST['var_s']);
    $var_t = intval($_POST['var_t']);
    e var_s è un int(11) mentre var_t è tinyint(4)

    sono sicuro che c'è un errore nella sintassi degli switch o nel richiamo di qualche variabile, però non riesco a capire cos'ho sbagliato.

    potete aiutarmi? grazie :D

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Elimina la '}' al caso 3:
    Codice PHP:
    case '3':
    echo
    ' cambiato al massimo ' ; }
    ..e poi sbaglio o non hai messo la '}' alla fine di tutto?

    In definitiva, prova con:

    Codice PHP:
    switch ($var_t) {
    case
    '0':
    if (
    $var_s >= $var_c) {
    $query = "UPDATE db_prova SET
    soldi = '
    $var_s - $var_c'
    var_t = '1'
    WHERE id =
    $id";
    } else { echo
    ' non consentito '; }
    break;
    case
    '1':
    if (
    $var_s >= $var_c2) {
    $query = "UPDATE db_prova SET
    var_s = '
    $var_2 - $var_c2'
    var_t = '2'
    WHERE id =
    $id";
    } else { echo
    ' non consentito'; }
    break;
    case
    '2':
    if (
    $var_s >= $var_c3) {
    $query = "UPDATE db_prova SET
    var_s = '
    $var_s - $var_c3'
    var_t = '3'
    WHERE id =
    $id";
    } else { echo
    ' non consentito'; }
    break;
    case
    '3':
    echo
    ' cambiato al massimo ' ;
    break;
    }
    Ciao!
    Ultima modifica di alemoppo : 01-02-2010 alle ore 09.43.17

  3. #3
    Guest

    Predefinito

    ho provato ma ancora nn funziona.

    allora potrebbe essere sbagliata la funzione dopo del codice?
    quella che permette all'utente di effettuare l'operazione?

    riporto il codice anche di quella:
    Codice PHP:
    // mostro un eventuale messaggio
    if(isset($_GET['msg']))
    echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

    $id = intval($_GET['id']);

    // preparo la query
    $query = "SELECT vars,vart FROM db_prova WHERE id = $id";

    // invio la query
    $result = mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die("Errore nella query $query: " . mysql_error());
    }

    // controllo che la SELECT abbia restituito un record
    // l'id passato via GET potrebbe essere stato manipolato
    if(mysql_num_rows($result) != 1) {
    die("l'ID passato via GET è errato");
    }

    list($vars,$vart) = mysql_fetch_row($result);

    ?>
    <p>
    <label>variabile T
    <select name="vart">
    <option value="0" <?if($vart==1) echo 'selected="selected"'?>>opzione 1</option>
    <option value="1" <?if($vart==2) echo 'selected="selected"'?>>opzione 2</option>
    <option value="2" <?if($vart==3) echo 'selected="selected"'?>>opzione 3</option>
    </select>
    </label>
    </p>

    <p>
    <input name="invia" type="submit" value="migliora" />
    </p>
    </form>
    Ultima modifica di LaClessidra : 01-02-2010 alle ore 12.03.10

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Non ho capito una cosa: c'é un errore di sintassi o di logica? PHP i segnala qualche errore o lo script non fa quello che deve fare?

    Ciao!

  5. #5
    Guest

    Predefinito

    in pratica mi riporta la tabella dove mi fa visualizzare i dati e mi da l'opzione modifica.

    una volta aperta mi esce il menù a tendina con le opzioni selezionabili, ma una volta che clicco sul pulsante del form non succede nulla e i dati all'interno del database non vengono modificati

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da LaClessidra Visualizza messaggio
    ... una volta aperta mi esce il menù a tendina con le opzioni selezionabili, ma una volta che clicco sul pulsante del form non succede nulla e i dati all'interno del database non vengono modificati
    Se quei due stralci sono tutto il tuo codice, ci credo che non aggiorni il database... non stai eseguendo la query che hai costruito nello switch. Devi mettere un mysql_query() da qualche parte, prima di riassegnare la variabile $query con la SELECT...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    no non era solo quello. lo riporto in versione integrale.
    Codice PHP:
    <?php
    // richiamo il file di configurazione
    require 'config.php';

    // richiamo lo script responsabile della connessione a MySQL
    require 'connect.php';

    if(
    $_POST && isset($_GET['id']))
    {
    aggiorna_record();
    }
    elseif(isset(
    $_GET['id']))
    {
    mostra_record();
    }
    else
    mostra_lista();

    function
    mostra_lista()
    {

    $terreno_arr = array('erba','riscaldata','sintetico','ultimagen');

    // mostro un eventuale messaggio
    if(isset($_GET['msg']))
    echo
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

    // preparo la query
    $query = "SELECT id,nome,soldi,terreno FROM fanta_squadra";

    // invio la query
    $result = mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die(
    "Errore nella query $query: " . mysql_error());
    }

    echo
    '
    <table border="1">
    <tr>
    <th>Nome</th>
    <th>soldi</th>
    <th>terreno</th>
    <th>&nbsp;</th>
    </tr>'
    ;

    while (
    $row = mysql_fetch_assoc($result))
    {
    $nome = htmlspecialchars($row['nome']);
    $soldi = htmlspecialchars($row['soldi']);
    $terreno = $terreno_arr[$row['terreno']];

    // preparo il link per la modifica dei dati del record
    $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

    echo
    "<tr>
    <td>
    $nome</td>
    <td>
    $soldi</td>
    <td>
    $terreno</td>
    <td><a href=\"
    $link\">migliora</a></td>
    </tr>"
    ;
    }

    echo
    '</table>';

    // libero la memoria di PHP occupata dai record estratti con la SELECT
    mysql_free_result($result);

    // chiudo la connessione a MySQL
    mysql_close();
    }

    function
    aggiorna_record()
    {
    //definisco le variabili di costo upgrade
    $costo_up2 = 250000;
    $costo_up3 = 300000;
    $costo_up4 = 350000;

    // recupero gli altri campi
    $soldi = intval($_POST['soldi']);
    $terreno = intval($_POST['terreno']);
    $resto2 = $soldi - $costo_up2;
    $resto3 = $soldi - $costo_up3;
    $resto4 = $soldi - $costo_up4;

    $id = intval($_GET['id']);

    //controllo i vari casi
    switch ($terreno) {
    case
    '0':
    if (
    $soldi >= $costo_up2) {
    $query = "UPDATE fanta_squadra SET
    soldi = '
    $resto2',
    terreno = '1'
    WHERE id =
    $id";
    } else { echo
    ' non hai abbastanza soldi '; }
    break;
    case
    '1':
    if (
    $soldi >= $costo_up3) {
    $query = "UPDATE fanta_squadra SET
    soldi = '
    $resto3',
    terreno = '2'
    WHERE id =
    $id";
    } else { echo
    ' non hai abbastanza soldi'; }
    break;
    case
    '2':
    if (
    $soldi >= $costo_up4) {
    $query = "UPDATE fanta_squadra SET
    soldi = '
    $resto4',
    terreno = '3'
    WHERE id =
    $id";
    } else { echo
    ' non hai abbastanza soldi'; }
    break;
    case
    '3':
    echo
    ' hai migliorato il terreno al massimo ' ;
    break;
    }
    // invio la query
    $result = mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die(
    "Errore nella query $query: " . mysql_error());
    }

    // chiudo la connessione a MySQL
    mysql_close();

    $messaggio = urlencode('Aggiornamento effettuato con successo');
    header("location: http://laclessidra.altervista.org/fantacalcio/teams/amm_squadre.php");//redirect
    exit;
    }

    function
    mostra_record()
    {
    // mostro un eventuale messaggio
    if(isset($_GET['msg']))
    echo
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

    $id = intval($_GET['id']);

    // preparo la query
    $query = "SELECT soldi,terreno FROM fanta_squadra WHERE id = $id";

    // invio la query
    $result = mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die(
    "Errore nella query $query: " . mysql_error());
    }

    // controllo che la SELECT abbia restituito un record
    // l'id passato via GET potrebbe essere stato manipolato
    if(mysql_num_rows($result) != 1) {
    die(
    "l'ID passato via GET è errato");
    }

    list(
    $soldi,$terreno) = mysql_fetch_row($result);

    ?>
    <p>
    <label>terreno
    <select name="terreno">
    <option value="1" <?if($terreno==1) echo 'selected="selected"'?>>erba riscaldata</option>
    <option value="2" <?if($terreno==2) echo 'selected="selected"'?>>sintetico</option>
    <option value="3" <?if($terreno==3) echo 'selected="selected"'?>>sintetico di ultima generazione</option>
    </select>
    </label>
    </p>

    <p>
    <input name="invia" type="submit" value="migliora" />
    </p>
    </form>
    <?
    }
    ?>
    lo scopo di questo è che l'utente possa modificare il terreno.
    che sia possibile passare da erba a riscaldato. da riscaldato a sintetico. e poi a sintetico di ultima generazione. e che in tutti i passaggi venga controllato che soldi>=costo e memorizzi il nuovo costo

  8. #8
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Probabilmente mi sbaglierò, ma non vorrei che non riuscisse a trovare le funzioni perché "non dichiarate". Prova a spostarle prima del codice principale (in altre parole, subito dopo le due require). Per il resto il codice sembra corretto...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  9. #9
    Guest

    Predefinito

    no non era quello. alla fine ho risolto riscrivendo da capo la struttura. ho eliminato lo switch e inserito una serie di if, forse il codice è più incasinato però funziona correttamente. perchè col codice contenente lo switch non riuscivo a venirne a capo.

    hehe :D

    grazie lo stesso per l'aiuto!

Regole di scrittura

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