Problema select di attributi [RISOLTO]

di il
5 risposte

Problema select di attributi [RISOLTO]

Salve, dovrei risolvere il seguente problema: in pratica ho una pagina loginStud.php dove lo studente si logga (e fin qui tutto bene, sia sul controllo se è registrato o meno e sia sulla sessione(presumo)). Una volta loggato dovrebbe essere indirizzato a una pagina visualizza.php dove vengono mostrati in forma tabellare le materie e altre info con i rispettivi valori . Il problema è che fatto il login, vengo si indirizzato alla pagina visualizza.php, ma la tabella con i valori non compare, compare soltato l'immagine src caricata, insieme al CSS. Lascio di seguito: loginStud.php,visualizza.php,logout2.php,session2.php.
PS: mi scuso per il disordine nel codice, ho fatto tutto molto velocemente.

<?php
   include("config.php");
   session_start();
   
   if($_SERVER["REQUEST_METHOD"] == "POST") {
      // matricola and password sent from form 
      
      $myusername = mysqli_real_escape_string($db,$_POST['Matricola']);
      $mypassword = mysqli_real_escape_string($db,$_POST['Pass']); 
      
      $sql = "SELECT * FROM STUDENTE WHERE Matricola = '$myusername' and Pass_Stud = '$mypassword'";
      $result = mysqli_query($db,$sql);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
      //$active = $row['active'];
      
      $count = mysqli_num_rows($result);
      
      // If result matched $myusername and $mypassword, table row must be 1 row
		
      if($count == 1) {
        // session_register("myusername");
         $_SESSION['login_stud'] = $myusername;
         
         header("location: visualizza.php");
      }else {
         $error = "Your matricola or Password is invalid";
      }
   }
?>
<html>
   
   <head>
      <title>Login Studente</title>
      <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap">
     <link rel="stylesheet" href="style3.css">
      
   </head>
   <body>
        <div class="wrapper">
         <div class="title">
            Login Form
         </div>
         <form action="" method="post">
            <div class="field">
               <input type="text" name= "Matricola"required>
               <label>Matricola</label>
            </div>
            <div class="field">
               <input type="password" name="Pass" required>
               <label>Password</label>
            </div>
            
            <div class="field">
               <input type="submit" value="Login">
            </div>
            
         </form>
      </div>
           <!-- 
               <form action = "" method = "post">
                  <label>Matricola  :</label><input type = "text" name = "Matricola" class = "box"/><br /><br />
                  <label>Password  :</label><input type = "password" name = "Pass" class = "box" /><br/><br />
                  <input type = "submit" value = " Submit "/><br />
				  <br>
			
               </form> -->
   </body>
</html>
visualizza.php

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="refresh" content="5" >
    <link rel="stylesheet" type="text/css" href="style4.css" media="screen"/>

	<title> Registro </title>
</head>
<body>
    <header><img src="img2.png" width="300" height="300"/></header>
<?php
include('session2.php');
if ($_SERVER["REQUEST_METHOD"] == "POST") { // verifica se la richiesta ricevuta è un POST
	 $conn = new mysqli("localhost","root","","scuola");
	 if ($conn->connect_error) {
            die("connessione fallita: " . $conn->connect_error);
        } 
        
		 $sql = "
                   SELECT Mat,Condotta,Italiano,Matematica,Storia,Informatica,Inglese,Chimica,Media,Ritardi,Uscite,Assenze,Note FROM REGISTRO
                ";
	echo '<table cellspacing="5" cellpadding="5">
      <tr> 
        <th>Matricola</th> 
        <th>Condotta</th> 
        <th>Italiano</th> 
        <th>Matematica</th>  
        <th>Storia</th> 
        <th>Informatica</th> 
        <th>Inglese</th> 
        <th>Chimica</th> 	
        <th>Media</th> 
        <th>Ritardi</th> 
        <th>Uscite</th> 
        <th>Assenze</th> 
         <th> Note </th>		
      </tr>';
            if ($conn->query($sql) === TRUE) {
  
        $row_mat = $row["Mat"];
        $row_condotta = $row["Condotta"];
        $row_italiano = $row["Italiano"];
        $row_matematica = $row["Matematica"];
		 $row_storia = $row["Storia"];
        $row_informatica = $row["Informatica"];
        $row_inglese = $row["Inglese"];
        $row_chimica = $row["Chimica"];
		 $row_media = $row["Media"];
        $row_ritardi = $row["Ritardi"];
        $row_uscite = $row["Uscite"];
        $row_assenze = $row["Assenze"];
		$row_note = $row["Note"];
         
      
        echo '<tr> 
                <td>' . $row_mat . '</td> 
                <td>' . $row_condotta . '</td> 
                <td>' . $row_italiano . '</td> 
                <td>' . $row_matematica . '</td> 
				 <td>' . $row_storia . '</td> 
                <td>' . $row_informatica . '</td> 
                <td>' . $row_inglese . '</td> 
                <td>' . $row_chimica . '</td> 
				 <td>' . $row_media . '</td> 
                <td>' . $row_ritardi . '</td> 
                <td>' . $row_uscite . '</td> 
                <td>' . $row_assenze . '</td> 
				<td>' . $row_note . '</td>            
              </tr>';
			  echo "<br>";
			echo "Effettua logout: <a href=logout2.php>Logout</a>";
    } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
}
?>
	</table>
</body>
</html>
logout2.php

<?php
   session_start();
   
   if(session_destroy()) {
      header("Location: loginStud.php");
   }
?>
session2.php

<?php
   include('config.php');
   session_start();
   
   $user_check = $_SESSION['login_stud'];
   
   $ses_sql = mysqli_query($db,"select Matricola from STUDENTE where Matricola = '$user_check' ");
   
   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);
   
   $login_session = $row['Matricola'];
   
   if(!isset($_SESSION['login_stud'])){
      header("location:loginStud.php");
      die();
   }
?>

5 Risposte

  • Re: Problema select di attributi [RISOLTO]

    Sessione http con php? Una Sessione tramite cookie non prevede buffer di output, session_start() crea o recupera una precedente sessione.
    Se ho bisogno di creare una sessione da un modulo html avrò bisogno innanzitutto di creare [CODE]<?php session_start(); ?> nel modulo e l'action (i dati di arrivo) anche visualizza.php deve usare session_start() prima di altro output (compreso il markup html).
    Inoltre il meccanismo dei cookie non è istantaneo, cioè nella pagina del modulo se è la prima visita sicuramente non potrò essere già loggato e tantomeno non esiste il cookie, tramite session_start() e impostazioni php.ini la richiesta http risponde con un Set-Cookie: che prepara il cliente (browser) a usare Il Cookie: alla prossima richiesta.
  • Re: Problema select di attributi [RISOLTO]

    Ciao, grazie mille per la risposta! Ma in visualizzaz.php,includendo session 2.php,non sto già facendo il session_start()? Inoltre essendo che anche il markup html deve includerlo, conviene dichiarare la sessione con lo script php all'inizio? Sto affrontando ora le sessioni praticamente, quindi ho qualche dubbio.
    Ho aggiornato il codice ed ora effettivamente esce quello che deve,che ne pensi?
    
    
    <?php
    
    include('session2.php');
    ?>
    <!--
    if ($_SERVER["REQUEST_METHOD"] == "POST") { // verifica se la richiesta ricevuta è un POST
        
       
    	 $conn = new mysqli("localhost","root","","scuola");
    	 if ($conn->connect_error) {
                die("connessione fallita: " . $conn->connect_error);
            } 
            
    		 $sql = "
                       SELECT Mat,Condotta,Italiano,Matematica,Storia,Informatica,Inglese,Chimica,Media,Ritardi,Uscite,Assenze,Note FROM REGISTRO where Mat= '$_SESSION[log_stud]'
                    ";
    				/*if ($conn->query($sql) === TRUE) {
    					$tabella="";
    					while($row=($conn->query($sql))->fetch_assoc())
    					{
    						$tabella.="<tr><td>".$row["Mat"]."</td><td>".$row["Condotta"]."</td><td>".$row["Italiano"]."</td><td>".$row["Matematica"]."</td><td>".$row["Storia"]."</td><td>".$row["Informatica"]."</td><td>".$row["Inglese"]."</td><td>".$row["Chimica"]."</td><td>".$row["Media"]."</td><td>".$row["Ritardi"]."</td><td>".$row["Uscite"]."</td><td>".$row["Assenze"]."</td><td>".$row["Note"]."</td></tr>";
    					}
    				}else {
    				echo "Error: " . $sql . "<br>" . $conn->error;}*/
            
    					
    					/*
    	echo '<table cellspacing="5" cellpadding="5">
          <tr> 
            <th>Matricola</th> 
            <th>Condotta</th> 
            <th>Italiano</th> 
            <th>Matematica</th>  
            <th>Storia</th> 
            <th>Informatica</th> 
            <th>Inglese</th> 
            <th>Chimica</th> 	
            <th>Media</th> 
            <th>Ritardi</th> 
            <th>Uscite</th> 
            <th>Assenze</th> 
             <th> Note </th>		
          </tr>';
                if ($conn->query($sql) === TRUE) {
      
            $row_mat = $row["Mat"];
            $row_condotta = $row["Condotta"];
            $row_italiano = $row["Italiano"];
            $row_matematica = $row["Matematica"];
    		 $row_storia = $row["Storia"];
            $row_informatica = $row["Informatica"];
            $row_inglese = $row["Inglese"];
            $row_chimica = $row["Chimica"];
    		 $row_media = $row["Media"];
            $row_ritardi = $row["Ritardi"];
            $row_uscite = $row["Uscite"];
            $row_assenze = $row["Assenze"];
    		$row_note = $row["Note"];
             
          
            echo '<tr> 
                    <td>' . $row_mat . '</td> 
                    <td>' . $row_condotta . '</td> 
                    <td>' . $row_italiano . '</td> 
                    <td>' . $row_matematica . '</td> 
    				 <td>' . $row_storia . '</td> 
                    <td>' . $row_informatica . '</td> 
                    <td>' . $row_inglese . '</td> 
                    <td>' . $row_chimica . '</td> 
    				 <td>' . $row_media . '</td> 
                    <td>' . $row_ritardi . '</td> 
                    <td>' . $row_uscite . '</td> 
                    <td>' . $row_assenze . '</td> 
    				<td>' . $row_note . '</td> 
                    
                  </tr>';
    			  echo "<br>";
    			echo "Effettua logout: <a href=logout2.php>Logout</a>";
        } else {
                echo "Error: " . $sql . "<br>" . $conn->error;
            }
      */
    }
    ?>-->
    <html>
    <head>
        <meta http-equiv="refresh" content="5" >
        <link rel="stylesheet" type="text/css" href="style4.css" media="screen"/>
    
    	<title> Registro </title>
    
    </head>
    
    <body>
        <header><img src="img2.png" width="300" height="300"/></header>
     <div class="container">
     <h2> Registro</h2>
     <table>
         <thead>
    	   <tr> 
    	       <th>Matricola</th>
    		   <th>Condotta</th>
    		   <th>Italiano</th>
    		   <th>Matematica</th>
    		   <th>Storia</th>
    		   <th>Informatica</th>
    		   <th>Inglese</th>
    		   <th>Chimica</th>
    		   <th>Media</th>
    		   <th>Ritardi</th>
    		   <th>Uscite</th>
    		   <th>Assenze</th>
    		   <th>Note</th>
    		   </tr>
    		   </thead>
    		   
    		   <tbody>
    		 <?php
    		 echo "<br>";
    			echo "Effettua logout: <a href=logout2.php>Logout</a>";
    		
        
       
    	 $conn = new mysqli("localhost","root","","scuola");
    	 if ($conn->connect_error) {
                die("connessione fallita: " . $conn->connect_error);
            } 
            
    		 $sql = "
                       SELECT Mat,Condotta,Italiano,Matematica,Storia,Informatica,Inglese,Chimica,Media,Ritardi,Uscite,Assenze,Note FROM REGISTRO WHERE Mat='".$_SESSION['login_stud']."'
                    ";
    				$result=$conn->query($sql);
    		if ($result->num_rows>0) {
      while($row=$result->fetch_assoc()){
            $row_mat = $row["Mat"];
            $row_condotta = $row["Condotta"];
            $row_italiano = $row["Italiano"];
            $row_matematica = $row["Matematica"];
    		 $row_storia = $row["Storia"];
            $row_informatica = $row["Informatica"];
            $row_inglese = $row["Inglese"];
            $row_chimica = $row["Chimica"];
    		 $row_media = $row["Media"];
            $row_ritardi = $row["Ritardi"];
            $row_uscite = $row["Uscite"];
            $row_assenze = $row["Assenze"];
    		$row_note = $row["Note"];
             
          
            echo '<tr> 
                    <td>' . $row_mat . '</td> 
                    <td>' . $row_condotta . '</td> 
                    <td>' . $row_italiano . '</td> 
                    <td>' . $row_matematica . '</td> 
    				 <td>' . $row_storia . '</td> 
                    <td>' . $row_informatica . '</td> 
                    <td>' . $row_inglese . '</td> 
                    <td>' . $row_chimica . '</td> 
    				 <td>' . $row_media . '</td> 
                    <td>' . $row_ritardi . '</td> 
                    <td>' . $row_uscite . '</td> 
                    <td>' . $row_assenze . '</td> 
    				<td>' . $row_note . '</td> 
                    
                  </tr>';
    			  
    		}}else {
                echo "Error: " . $sql . "<br>" . $conn->error;
    		 } 
    			  ?>
    		   
    		   </tbody>
    </table>
    </div>
    </body>
    </html>
    
    
    
    
  • Re: Problema select di attributi [RISOLTO]

    La pagina visualizza.php è composta da markup html (buffer di output) mentre occorre dapprima utilizzare session_start() semmai ti devi preparare a creare il cookie altrimenti in php si traduce in errore (esiste il bug che effettivamente è stato risolto da php 7.2 anche nel caso non si usa il cookie e produce comunque errore) [CODE]//Dovrebbe essere sufficiente impostare, poiché la visualizzazione e altre personalizzazioni php.ini sono impostate come predefinito error_reporting(PHP_INT_MAX); Nel caso non esiste, non viene trovato o occorre aggiornare il header COOKIE (solitamente coincide con la prima volta della visualizzazione alla pagina per i primi due casi, mentre l'aggiornamento occorre per usare un COOKIE con valore temporale alla richiesta tramite Set-Cookie nella risposta http).
    1)Cliente Richiesta http
    2)Risposta http Set-Cookie aggiunta automaticamente da php
    3)Redirect http o altra richiesta http per consentire al cliente di inviare Cookie:
    4)Adesso ogni richiesta http può avere il Cookie:

    Come già menzionato in php la funzione session_start crea o recupera una sessione, un header necessità la priorità rispetto al contenuto, senza addentrarci nello specifico di http il markup html è contenuto.
    Maggiori dettagli spesso sono presenti nel manuale online https://www.php.net/manual/en/function.session-start.php
    session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie.

    Note:

    To use cookie-based sessions, session_start() must be called before outputting anything to the browser.
  • Re: Problema select di attributi [RISOLTO]

    Grazie mille,credo di aver risolto!
  • Re: Problema select di attributi [RISOLTO]

    Quando dovrai approfondire devi selezionare solo una sessione http valida e un buon compromesso è un limite temporale come in questo esempio di rigenerazione id https://www.php.net/manual/en/function.session-regenerate-id.php
    Altrimenti potresti avere cookie scaduto o comunque non validi
    Sebbene richiede una conoscenza più ampia, tra cui basi di programmazione e scavare tra i bug in php etc.
Devi accedere o registrarti per scrivere nel forum
5 risposte