Aiuto!!!parte del form sparisce

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao a tutti. Avrei un problema con il codice che sto scrivendo e spero che possiate aiutarmi.
L'applicazione che vorrei riuscire a realizzare è una sequenza di punti che adesso vi spiego:
1) un utente inserisce la sua username e password personali per effettuare il login;
2) effettuato il login, da una tabella di un database mysql vengono estratti tutti i nomi delle colonne e inseriti in due drop-down box;
3) dai due drop-down box l'utente sceglie un nome delle colonne e clicca un bottone chiamato "Crea e/o Modifica grafico" per creare un grafico.

Questo è ciò che vorrei fare. Il mio problema sta nel fatto che la pagina .php "impazzisce".
Faccio un esempio: se effettuo il login inserendo username e password e clicco il bottone è tutto ok, mentre se clicco il bottone del login senza inserire username e password oppure ne inserisco soltanto uno, una parte del form mi sparisce dallo schermo!!! Succede la stessa identica cosa se clicco il bottone "Crea e/o Modifica grafico"!!!.
Qualcuno di voi sa dirmi dove sbaglio?
Vi posto il codice che ho scritto.
Ciao, grazie in anticipo a tutti.

Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="it" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Meco</title>
<style type="text/css">
body {
    font-family: "Trebuchet MS";
    text-align: center;
}
#TESTATA {
    width: 1000px;
    margin-right: auto;
    margin-left: auto;
    font-size: 45px;
}
#MENU {
    width: 200px;
    float: left;
}
#GRAFICO {
    width: 800px;
    float: left;
}
</style>
</head>
<body>
<div id="TESTATA">
    Meco</div>
<br />
<div id="MENU">
    <form method="post">
        Inserisci i tuoi dati personali per accedere
        <br />
        <br />
        Username
        <br />   
        <input name="username" type="text" style="width: 170px" />
        <br />
        <br />
        Password
        <br />
        <input name="password" type="password" style="width: 170px" /><br />
        <br />
        <input name="accedi" style="width: 170px" type="submit" value="Accedi" />
        <br />
        <hr />
    Seleziona gli assi X e Y del grafico<br />
        <br />
        <input name="crea" type="submit" value="Crea e/o Modifica grafico" style="width: 170px" />
    <br />
    <br />
   
<?php
// ==================== INIZIO CODICE LOGIN ====================
  require_once ("sessioni.php");
  require_once ('testlogin.php');
  if (isset ($_POST['accedi']))
  {
    $user = $_POST['username'];
    $pass = $_POST['password'];
    if ($user == '')
    {
      echo "Errore! Utente non impostato.";
    }
    if ($pass == '')
    {
      echo "Errore! Password non impostata.";
    }
  $con = mysql_connect ("localhost", "root","") or die ("Connessione al server fallita!!!".mysql_error());
  $db = mysql_select_db ("smart_structure", $con);
  if (!$db)
  {
    die ("Connessione al database smartstructure fallita!!! ".mysql_error());
  }
    $query = "SELECT id, username FROM utenti WHERE username = '$user' AND password = '$pass'";
    $risultato = mysql_query ($query,$con);
    if (mysql_num_rows($risultato) == 1)
    {
      $messaggio  = "Accesso effettuato";
      $trovato = mysql_fetch_array ($risultato);
      $_SESSION['id'] = $trovato ['id'];
      $_SESSION['username'] = $trovato ['username'];
  // estraggo il "nome_committente" dalla tabella utenti e lo inserisco in un input (text)
      $committente = mysql_query("SELECT username, nome_committente FROM utenti WHERE username = '$user' AND password = '$pass' ORDER BY id");
      $rec_estr = mysql_fetch_assoc ($committente);
    }
    else
    {
      $messaggio = "Utente e/o password errati";
    }
    if (!empty ($messaggio))
    {
      echo $messaggio. "</p></font>";
    }
    $_SESSION['accesso'] = $user;
  }
// ==================== FINE CODICE LOGIN ====================
?>   
        Asse X
        <br />
        <select name="asse_x" style="width: 170px">
        <?php
    // leggo i valori di user e password
          $user = $_POST['username'];
          $pass = $_POST['password'];         
    // seleziono tutti i nomi delle colonne della tabella "$user" dal database "$monitoraggio"
          $con = mysql_connect ("localhost", "root","") or die ("Connessione al server fallita!!!".mysql_error());
          $db1 = mysql_select_db ("$rec_estr[nome_committente]", $con);
          if (!$db1)
          {
            die ("Connessione al database $rec_estr[nome_committente] fallita! ".mysql_error());
          }         
          $drop_x = mysql_query("SHOW COLUMNS FROM $user");
          if ($campo_x == '')
          {
            echo '<option>Effettua una scelta</option>';
          }
          else
          {
            echo '<option>' .$campo_x.'</option>';
          }   
          while ($record = mysql_fetch_array($drop_x))
          {
            echo '<option value='.$record[0].'>'.$record[0].'</option>';
          }  
        ?>
        </select>
        <br />
        <br />
        Asse Y<br />
        <select name="asse_y" style="width: 170px">
        <?php
    // leggo i valori di user e password
          $user = $_POST['username'];
          $pass = $_POST['password'];
    // seleziono tutti i nomi delle colonne della tabella "$user" dal database "$monitoraggio"
          $con = mysql_connect ("localhost", "root","") or die ("Connessione al server fallita!!!".mysql_error());
          $db1 = mysql_select_db ("$rec_estr[nome_committente]", $con);
          if (!$db1)
          {
            die ("Connessione al database $rec_estr[nome_committente] fallita! ".mysql_error());
          }
          $drop_y = mysql_query("SHOW COLUMNS FROM $user");  
          if ($campo_y == '')
          {
            echo '<option>Effettua una scelta</option>';
          }
          else
          {
            echo '<option>' .$campo_y.'</option>';
          }
          while ($record = mysql_fetch_array($drop_y))
          {
            echo '<option value='.$record[0].'>'.$record[0].'</option>';
          }
        ?>
        </select>
        <br />
        <hr />
        Visualizza e/o scarica documenti
    </form>
</div>
<div id="GRAFICO">
<?php
  if (isset ($_POST['crea']))
  {
// seleziono tutto dalla tabella e faccio la query; 
    $sql="SELECT * FROM $user";
    $sth = mysql_query($sql) or die('Query fallita: ' . mysql_error());
    $rows = array();
//flag is not needed
    $flag = true;
    $table = array();
    $selezione_x = $_POST['asse_x'];
    $selezione_y = $_POST['asse_y'];
// "costruisco" indicando i nomi delle colonne della tabella - una deve essere in formato stringa (asse x) ed una in formato number (asse y)
    $table['cols'] = array(
    array('label' => '$selezione_x', 'type' => 'string'),
    array('label' => '$selezione_y', 'type' => 'number')
);
    $rows = array();
    if ($sth)
    {
      while($r = mysql_fetch_assoc($sth))
      {
        $temp = array();
        $temp[] = array('v' => (string) $r[$selezione_x]);
        $temp[] = array('v' => (int) $r[$selezione_y]);
        $rows[] = array('c' => $temp);
      }
    }
      $table['rows'] = $rows;
      $jsonTable = json_encode($table);   
  }
?>
<script type="text/javascript" src="jsapi"></script>
    <script type="text/javascript" src="jquery.min.js"></script>   
    <script type="text/javascript">
      google.load("visualization", "1.1", {packages:["line"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
      var data = new google.visualization.DataTable(<?=$jsonTable?>);
      var options = {
            chart: {           
            title: 'Monitoraggio',
            subtitle: 'Acquisizione dati'},
            series: {
              // DEFINISCO GLI ASSI A CUI DARE IL NOME
            0: { axis: 'AsseY'}
          },
          axes: {
          // AGGIUNGO IL NOME ALL'ASSE
          y: {
             AsseY: {label: 'Temperatura (°C)'}
           }
          }
        };                 
      var chart = new google.charts.Line(document.getElementById('linechart_material'));
        chart.draw(data, options);
      }
    </script>
    <div id="linechart_material" style="width: 850px; height: 350px; margin-left:auto; margin-right:auto"></div>
    <br />
    <br />
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1.1", {packages:["table"]});
      google.setOnLoadCallback(drawTable);
      function drawTable() {
        var data = new google.visualization.DataTable(<?=$jsonTable?>);
        var table = new google.visualization.Table(document.getElementById('table_div'));
        table.draw(data, {showRowNumber: true, width: '850px', height: '100%'});
      }
    </script>
    <div id="table_div"></div>
</div>
</body>
</html>
 
tanto per cominciare potresti dare come attributo required ai due input user e password, in modo che se uno non è compilato non va nemmeno avanti ma te lo segnala direttamente, diciamol così, l'html

poi ti consiglio di passare alle funzioni mysqli o PDO e di lasciar perdere quelle mysql che sono deprecate (non credo ci entri niente con il tuo problema, però...)

altra cosa, in ogni pagina dove usi le $_SESSION devi aprire la pagina con session_start()
 
Ciao Rikk73, grazie per la risposta.
Ho letto con attenzione il tuo post e per quanto riguarda i tre punti che hai scritto ti dico questo:
1) sull'attributo required hai perfettamente ragione, mi dimentico sempre di inserirlo!!!;
2) per quanto riguarda le funzioni mysqli o PDO, come hai detto tu non credo che mi risolvano il problema;
3) la pagina l'ho effettivamente aperta con il comando session_start();
non te ne sei accorto perché il comando l'ho importato da un file esterno chiamato sessioni.php attraverso il comando require_once ("sessioni.php");

Qualche altro consiglio?
Ciao, grazie mille.
 
Ciao Borgo Italia. Scusa ma non ho ben capito.
Dove dovrei scrivere require_once ("sessioni.php");?
A proposito del contenuto del file "sessioni.php" hai capito benissimo.
Comunque a scanzo di equivoci riporto il codice di questo file che ho scritto
Codice:
<?php
  session_start();
?>
Ciao.
 
ciao
alla riga 1
PHP:
<?php
require_once ("sessioni.php");
?>
<!DOCTYPE HTML>
<html>
<!-- eccetera -->
però se hai nel file solo quella istruzione a che ti serve il require
ti basta
PHP:
<?php
session_start();
?>
<!DOCTYPE HTML>
<html>
<!-- eccetera -->
 
  • Like
Reactions: Rikk73
Ciao Borgo Italia.
Ho provato a fare ciò che mi hai detto, ma niente da fare, il problema persiste. A quanto pare, purtroppo, il problema non dipende da quello.
Poi, come mi hai giustamente fatto notare tu, non aveva senso l'istruzione require_once ("sessioni.php") e l'ho sostituita con un semplice session_start().
Ti viene in mente altro che possa spiegare la causa del mio problema?
Ciao, grazie.
 
ciao
ho dato un occhio al tuo script, ma non ne capisco la logica. tu dici
1) l'utente deve loggarsi
2) se loggato fa il grafico
giusto?
se così non capisco un unico form, io dividerei in due:
una parte di log in cui se loggato vai al form del grafico, se non loggato lo mandi es alla index
farei la pagina del grafico protetta cioè verifica della session: se esiste grafico, altrimenti rimandi a dove vuoi ti schematizzo
pagina log
PHP:
<?php
ob_start();//questo (e in fondo ob_end_flush())  ti serve per usare header dopo un output html
session_start();
if(isset($_POST['log'])){
    //dati di connessione
    //verifica correttezza user e/ pass
    $query=mysqli_query($conn,"SELECT * FROM utenti WHERE username='$user' AND password='$pass'");
    if(mysqli_num_rows($query) == 1){
        //l'utente è registrato
        $_SESSION['user']=$user;
        $_SESSION['pass']=$pass;
        echo "ciao $user tra 3 secondi sarai reindirizzato";
        header( "refresh:3;url=pagina_grafico.php");
    }else{
        echo "accesso non consentito";
        header( "refresh:3;url=dove_vuoi_tu.php");
    }
}else{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
user <input name="user" type="text"><br>
pass <input name="pass" type="text"><br>
<input name="log" type="submit" id="log" value="log">
</form>
<?php
}
ob_end_flush();
?>
poi la pagina con tutto l'ambaradan del grafico ecc..
PHP:
<?php
session_start();
if(!isset($_SESSION['user']) || !isset($_SESSION['pass'])){
    //entrambe o una delle due le sessioni non esistono, è un tentativo di accesso non autorizzato
    //se per caso esiste una sola
    if(isset($_SESSION)){session_destroy();//la distruggo e riinvii dove ti pare
    header("location=dove_vuoi_tu.php");
}else{
//l'utente è registrato e loggato
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- css e scrip js -->
</head>
<body>
<!-- e tutto l'ambaradan form e presentazione grafico htmel e php-->
</body>
<?php
}
?>
se ho detto una cavolata butta via tutto
p.s.
perchè non metti i js tra i tag head?
 
Ciao Borgo Italia. Ho provato la tua soluzione e devo dire che va molto meglio anche se ho ancora qualche problemino.
Mi spiego: nella seconda pagina ho inserito due drop-down box e all'interno devo inserirci i nomi delle colonne di una tabella "collegata" alla username e password del login che l'utente effettua nella prima pagina.
Tra le option del drop-down box ho scritto il codice per inserire questo elenco, ma quando vado a testare la pagina .php oltre all'elenco visualizzo l'errore "undefined variable: campo_x in ...".
Un'altra cosa: il grafico continuo a non visualizzarlo ma questa volta la tabella collegata al grafico sì, e credo che il problema sia dovuto all'errore nei due drop-down box.
Secondo te quale può essere il problema?
Ti posto il codice che ho scritto
PHP:
<?php
session_start();
if(!isset($_SESSION['username']) || !isset($_SESSION['password']))
{
//entrambe o una delle due le sessioni non esistono, è un tentativo di accesso non autorizzato
//se per caso esiste una sola
  if(isset($_SESSION))
  {
    session_destroy();//la distruggo e riinvii dove ti pare
    header("location=01_login_agg1.php");
  }
  else
  {
//l'utente è registrato e loggato
  }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="it" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>MenùGrafico</title>
<style type="text/css">
#MENU {
    width: 200px;
    float: left;
}
#GRAFICO {
    width: 800px;
    float: left;
}
body {
    font-family: "Trebuchet MS";
    text-align: center;
}
</style>
</head>

<body>

<div id="MENU">
    Seleziona gli assi X e Y del grafico
    <br />
    <br />
    <form method="post">
        Asse -X-
        <br />
        <select name="asse_x" style="width: 170px">
        <option>
        <?php
   
    // leggo i valori di user e password

          $user = $_SESSION['username'];
     
          $pass = $_SESSION['password'];     

    // seleziono tutti i nomi delle colonne della tabella "$user" dal database "$monitoraggio"

          $con = mysql_connect ("localhost", "root","") or die ("Connessione al server fallita!!!".mysql_error());
     
          $db1 = mysql_select_db ("smart_structure", $con);

          if (!$db1)
     
          {
     
            die ("Connessione al database smartstructure fallita!!! ".mysql_error());
          }

          $committente = mysql_query("SELECT nome_committente FROM utenti WHERE username = '$user' AND password = '$pass' ORDER BY id");
 
          $rec_estr = mysql_fetch_assoc ($committente);

          $db1 = mysql_select_db ("$rec_estr[nome_committente]", $con);
     
          if (!$db1)
       
          {
            die ("Connessione al database $rec_estr[nome_committente] fallita! ".mysql_error());
          }     

          $drop_x = mysql_query("SHOW COLUMNS FROM $user");
       
          if ($campo_x == '')// ======RIGO DOVE MI MOSTRA ERRORE  NEL DROP-DOWN BOX======
       
          {
            echo '<option>Effettua una scelta</option>';
          }
          else
          {
            echo '<option>' .$campo_x.'</option>';
          }
     
          while ($record = mysql_fetch_array($drop_x))
          {
            echo '<option value='.$record[0].'>'.$record[0].'</option>';
          }   
   
        ?>   
        </option>
        </select>
        <br />
        <br />
        Asse -Y-
        <br />
        <select name="asse_y" style="width: 170px">
        <option>
        <?php
   
    // leggo i valori di user e password

          $user = $_SESSION['username'];
     
          $pass = $_SESSION['password'];     

    // seleziono tutti i nomi delle colonne della tabella "$user" dal database "$monitoraggio"

          $con = mysql_connect ("localhost", "root","") or die ("Connessione al server fallita!!!".mysql_error());
     
          $db2 = mysql_select_db ("smart_structure", $con);

          if (!$db2)
     
          {
     
            die ("Connessione al database smartstructure fallita!!! ".mysql_error());
          }

          $committente = mysql_query("SELECT nome_committente FROM utenti WHERE username = '$user' AND password = '$pass' ORDER BY id");
 
          $rec_estr = mysql_fetch_assoc ($committente);

          $db2 = mysql_select_db ("$rec_estr[nome_committente]", $con);
     
          if (!$db2)
       
          {
            die ("Connessione al database $rec_estr[nome_committente] fallita! ".mysql_error());
          }     

          $drop_y = mysql_query("SHOW COLUMNS FROM $user");
       
          if ($campo_y == '') // ======RIGO DOVE MI MOSTRA ERRORE  NEL DROP-DOWN BOX======
       
          {
            echo '<option>Effettua una scelta</option>';
          }
          else
          {
            echo '<option>' .$campo_y.'</option>';
          }
     
          while ($record = mysql_fetch_array($drop_y))
          {
            echo '<option value='.$record[0].'>'.$record[0].'</option>';
          }   
   
        ?>   
        </option>
        </select>
        <br />
        <br />
        <input name="crea" style="width: 170px" type="submit" value="Disegna il grafico" />
    </form>
</div>
<div id="GRAFICO">

<?php

  if (isset ($_POST['crea']))
  {


// seleziono tutto dalla tabella e faccio la query;

    $sql="SELECT * FROM $user";
    $sth = mysql_query($sql) or die('Query fallita: ' . mysql_error());

    $rows = array();
//flag is not needed
    $flag = true;
    $table = array();

    $selezione_x = $_POST['asse_x'];
    $selezione_y = $_POST['asse_y'];


// "costruisco" indicando i nomi delle colonne della tabella - una deve essere in formato stringa (asse x) ed una in formato number (asse y)

    $table['cols'] = array(

    array('label' => '$selezione_x', 'type' => 'string'),
    array('label' => '$selezione_y', 'type' => 'number')
);

    $rows = array();
    if ($sth)
    {
      while($r = mysql_fetch_assoc($sth))
      {
        $temp = array();

        $temp[] = array('v' => (string) $r[$selezione_x]);
        $temp[] = array('v' => (int) $r[$selezione_y]);
        $rows[] = array('c' => $temp);
      }
    }
      $table['rows'] = $rows;
      $jsonTable = json_encode($table);
  }

?>

<script type="text/javascript" src="jsapi"></script>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
      google.load("visualization", "1.1", {packages:["line"]});
      google.setOnLoadCallback(drawChart);
 
      function drawChart() {
      var data = new google.visualization.DataTable(<?=$jsonTable?>);

      var options = {
            chart: {       
            title: 'Monitoraggio',
            subtitle: 'Acquisizione dati'},
            series: {
              // DEFINISCO GLI ASSI A CUI DARE IL NOME
            0: { axis: 'AsseY'}
          },
          axes: {
          // AGGIUNGO IL NOME ALL'ASSE
          y: {
             AsseY: {label: 'Temperatura (°C)'}
           }
          }
        };             
      var chart = new google.charts.Line(document.getElementById('linechart_material'));

        chart.draw(data, options);
      }
    </script>

    <div id="linechart_material" style="width: 850px; height: 350px; margin-left:auto; margin-right:auto"></div>

    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1.1", {packages:["table"]});
      google.setOnLoadCallback(drawTable);

      function drawTable() {
        var data = new google.visualization.DataTable(<?=$jsonTable?>);

        var table = new google.visualization.Table(document.getElementById('table_div'));

        table.draw(data, {showRowNumber: true, width: '850px', height: '100%'});
      }
    </script>

    <div id="table_div"></div>

</div>

</body>

</html>
 
Ultima modifica di un moderatore:
ciao
a che righa ti da errore?
poi guarda che tutto quello che hai scirtto da <!DOCTYPE html PUBLIC....> a </html> deve andare all'iterno dell'if del loggato dove ho scritto //l'utente è registrato e loggato altrimenti qualcuno un po' furbo accede comunque alla pagina

riuscire a capire il perche dell'errore non è facile dovrei farmi il db e tabelle per provare
 
Ciao Borgo Italia.
Se quello che ho scritto da <!DOCTYPE html PUBLIC....> a </html> lo vado a inserire all'interno dell'if del loggato mi dà errore perché tra <!DOCTYPE html PUBLIC....> e </html> ho delle regole css e un pò di html. Lo puoi vedere nel mio ultimo post in cui ho anche inserito il codice che ho scritto.
Come dovrei fare?
Ciao, grazie.
 

Discussioni simili