Messaggistica interna

Il metodo query della tua classe ritorna l'istanza della classe in se e non il riferimento alla query che è stata svolta, dovresti fargli ritornare quest'ultimo invece.

Quindi poi da dei problemi con la fetch giusto?
In secondo luogo hai idea di come si riesca a tradurre questa cosa?
 
Il metodo query della tua classe ritorna l'istanza della classe in se e non il riferimento alla query che è stata svolta, dovresti fargli ritornare quest'ultimo invece.

perchè ora l'ho corretto cosi il codice:
PHP:
  #> Realizzazione Query
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data";
		$result=$this->con->query($sql); 
        $count = $this->con->affected_rows;   
    #> Controllo Errori
   if ($count!=""){
      
	   #> Formatto una tabella html
    echo '<table>';

    #> Recupero Informazioni
    while ($row = $this->con->fetch_assoc($result)) {
    
        #> Formatto una nuova riga nella tabella
        echo '<tr>';
        
        echo '<td>', $row['sender'], '</td>';
        echo '<td>', $row['content'], '</td>';
		 echo '<td>', $row['data'], '</td>';

        echo '</tr>';
    }

    #> Chiudo la formattazione della tabella
    echo '</table>';

    #> Libero le risorse impiegate dalla query
     $result->close();  

	} 
   else   die('Errore Mysql: '. $this->con->error());
   }

Ma l'errore è diventato questo:

Codice:
Ti sei connesso al database S3654125Errore nell Invio Fatal error: Call to undefined method mysqli::fetch_assoc() in /chroot/home/S3654125/public_html/functions/mysqldb.php on line 131
perchè non trovo il modo di fargli leggere fetch_assoc(), e ci ho provato in tutti i modi=(
 
Mi sà che mi sono confuso anche io: ero convinto che la tua classe usasse mysql, invece usi -a ragione- mysqli.
Allora.. il fetch_assoc non è un metodo della classe mysqli, ma di mysqli_result.

A tornare mysqli_result è il metodo query ( $this->con->query() ), di conseguenza esso viene archiviato in $result, quindi è lui che ha il metodo fetch_assoc().
Inoltre, il numero di righe estratte con la query di selezione è memorizzato nella proprietà num_rows che si ritrova sempre su $result.

Di conseguenza è così che dovresti svolgere la query:
PHP:
    #> Realizzazione Query
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data";
        $result = $this->con->query($sql); 
        $count = $result->num_rows;   
    #> Controllo Errori
   if ($count > 0){
      
       #> Formatto una tabella html
    echo '<table>';

    #> Recupero Informazioni
    while ($row = $result->fetch_assoc()) {
    
        #> Formatto una nuova riga nella tabella
        echo '<tr>';
        
        echo '<td>', $row['sender'], '</td>';
        echo '<td>', $row['content'], '</td>';
         echo '<td>', $row['data'], '</td>';

        echo '</tr>';
    }

    #> Chiudo la formattazione della tabella
    echo '</table>';

    #> Libero le risorse impiegate dalla query
     $result->free();  

    } 
   else   die('Errore Mysql: '. $this->con->error());
   }


Il metodo per liberare le risorse della classe mysqli_result, contenuto in $result, è free() e non close().
 
Mi sà che mi sono confuso anche io: ero convinto che la tua classe usasse mysql, invece usi -a ragione- mysqli.
Allora.. il fetch_assoc non è un metodo della classe mysqli, ma di mysqli_result.

A tornare mysqli_result è il metodo query ( $this->con->query() ), di conseguenza esso viene archiviato in $result, quindi è lui che ha il metodo fetch_assoc().
Inoltre, il numero di righe estratte con la query di selezione è memorizzato nella proprietà num_rows che si ritrova sempre su $result.

Di conseguenza è così che dovresti svolgere la query:
PHP:
    #> Realizzazione Query
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data";
        $result = $this->con->query($sql); 
        $count = $result->num_rows;   
    #> Controllo Errori
   if ($count > 0){
      
       #> Formatto una tabella html
    echo '<table>';

    #> Recupero Informazioni
    while ($row = $result->fetch_assoc()) {
    
        #> Formatto una nuova riga nella tabella
        echo '<tr>';
        
        echo '<td>', $row['sender'], '</td>';
        echo '<td>', $row['content'], '</td>';
         echo '<td>', $row['data'], '</td>';

        echo '</tr>';
    }

    #> Chiudo la formattazione della tabella
    echo '</table>';

    #> Libero le risorse impiegate dalla query
     $result->free();  

    } 
   else   die('Errore Mysql: '. $this->con->error());
   }


Il metodo per liberare le risorse della classe mysqli_result, contenuto in $result, è free() e non close().

Grazie sei stato fantastico davvero chiarissimo mi hai aiutato un sacco ho un ultimo problema dove mi mette le mail... io volevo una tabellina in basso sotto il titolo Inbox ma non riesco a mettere la mail li dentro come posso fare?
alllego lo screen di come è adesso

Screen.jpg
 
io volevo una tabellina in basso sotto il titolo Inbox ma non riesco a mettere la mail li dentro come posso fare?

Intendi le email ricevute? Dovrebbe bastarti una chiamata al metodo mailbox, gli mandi come parametro la variabile di sessione dell'utente collegato che vede la pagina e dovrebbe stamparti la tabella delle email ricevute.

Se ho capito male poi fammelo sapere ;)
 
Intendi le email ricevute? Dovrebbe bastarti una chiamata al metodo mailbox, gli mandi come parametro la variabile di sessione dell'utente collegato che vede la pagina e dovrebbe stamparti la tabella delle email ricevute.

Se ho capito male poi fammelo sapere ;)

Eh no la chiamata la fa già il mio main è questo:
PHP:
  $username=$_SESSION["username"];
  
   $conn = new mysqlClass; 
   $conn->connect(); 
   $title ="Benvenuto nella mail";
   
   
   
   $content= "
   			<h3> Scrivi un messaggio: </h3>    
   			<br>
   			<p> Destinatario </p>
   			
   			<table id=\"table\">
   			<form method=\"post\" name=\"sendmail\" action= \"send.php\">
   			<tr><td><input type=\"text\" name=\"dest\"></td></tr>
   			<tr><td>  <textarea name=\"testo\" rows=\"5\" cols=\"32\">Testo Mail</textarea></td></tr>
   		    <td colspan=\"2\" align=\"right\"><input type=\"submit\" value=\"Invia\"></td>
     	    <td colspan=\"2\" align=\"left\"><input type=\"reset\" value=\"Cancella\"></td>
   			</form>
   			</table>
   			<br>
   			
   			<h3> Inbox: </h3> ";
	


   
   $conn->mailbox($username);
   
  // costruzione della pagina
	
	include ('layout/header.php');
	include ('layout/menu.php');
	include ('layout/content.php');
	include ('layout/footer.php');

Secondo me c'e un casino con la stampa in quanto io mi sono diviso il sito per layout, la mia parte centrale è contenuta nel content.php che è il file che contiene la stampa:
PHP:
<?php
// stampa il contenuto di title e di content

echo '<div id="content">';

echo "<h1>$title</h1><br>";
echo "$content";
?>

Che è questo molto semplicemente, quindi la tabella dovrebbe essere in content per poi essere stampata ma non riesco a trovare il metodo hai idee?
 
No, è che il tuo metodo mailbox manda tutto fuori con gli echo, li stampa sul posto insomma. Per agganciarli alla variabile di contenuto che usi per il layout devi modificare il codice così:

PHP:
    #> Realizzazione Query 
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data"; 
        $result = $this->con->query($sql);  
        $count = $result->num_rows;    
    #> Controllo Errori 
   if ($count > 0){ 
       
       #> Formatto una tabella html 
    $output = '<table>'; 

    #> Recupero Informazioni 
    while ($row = $result->fetch_assoc()) { 
     
        #> Formatto una nuova riga nella tabella 
        $output .= '<tr>'; 
         
        $output .= '<td>', $row['sender'], '</td>'; 
        $output .= '<td>', $row['content'], '</td>'; 
        $output .= '<td>', $row['data'], '</td>'; 

        $output .= '</tr>'; 
    } 

    #> Chiudo la formattazione della tabella 
    $output .= '</table>'; 

    #> Libero le risorse impiegate dalla query 
     $result->free();   
     
     return $output;
    }  
   else   die('Errore Mysql: '. $this->con->error()); 
   }


E successivamente..
PHP:
 $username=$_SESSION["username"]; 
   
   $conn = new mysqlClass;  
   $conn->connect();  
   $title ="Benvenuto nella mail"; 
    
    
    
   $content= " 
               <h3> Scrivi un messaggio: </h3>     
               <br> 
               <p> Destinatario </p> 
                
               <table id=\"table\"> 
               <form method=\"post\" name=\"sendmail\" action= \"send.php\"> 
               <tr><td><input type=\"text\" name=\"dest\"></td></tr> 
               <tr><td>  <textarea name=\"testo\" rows=\"5\" cols=\"32\">Testo Mail</textarea></td></tr> 
               <td colspan=\"2\" align=\"right\"><input type=\"submit\" value=\"Invia\"></td> 
             <td colspan=\"2\" align=\"left\"><input type=\"reset\" value=\"Cancella\"></td> 
               </form> 
               </table> 
               <br> 
                
               <h3> Inbox: </h3> "; 
     


    
   $content .= $conn->mailbox($username); 
    
  // costruzione della pagina 
     
    include ('layout/header.php'); 
    include ('layout/menu.php'); 
    include ('layout/content.php'); 
    include ('layout/footer.php');
 
No, è che il tuo metodo mailbox manda tutto fuori con gli echo, li stampa sul posto insomma. Per agganciarli alla variabile di contenuto che usi per il layout devi modificare il codice così:

PHP:
    #> Realizzazione Query 
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data"; 
        $result = $this->con->query($sql);  
        $count = $result->num_rows;    
    #> Controllo Errori 
   if ($count > 0){ 
       
       #> Formatto una tabella html 
    $output = '<table>'; 

    #> Recupero Informazioni 
    while ($row = $result->fetch_assoc()) { 
     
        #> Formatto una nuova riga nella tabella 
        $output .= '<tr>'; 
         
        $output .= '<td>', $row['sender'], '</td>'; 
        $output .= '<td>', $row['content'], '</td>'; 
        $output .= '<td>', $row['data'], '</td>'; 

        $output .= '</tr>'; 
    } 

    #> Chiudo la formattazione della tabella 
    $output .= '</table>'; 

    #> Libero le risorse impiegate dalla query 
     $result->free();   
     
     return $output;
    }  
   else   die('Errore Mysql: '. $this->con->error()); 
   }


E successivamente..
PHP:
 $username=$_SESSION["username"]; 
   
   $conn = new mysqlClass;  
   $conn->connect();  
   $title ="Benvenuto nella mail"; 
    
    
    
   $content= " 
               <h3> Scrivi un messaggio: </h3>     
               <br> 
               <p> Destinatario </p> 
                
               <table id=\"table\"> 
               <form method=\"post\" name=\"sendmail\" action= \"send.php\"> 
               <tr><td><input type=\"text\" name=\"dest\"></td></tr> 
               <tr><td>  <textarea name=\"testo\" rows=\"5\" cols=\"32\">Testo Mail</textarea></td></tr> 
               <td colspan=\"2\" align=\"right\"><input type=\"submit\" value=\"Invia\"></td> 
             <td colspan=\"2\" align=\"left\"><input type=\"reset\" value=\"Cancella\"></td> 
               </form> 
               </table> 
               <br> 
                
               <h3> Inbox: </h3> "; 
     


    
   $content .= $conn->mailbox($username); 
    
  // costruzione della pagina 
     
    include ('layout/header.php'); 
    include ('layout/menu.php'); 
    include ('layout/content.php'); 
    include ('layout/footer.php');

Ma cosi mi da errore sulla virgola in questa parte:
PHP:
 $output .= '<td>', $row['sender'] , '</td>';  
 $output .= '<td>', $row['content'], '</td>';  
 $output .= '<td>', $row['data'], '</td>';

Come mai?

L'errore è:
Codice:
Parse error: syntax error, unexpected ',' in /chroot/home/S3654125/public_html/functions/mysqldb.php on line 136
 
Giusto, svista mia.
Le virgole andavano bene per gli echo, con le variabili la concatenazione di una stringa si fa col puntino.

PHP:
    #> Realizzazione Query  
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data";  
        $result = $this->con->query($sql);   
        $count = $result->num_rows;     
    #> Controllo Errori  
   if ($count > 0){  
        
       #> Formatto una tabella html  
    $output = '<table>';  

    #> Recupero Informazioni  
    while ($row = $result->fetch_assoc()) {  
      
        #> Formatto una nuova riga nella tabella  
        $output .= '<tr>';  
          
        $output .= '<td>'. $row['sender'] .'</td>';  
        $output .= '<td>'. $row['content'] .'</td>';  
        $output .= '<td>'. $row['data'] .'</td>';  

        $output .= '</tr>';  
    }  

    #> Chiudo la formattazione della tabella  
    $output .= '</table>';  

    #> Libero le risorse impiegate dalla query  
     $result->free();    
      
     return $output; 
    }   
   else   die('Errore Mysql: '. $this->con->error());  
   }


Non mi pare di essermi perso per strada nulla a questo giro.
 
Giusto, svista mia.
Le virgole andavano bene per gli echo, con le variabili la concatenazione di una stringa si fa col puntino.

PHP:
    #> Realizzazione Query  
    $sql = "SELECT * FROM mailbox WHERE destinat LIKE '$username' ORDER BY data";  
        $result = $this->con->query($sql);   
        $count = $result->num_rows;     
    #> Controllo Errori  
   if ($count > 0){  
        
       #> Formatto una tabella html  
    $output = '<table>';  

    #> Recupero Informazioni  
    while ($row = $result->fetch_assoc()) {  
      
        #> Formatto una nuova riga nella tabella  
        $output .= '<tr>';  
          
        $output .= '<td>'. $row['sender'] .'</td>';  
        $output .= '<td>'. $row['content'] .'</td>';  
        $output .= '<td>'. $row['data'] .'</td>';  

        $output .= '</tr>';  
    }  

    #> Chiudo la formattazione della tabella  
    $output .= '</table>';  

    #> Libero le risorse impiegate dalla query  
     $result->free();    
      
     return $output; 
    }   
   else   die('Errore Mysql: '. $this->con->error());  
   }


Non mi pare di essermi perso per strada nulla a questo giro.
Perfetto Grazie mille davvero non so come ringraziarti=)
 
Il metodo query della tua classe ritorna l'istanza della classe in se e non il riferimento alla query che è stata svolta, dovresti fargli ritornare quest'ultimo invece.

Tanto ho già aperto un altro post per un' altro problema =)

Ultima domanda se volessi farci un bottone a fianco della mail per far partire un pop up JS per leggerla completa come verrebbe?=)
 
Nella funzione mailbox viene generato l'output per la tabella, puoi benissimo creare lì un link collegato ad una funzione javascript.

Per il popup generalmente si usa il window.open ;)
 
Nella funzione mailbox viene generato l'output per la tabella, puoi benissimo creare lì un link collegato ad una funzione javascript.

Per il popup generalmente si usa il window.open ;)

Ora provo ma se riesci dai un occhiata all'altro post che ho appena messo che anche li è una bella gatta da pelare=)
 
Nella funzione mailbox viene generato l'output per la tabella, puoi benissimo creare lì un link collegato ad una funzione javascript.

Per il popup generalmente si usa il window.open ;)

Ho bisogno di nuovo di una mano, vorrei mettere questi benedetti tasti, uno per redirigere su una pagina x e l'altro per aprire il testo della mail, ho porvato un bel po di codice ma non riesco, riesci a darmi un ulteriore mano.
Grazie mille=)
 
Certo, potresti postare le prove che hai fatto?

Allora io usando la funzione precedente ho provato:
PHP:
public function search($search,$tipo)
{
     #> Realizzazione Query  
     if($tipo=="titolo")
    $sql = "SELECT * FROM annunci WHERE title LIKE '$search'";  
      
	 else {
	 		if($tipo=="ore") 
	        $sql = "SELECT * FROM annunci WHERE tempo LIKE '$search'";  
			
			else {
					if($tipo=="citta")
					 $sql = "SELECT * FROM annunci WHERE citta LIKE '$search'";  
	  
			     }
	       }
	  

	  
	    $result = $this->con->query($sql);   
        $count = $result->num_rows;     
    #> Controllo Errori  
    if ($count > 0){  
        
       #> Formatto una tabella html  
       $output='<form name=\"ann\" action=\"mail.php\">';
    $output = '<table id=my_mail>';  
    	
    

	$output.='<tr>';
      	$output.='<td>'."Utente".'</td>';	
      	$output.='<td>'."Titolo".'</td>';		
        $output.='<td>'."Tempo".'</td>';		
      	$output.='<td>'."Testo".'</td>';		
      	$output.='</tr>';	


    #> Recupero Informazioni  
    while ($row = $result->fetch_assoc()) {
      	
    // $testo=$row['content'];
	  
        #> Formatto una nuova riga nella tabella  
        $output .= '<tr>';  
        $output .= '<td>'. $row['utente'] . '</td>'; 
        $output .= '<td>'. $row['title'] . '</td>';  
        $output .= '<td>'. $row['tempo']." ore".'</td>';  
        $output .= '<td>'. $row['testo']. '</td>';
        
		$output.='<td>'.'<button>'."Invia Mail". '</button>'.'</td>';   
		

        $output .= '</tr>';  
    }  


    #> Chiudo la formattazione della tabella  
    $output .= '</table>';  
    $output.='</form>';
    #> Libero le risorse impiegate dalla query  
     $result->free();    
      
     return $output; 
    }   
 //   die('Errore Mysql: '.$result->error());
return false;
   }


Ho dovuto commentare il die perchè mi dava errore il problema di questa versione è che non mi fa il redirect a mail.php dopo il click su invia
 
Certo, potresti postare le prove che hai fatto?

Non riesco a farlo il codice adesso è così:

PHP:
public function search($search,$tipo)
{
     #> Realizzazione Query  
     if($tipo=="titolo")
    $sql = "SELECT * FROM annunci WHERE title LIKE '$search'";  
      
	 else {
	 		if($tipo=="ore") 
	        $sql = "SELECT * FROM annunci WHERE tempo LIKE '$search'";  
			
			else {
					if($tipo=="citta")
					 $sql = "SELECT * FROM annunci WHERE citta LIKE '$search'";  
	  
			     }
	       }
	  

	  
	    $result = $this->con->query($sql);   
        $count = $result->num_rows;     
    #> Controllo Errori  
    if ($count > 0){  
        
       #> Formatto una tabella html  
    $output='<form name="ann" action="prenota.php">';
    $output = '<table id=my_mail>';  
    	
    

	$output.='<tr>';
      	$output.='<td>'."Utente".'</td>';	
      	$output.='<td>'."Titolo".'</td>';		
        $output.='<td>'."Tempo".'</td>';		
      	$output.='<td>'."Testo".'</td>';		
      	$output.='</tr>';	


    #> Recupero Informazioni  
    while ($row = $result->fetch_assoc()) {
      	
   
	  
        #> Formatto una nuova riga nella tabella  
        $output .= '<tr>';  
        $output .= '<td>'. $row['utente'] . '</td>'; 
        $output .= '<td>'. $row['title'] . '</td>';  
        $output .= '<td>'. $row['tempo']." ore".'</td>';  
        $output .= '<td>'. $row['testo']. '</td>';
        
		$output.='<td>'.'<input type="submit" oncsubmit=alert(‘Sicuro?’);”>'.'</td>';   
		

        $output .= '</tr>';  
    }  


    #> Chiudo la formattazione della tabella  
    $output .= '</table>';  
    $output.='</form>';
    #> Libero le risorse impiegate dalla query  
     $result->free();    
      
     return $output; 
    }   
 //   die('Errore Mysql: '.$result->error());
return false;
   }

Ma non mi prende il tasto ho bisogno di aiuto...
Grazie
 

Discussioni simili