PhpAdmin-MySQL com MAMP

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio
ciao
non capisco esattamente dove l'hai messo
la funzione puoi metterla in cima alla pagina (se ha un session_start conviene dopo)
poi posta la parte di codice che legge e stampa i messaggi
 
Per il contamessaggi che devi fare, io direi: a video 10 (poi me lo regolo io) nella casella messaggi(0) quella in alto nel menu fargli stampare il totale. poi nella casella in archivio(0), fai stampare solo quelli in archivio.

In questo modo le caselle si autoincrementano da sole


img01n.jpg
 
Ultima modifica:
ciao
prima di procedere un paio di domande:
1) per fare l'archivio fai una tabella uguale a quella "messaggi" chiamata es. "archivio"?
2) con che criterio passi i messaggi in archivio (es. più vecchi di un mese)? e vuoi che avvenga in automatico?
3) se usi il criterio dei piu vecchi ti conviene inserire la paginazione perche (es) se metti limt 10 ma i messaggi "giovani" sono 20 vedi i primi 10, ma i secondi 10 no sino a che non passano in archivio
4) i messaggi in archivio più vecchi di un (due...) anno fa eliminati completamente?

secondo me un buon sistema dovrebbe essere
a) visualizza i messaggi non più vecchi di 1 (o 2 o 3...) mese (anzi 30 o 60 o 90.... giorni fa)
b) i messaggi non più vecchi di xy mesi si paginano 2 o 3 o...10 o ... alla volta (per non far diventare una pagina un lenzuolo)
c) i messaggi piu vecchi di xy mesi si passano direttamente in archivio
 
ciao
prima di procedere un paio di domande:
1) per fare l'archivio fai una tabella uguale a quella "messaggi" chiamata es. "archivio"?
2) con che criterio passi i messaggi in archivio (es. più vecchi di un mese)? e vuoi che avvenga in automatico?
3) se usi il criterio dei piu vecchi ti conviene inserire la paginazione perche (es) se metti limt 10 ma i messaggi "giovani" sono 20 vedi i primi 10, ma i secondi 10 no sino a che non passano in archivio
4) i messaggi in archivio più vecchi di un (due...) anno fa eliminati completamente?

secondo me un buon sistema dovrebbe essere
a) visualizza i messaggi non più vecchi di 1 (o 2 o 3...) mese (anzi 30 o 60 o 90.... giorni fa)
b) i messaggi non più vecchi di xy mesi si paginano 2 o 3 o...10 o ... alla volta (per non far diventare una pagina un lenzuolo)
c) i messaggi piu vecchi di xy mesi si passano direttamente in archivio

Inanzitutto questi post che scriveranno gli utenti, sono Successi, perciò non verranno mai eliminati, perché saranno "la forza del prodotto"

1. Posso fare anche una tabella chiamata archivio, non so dimmi tu
2. Non posso dirti ancora con quale criterio perché non so quanti ne scriveranno, perciò per ora, io propongo 10 sempre a video e all'arrivo di uno nuovo, il più vecchio si archivia in automatico in un file che ho creato "archivio_successi.php" che verrà linkato (vedi mio ultimo post col link)
3. Per la paginazione vedi tu (non ho ancora capito bene cos'è)
4. Non eliminare niente
 
Ultima modifica:
ciao
1. Posso fare anche una tabella chiamata archivio, non so dimmi tu
si conviene, a parte il nome della tabella identica come nome dei campi e tipo
2. Non posso dirti ancora con quale criterio perché non so quanti ne scriveranno, perciò per ora, io propongo 10 sempre a video e all'arrivo di uno nuovo, il più vecchio si archivia in automatico in un file che ho creato "archivio_successi.php" che verrà linkato (vedi mio ultimo post col link)
ok tanto il limit lo puoi modificare anche in seguito, e, se ti servirà, faremo in seguito la paginazione
4. Non eliminare niente
ok, solo dalla tabella messaggi verranno eliminati quei messaggi che vengono trasferiti alla tabella archivio.
in seguito, sempre se ti serve, potrai fare un disarchiva cioè un ripristina messaggio.

quando hai fatto la tabella posta il nome esatto che prepariamo il tutto (o quasi:))
 
ciao
ok, faccio e poi posto

Tra l'altro ho fatto delle prove, i campi ip e bandierina non servono, li ho tolti dalla tabella e vedo che nei box i valori si stampano lo stesso

Il codice è questo, tu dici di lasciare i campi nella tabella, o non servono proprio?
PHP:
<?php 
//Tutto questo codice recupera l'ip del Visitor e lo mette a video con Country e bandierina
//Lo richiama sia il form dei successi.php che il form colonna dx (Icona mail)
function iptocountry($ip) {
$numbers = explode(".", $ip); 
include("ip_flags/ip_files/".$numbers[0].".php"); 
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);
foreach($ranges as $key => $value) { 
if($key<=$code) {
if($ranges[$key][0]>=$code) {
$two_letter_country_code=$ranges[$key][1];
break;
} 
 } 
  } 
if ($two_letter_country_code=="") {
$two_letter_country_code="unknown";
}
return $two_letter_country_code; 
} 
$ip=$_SERVER['REMOTE_ADDR']; 
$two_letter_country_code=iptocountry($ip);
include("ip_flags/ip_files/countries.php"); 
$file_to_check="ip_flags/flags/$two_letter_country_code.gif";
if (file_exists($file_to_check)) {
$bandierina ="<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/$file_to_check\" width=\"16\" height=\"12\" alt=\"".$countries[$two_letter_country_code][1]."\" title=\"".$countries[$two_letter_country_code][1]."\" />";
} 
else
{ 
$bandierina ="<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/ip_flags/flags/noflag.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}
?>

$q="INSERT INTO successi(data_localeS,oggettoS,messaggioS,nomeS,cittaS,suoemailS)
       VALUES('$data_localeS','$oggettoS','$messaggioS','$nomeS','$cittaS','$suoemailS')";
 
Ultima modifica:
ciao
ecco la parte per il trasferimento dei messaggi dalla tabella messaggi alla tabella archivio.
la parte da inserire è compresa tra i commenti indicati con //*****
dovresti capire dove inserirlo
PHP:
<?php
//....
$numero=20;//eventualmente dopo metteremo una paginazione in modo da poterli vedere tutti
//in pratica gli dico di selzionare/leggere tutti i campi avendo messo SELECT * in ordine decrescente di id
//limitando la selezione/lettura a 20 record
$q="SELECT * FROM messaggi ORDER BY id LIMIT $numero";
//esegui
$ris=mysql_query($q);
//convine verificare che ci siano dei record
if(mysql_num_rows($ris) > 0){//conto i record
    //leggo un record alla volta e lo stampo
    while($riga=mysql_fetch_array($ris)){//$riga diventa un array associativo con chiave "nome del campo" e suo valore
        //a scopo didattico faccio cosi, poi se vuoi puoi usare l'array direttamente
        //es. echo "<div class=\"oggettoBox\">".$riga['oggettoS']."</div>";
        //comunque come preferisci
        $data=$riga['data_localeS'];
		//ecc...
		echo "<div class=\"ipBox\">Ip: $ip</div>";
        echo "<div class=\"bandierinaBox\">$bandierina<div class=\"nazione\">".$countries[$two_letter_country_code][1]."</div></div>";
        echo "</div>";//stampas
    }
//*********da qui inizia la parte che trasferisce in archivio post
//leggiamo tra i post estratti il valore minimo dell'id (unisco la querry direttamente all'esecuzione)
$ris=mysql_query("SELECT MIN(id) FROM messaggi ORDER BY id LIMIT $numero");
$riga=mysql_fetch_array($ris);
//verifico che ci siano record precedenti
$ris=mysql_query("SELECT * FROM messaggi WHERE id < ".$riga);
if(mysql_num_rows($ris)>0){//se maggiore di 0 ci sono
	while($riga=mysql_fetch_array($ris)){
		//estraggo tutti i dati (da verificare quelli che hai tenuto)
		$id=$riga['id'];
		$data=$riga['data_localeS'];
        $oggetto=$riga['oggettoS'];
        $messaggio=$riga['messaggioS'];
		//ecc......
		//salvo il messaggio nella tabella archivio
		$ris_a=mysql_query("INSER INTO archivio(data_localeS,oggettoS,messaggioS,nomeS,cittaS,suoemailS,ip,bandierina)
       VALUES('$data_localeS','$oggettoS','$messaggioS','$nomeS','$cittaS','$suoemailS','$ip','$bandierina')");
	   //note che l'insert è uguale a quello che hai fatto per la tabella messaggi
	   //avendo salvato in tab. archivio posso eliminarlo dalla tab. messaggi
	   $ris_d=mysql_query("DELETE FROM messaggio WHERE id=$id");
	}
}
//********fine del trasferimento
}else{
    echo "<div class=\"stampaS\">non ci sono messaggi</div>";
}
//da qui in poi tutta la parte dell'insert e poi il form che hai gia fatto 
//............
?>
piccola spiegazione:
avendo messo $limit = 20 mostra in ordine decrescente 20 messaggi con id (es)
35
34
....
16
15
quando viene inserito un nuovo messaggio quasto avra id =36 per cui in messaggi ci sarà
36
35
34
....
16
15 (questo non lo visualizza essendo limit =20)
quindi quando si apre la pagina oltre a leggere i messaggi cerca quale è l'id minore tra i 20 visualizzati che sarà 16
per cui prende tutti i messaggi con id minore di 16 (quini dal 15 in giù) li trasferisce in archivio e li elimina da messaggi

per poi leggere i messaggi in archivio fai la pagina (es) archivio.php richiamata dal link del menù archivio e
fai uguale (salvo il nome della tabella che sarà "archivio") a quello che hai fatto per leggere i messaggi in tab messaggi.
alla prossima la numerazione

p.s.
se hai eliminato bandierina e ip (anche dalla tabella?) eliminali anche dagli INSERT
-prova e sappimi dire (per funzionare comunque devi avere in tabella messaggi un numero di messaggi maggiore del limit che definisci)
 
Qualcosa, non va, come vedi ho impostato a 3 max, me ne stampa 3, dal 4 in poi si stampano solo nella tabella successi (non in quella archivio).

Nel menu superiore rimane vuoto messaggi() come pure in In archivio

PHP:
<?php
$numero=3; // Limite max successi da visualizzare
// Legge tutti i campi in ordine decrescente
$q="SELECT * FROM successi ORDER BY id LIMIT $numero"; 
// Lancio la query
$ris=mysql_query($q); 

if(mysql_num_rows($ris) > 0) { // Conto i record (i campi nella tabella del db)
    // Leggo un record alla volta e lo stampo 
    while($riga=mysql_fetch_array($ris)) {
        echo "<div class=\"stampaS\">"; 
        echo "<div class=\"dataBox\">".crea_data($riga['data_localeS'])."</div>";  
        echo "<div class=\"campiAltiS\">"; 
        echo "<div class=\"oggettoBox\">".$riga['oggettoS']."</div>"; 
        echo "</div>"; // campiAltiS  
        echo "<div class=\"messaggioBox\">".$riga['messaggioS']."</div>"; 
        echo "<div class=\"bassoS\"></div>"; // bassoS  
        echo "<div class=\"nomeBox\">".$riga['nomeS'].",</div>"; 
        if (!empty($riga['cittaS'])) {  // Se il campo è vuoto non stampa neanche la virgola 
            echo "<div class=\"cittaBox\">".$riga['cittaS'].",</div>"; 
        } 
        if (!empty($riga['suoemailS'])) {  // Se il campo è vuoto non stampa neanche il trattino 
            echo "<div class=\"mailBox\">".$riga['suoemailS']."&nbsp;&nbsp;-&nbsp;&nbsp;</div>";  
        }  
        echo "<div class=\"ipBox\">Ip: $ip</div>"; 
        echo "<div class=\"bandierinaBox\">$bandierina<div class=\"nazione\">".$countries[$two_letter_country_code][1]."</div></div>"; 
        echo "</div>";//stampaS 
    } 

//*********da qui inizia la parte che trasferisce in archivio post 
//leggiamo tra i post estratti il valore minimo dell'id (unisco la querry direttamente all'esecuzione)
$ris=mysql_query("SELECT MIN(id) FROM successi ORDER BY id LIMIT $numero"); 
$riga=mysql_fetch_array($ris); 
//verifico che ci siano record precedenti 
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga); 
if(mysql_num_rows($ris)>0) {//se maggiore di 0 ci sono 
    while($riga=mysql_fetch_array($ris)) { 
        //estraggo tutti i dati (da verificare quelli che hai tenuto) 
        $id=$riga['id']; 
        $data=$riga['data_localeS']; 
        $oggettoS=$riga['oggettoS']; 
        $messaggioS=$riga['messaggioS']; 
        $nomeS=$riga['nomeS'];  
        $cittaS=$riga['cittaS']; 
        $suoemailS=$riga['suoemailS'];
        $ip; 
        $bandierina;
        //salvo il messaggio nella tabella archivio 
        $ris_a=mysql_query("INSER INTO archivio(data_localeS,oggettoS,messaggioS,nomeS,cittaS,suoemailS,ip,bandierina) 
       VALUES('$data_localeS','$oggettoS','$messaggioS','$nomeS','$cittaS','$suoemailS','$ip','$bandierina')"); 
       //nota che l'insert è uguale a quello che hai fatto per la tabella successi 
       //avendo salvato in tab. archivio posso eliminarlo dalla tab. successi 
       $ris_d=mysql_query("DELETE FROM successi WHERE id=$id"); 
    } 
  }
}
//********fine del trasferimento 

else {  
    echo "<font style=\"font-size:18px;color:#0000ff;\">Non ci sono ancora Successi, volevi scriverne uno?</font>"; 
}

PS: il numero di id nella tabella successi ha superato il n°100 a forza di prove
 
Ultima modifica:
ciao
intanto un mio errore
correggi
//verifico che ci siano record precedenti
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga);
in
//verifico che ci siano record precedenti
PHP:
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga['id']);

un'altra cosa, forse mi sono confuso, la tabella si chiama "successi" o "messaggi"
verifica sia nelle SELECT che in DELETE


poi non ti ho ancora messo a punto il conteggio
 
Ultima modifica:
ciao
intanto un mio errore
correggi
//verifico che ci siano record precedenti
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga);
in
//verifico che ci siano record precedenti
PHP:
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga['id']);

un'altra cosa, forse mi sono confuso, la tabella si chiama "successi" o "messaggi"
verifica sia nelle SELECT che in DELETE


poi non ti ho ancora messo a punto il conteggio
Ho corretto, si chiama una successi e l'altra archivio
 
ciao
quello ok, lo faceva anche prima, ma guarda con phpmyadmin se le due tabelle si sono modificate

Non invia solo in quella successi, in quella archivio non entra niente

PHP:
<?php
$numero=3; // Limite max successi da visualizzare
// Legge tutti i campi in ordine decrescente
$q="SELECT * FROM successi ORDER BY id LIMIT $numero"; 
// Lancio la query
$ris=mysql_query($q); 

if(mysql_num_rows($ris) > 0) { // Conto i record (i campi nella tabella del db)
    // Leggo un record alla volta e lo stampo 
    while($riga=mysql_fetch_array($ris)) {
        echo "<div class=\"stampaS\">"; 
        echo "<div class=\"dataBox\">".crea_data($riga['data_localeS'])."</div>";  
        echo "<div class=\"campiAltiS\">"; 
        echo "<div class=\"oggettoBox\">".$riga['oggettoS']."</div>"; 
        echo "</div>"; // campiAltiS  
        echo "<div class=\"messaggioBox\">".$riga['messaggioS']."</div>"; 
        echo "<div class=\"bassoS\"></div>"; // bassoS  
        echo "<div class=\"nomeBox\">".$riga['nomeS'].",</div>"; 
        if (!empty($riga['cittaS'])) {  // Se il campo è vuoto non stampa neanche la virgola 
            echo "<div class=\"cittaBox\">".$riga['cittaS'].",</div>"; 
        } 
        if (!empty($riga['suoemailS'])) {  // Se il campo è vuoto non stampa neanche il trattino 
            echo "<div class=\"mailBox\">".$riga['suoemailS']."&nbsp;&nbsp;-&nbsp;&nbsp;</div>";  
        }  
        echo "<div class=\"ipBox\">Ip: $ip</div>"; 
        echo "<div class=\"bandierinaBox\">$bandierina<div class=\"nazione\">".$countries[$two_letter_country_code][1]."</div></div>"; 
        echo "</div>";//stampaS 
    } 

//*********da qui inizia la parte che trasferisce i records nella tabella archivio
//leggiamo tra i post estratti il valore minimo dell'id
$ris=mysql_query("SELECT MIN(id) FROM successi ORDER BY id LIMIT $numero");
// Lancio la query          
$riga=mysql_fetch_array($ris); 
//verifico che ci siano record precedenti 
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga['id']);  
if(mysql_num_rows($ris)>0) { //se maggiore di 0 ci sono 
    while($riga=mysql_fetch_array($ris)) { 
        //estraggo tutti i dati del successo col valore minimo id dalla tabella successi...
        $id=$riga['id']; 
        $data_localeS=crea_data($riga['data_localeS']); 
        $oggettoS=$riga['oggettoS']; 
        $messaggioS=$riga['messaggioS']; 
        $nomeS=$riga['nomeS'];  
        $cittaS=$riga['cittaS']; 
        $suoemailS=$riga['suoemailS'];
        $ip; 
        $bandierina;
        //...e salvo il successo nella tabella archivio, l'insert è uguale a quello che che c'è nella tabella successi  
        $ris_a=mysql_query("INSERT INTO archivio(data_localeS,oggettoS,messaggioS,nomeS,cittaS,suoemailS,ip,bandierina) 
       VALUES('$data_localeS','$oggettoS','$messaggioS','$nomeS','$cittaS','$suoemailS','$ip','$bandierina')"); 
       //avendo salvato in tabella archivio posso eliminarlo dalla tabella successi 
       $ris_d=mysql_query("DELETE FROM successi WHERE id=$id"); 
    } 
  }
}
//********fine del trasferimento 
else {  
echo "<font style=\"font-size:18px;color:#0000ff;\">Non ci sono ancora Successi, volevi scriverne uno?</font>"; 
} 
    
function crea_data($t){ 
...
 
ciao
fammi queste aggiunte che poi toglierai
PHP:
<?php
//...............
//leggiamo tra i post estratti il valore minimo dell'id
$ris=mysql_query("SELECT MIN(id) FROM successi ORDER BY id LIMIT $numero");
// Lancio la query          
$riga=mysql_fetch_array($ris);
var_dump($riga['id']);//<--************** qui e
//verifico che ci siano record precedenti 
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga['id']);  
if(mysql_num_rows($ris)>0) { //se maggiore di 0 ci sono 
    while($riga=mysql_fetch_array($ris)) { 
        //estraggo tutti i dati del successo col valore minimo id dalla tabella successi...
        $id=$riga['id']; 
		var_dump($riga['id']);//<--************** qui 
        $data_localeS=crea_data($riga['data_localeS']); 
        $oggettoS=$riga['oggettoS']; 
        $messaggioS=$riga['messaggioS']; 
//...........
?>
e mi dici cosa risulta
 
ciao
fammi queste aggiunte che poi toglierai
PHP:
<?php
//...............
//leggiamo tra i post estratti il valore minimo dell'id
$ris=mysql_query("SELECT MIN(id) FROM successi ORDER BY id LIMIT $numero");
// Lancio la query          
$riga=mysql_fetch_array($ris);
var_dump($riga['id']);//<--************** qui e
//verifico che ci siano record precedenti 
$ris=mysql_query("SELECT * FROM successi WHERE id < ".$riga['id']);  
if(mysql_num_rows($ris)>0) { //se maggiore di 0 ci sono 
    while($riga=mysql_fetch_array($ris)) { 
        //estraggo tutti i dati del successo col valore minimo id dalla tabella successi...
        $id=$riga['id']; 
		var_dump($riga['id']);//<--************** qui 
        $data_localeS=crea_data($riga['data_localeS']); 
        $oggettoS=$riga['oggettoS']; 
        $messaggioS=$riga['messaggioS']; 
//...........
?>
e mi dici cosa risulta

Si è stampato nella tabella successi, ma a video NULL
 

Discussioni simili