Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Ciclo al posto di if su pi� elementi su pi� tabelle

    Salve a tutti, intanto vi riporto il link http://app.danielebarisano.it/vignet...ro/vigneto.php ed il codice
    Codice PHP:
    <?php if(isset($_POST['vig1']) && isset($_POST['vig2']) && isset($_POST['vig3'])){        $vig1 $_POST['vig1'];        $vig2 $_POST['vig2'];        $vig3 $_POST['vig3'];        $sqlvig "(SELECT * FROM ".$vig1." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION         (SELECT * FROM ".$vig2." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION        (SELECT * FROM ".$vig3." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine')";      }
          elseif(isset(
    $_POST['vig1']) && isset($_POST['vig2'])){        $vig1 $_POST['vig1'];        $vig2 $_POST['vig2'];        $sqlvig "(SELECT * FROM ".$vig1." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION         (SELECT * FROM ".$vig2." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine')";      }
          elseif (isset(
    $_POST['vig1']) && isset($_POST['vig3'])){        $vig1 $_POST['vig1'];        $vig3 $_POST['vig3'];        $sqlvig "(SELECT * FROM ".$vig1." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION         (SELECT * FROM ".$vig3." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine')";      }
          elseif (isset(
    $_POST['vig2']) && isset($_POST['vig3'])){        $vig2 $_POST['vig2'];        $vig3 $_POST['vig3'];        $sqlvig "(SELECT * FROM ".$vig2." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION         (SELECT * FROM ".$vig3." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine')";      }
          elseif(isset(
    $_POST['vig1'])) {        $vig1 $_POST['vig1'];        //seleziono id vigneti        $sqlvig = "SELECT * FROM ".$vig1."  WHERE (data_rilevamento BETWEEN '$datainizio' AND '$datafine');";      }       elseif(isset($_POST['vig2'])){        $vig2 = $_POST['vig2'];        $sqlvig = "SELECT * FROM ".$vig2."  WHERE (data_rilevamento BETWEEN '$datainizio' AND '$datafine');";      }       elseif(isset($_POST['vig3'])){        $vig3 = $_POST['vig3'];        $sqlvig = "SELECT * FROM ".$vig3."  WHERE (data_rilevamento BETWEEN '$datainizio' AND '$datafine');";      }

         
    if ($sqlvig != NULL$qry mysqli_query($conn$sqlvig);      // controllo l'esito      if (!$qry) {         die("$sqlvig " .mysqli_error($conn));      }
    Ora vi spiego, praticamente vig1, vig2 e vig3 corrispondono alle checkbox in alto nella pagina bizz_uv_2_ng_2_15 ,la2,la3. Come potete vedere si fa corrispondere alla variabile $sqlvig una determinata query in base alle checkbox che si selezionano. Il codice soprastante funziona correttamente ma all inizio erano presenti 3 vigneti. Il committente ora mi dice che ci dovrebbero essere 20 vigneti e continuare con questo passo allungherebbe troppo il codice.
    Chi mi da idee su come scrivere al meglio il codice scrivendo meno codice possibile?

  2. #2
    Effettua un for da 1 a 20, verifica l'esistenza di $_POST['vig' . $i], crea la query appendendo man mano i vari statement SQL, esegui la query.

    In realt sarebbe stato molto meglio che la tabella avesse un campo chiamato (ad esempio) "vigneto" e filtravi per quella invece di avere N tabelle.

  3. #3
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Effettua un for da 1 a 20, verifica l'esistenza di $_POST['vig' . $i], crea la query appendendo man mano i vari statement SQL, esegui la query.

    In realt sarebbe stato molto meglio che la tabella avesse un campo chiamato (ad esempio) "vigneto" e filtravi per quella invece di avere N tabelle.
    Grazie Filippo.
    Codice PHP:
    for ($i=0$i 3$i++){        if (isset($_POST['vig' .$i]))        $sqlvig .= "(SELECT * FROM ".$_POST['vig'.$i]." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION ";      } 
    Questo codice dovrebbe funzionare. come mai non va? la query che mi viene fuori da http://app.danielebarisano.it/vignet...ro/vigneto.php direttamente sul DBMS funziona

  4. #4
    Usa https://www.php.net/mysqli_error per scoprire l'errore.

    Cos a naso, c' un UONION di troppo alla fine della query.

  5. #5
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Usa https://www.php.net/mysqli_error per scoprire l'errore.

    Cos a naso, c' un UONION di troppo alla fine della query.
    lo sto usando mysqli_error , se non metto UNION come faccio a fare le SELECT su pi tabelle?
    ho provato a togliere UNION ma non funziona perch su 2 tabelle ci sarebbero 2 SELECT una affianco all altra.

  6. #6
    ho cambiato anche il for
    codice:
    for ($i=1; $i <= 3; $i++){
    ..
    }

  7. #7
    Ho scritto "un UNION di troppo" non di togliere tutti gli UNION.

  8. #8
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Ho scritto "un UNION di troppo" non di togliere tutti gli UNION.
    capito, chiaramente via codice con quello che ho scritto come faccio a togliere la UNION solo alla fine dell ultima SELECT?

  9. #9
    Quote Originariamente inviata da danielebarisano Visualizza il messaggio
    capito, chiaramente via codice con quello che ho scritto come faccio a togliere la UNION solo alla fine dell ultima SELECT?
    Mi ero scordato a postare la soluzione che ho risolto da tempo, ecco qui il codice:

    Codice PHP:
    foreach ($arvig as $item){        //inserisco in sqlvig la query corretta        if($c != ($contar -1)) $sqlvig .= "(SELECT * FROM ".$item." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') UNION ";         else $sqlvig .= "(SELECT * FROM ".$item." WHERE data_rilevamento BETWEEN '$datainizio' AND '$datafine') ";         $c++;      } 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.