PhpAdmin-MySQL com MAMP

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio
ciao

credo di aver trovato l'inghippo

per semplificare mettiamo numero =10
id testo
--------
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
se inserisci un messaggio risulta $vecchi_id=$riga['massimo']-$numero < 0
9 i
se inserisci un messaggio risulta $vecchi_id=$riga['massimo']-$numero < 0
10 l
se inserisci un messaggio risulta $vecchi_id=$riga['massimo']-$numero = 0

quindi correggi la riga dell'if

PHP:
<?php
//....
$ris=mysql_query("SELECT MAX(id) as massimo FROM successi ORDER BY id DESC");
$vecchi_id=$riga['massimo']-$numero;
if($vecchi_id >= 0){//cioè maggiore o uguale a 0
    //verifico che ci siano record precedenti
    $ris=mysql_query("SELECT * FROM successi WHERE id <= $vecchi_id");
//....
?>
prova e sappimi dire

La mia parte di codice e la tua sono uguali, il mio ha una riga in più,

Mio

PHP:
$ris=mysql_query("SELECT MAX(id) as massimo FROM successi ORDER BY id DESC"); 
// Lancio la query  
$riga=mysql_fetch_array($ris); 
$vecchi_id=$riga['massimo']-$numero; 
if($vecchi_id > 0){ 
    //verifico che ci siano record precedenti 
    $ris=mysql_query("SELECT * FROM successi WHERE id <= $vecchi_id");

Tuo
PHP:
$ris=mysql_query("SELECT MAX(id) as massimo FROM successi ORDER BY id DESC"); 
$vecchi_id=$riga['massimo']-$numero; 
if($vecchi_id >= 0){//cioè maggiore o uguale a 0 
    //verifico che ci siano record precedenti 
    $ris=mysql_query("SELECT * FROM successi WHERE id <= $vecchi_id");
 
Ho aggiunto l'uguale = ma il risultato non è cambiato.
Il problema è che non stampa l'ultimo post (il più recente) e di conseguenza non sposta tutta la catena in archivio
 
ciao
sono diversi perche per errore avevo copiato quello errato (vedi post) precedenti.
una curiosita, ma all'inizio non stampava l'ultimo in cima?
 
ciao
sono diversi perche per errore avevo copiato quello errato (vedi post) precedenti.
una curiosita, ma all'inizio non stampava l'ultimo in cima?

Si, ma avendo il form sotto ho invertito la sequenza con ASC

PHP:
<?php
$numero=3; // Limite max successi da visualizzare
// Legge tutti i records nella tabella successi dall'alto verso il basso e li estrae in ordine crescente
$q="SELECT * FROM successi ORDER BY id ASC 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)) {
        //verifico se il conteggio è pari o dispari e in alternato cambio il colore
        if($conteggio%2==0) {
        $sfondo="#f7f7f7";
        }
        else {
        $sfondo="#e9eff1"; 
        } 
        echo "<div class=\"stampaS\" style=\"background-color: $sfondo \">"; 
        echo "<div class=\"dataBox\">".crea_data($riga['data_localeS'])."<div class=\"idSuccessiSX\"></div><div class=\"idSuccessiDX\">#".$riga['id']."     </div></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'].",&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 
        $conteggio ++; // a ogni giro incremento di uno 
    }
 //*********Inizio trasferimento nella tabella archivio
 //Leggiamo tra i post estratti il valore max dell'id
$ris=mysql_query("SELECT MAX(id) as massimo FROM successi ORDER BY id DESC"); 
// Lancio la query  
$riga=mysql_fetch_array($ris); 
$vecchi_id=$riga['massimo']-$numero; 
if($vecchi_id >= 0) { //cioè maggiore o uguale a 0  
    //verifico che ci siano record precedenti 
    $ris=mysql_query("SELECT * FROM successi WHERE id <= $vecchi_id"); 
    if(mysql_num_rows($ris)>0) { //se maggiore di 0 ci sono records 
        while($riga=mysql_fetch_array($ris)) { 
             //estraggo tutti i dati del successo col valore minimo id dalla tabella successi...
            $id=$riga['id']; 
            $data_localeS=$riga['data_localeS']; 
            $oggettoS=$riga['oggettoS']; 
            $messaggioS=$riga['messaggioS']; 
            $nomeS=$riga['nomeS']; 
            $cittaS=$riga['cittaS']; 
            $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,ip,bandierina) 
            VALUES('$data_localeS','$oggettoS','$messaggioS','$nomeS','$cittaS','$ip','$bandierina')"); 
             //avendo salvato in tabella archivio posso eliminarlo dalla tabella successi
            $ris_d=mysql_query("DELETE FROM successi WHERE id=$id"); 
        } 
    } 
  } 
}

..
 
ciao
1) ho riprovato lo script dove legge e ho provato ad aggiungere dei record e rimane l'ultimo in cima e il più vecchio va in archivio.
2) per avere l'aggiornamento dei contatori prova ad aggiungere, dove fa il trasferimento, la riga sotto il delete
PHP:
<?php
//..... alle righe dove fa il trasferimento aggiungi
			//avendo salvato in tab. archivio posso eliminarlo dalla tab. messaggi
			$ris_d=mysql_query("DELETE FROM successi WHERE id=$id");
			echo "<meta http-equiv='Refresh' content='0; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";//<=questa riga
			//ricarica la pagina e quindi aggiorna i contatori
		}
	}
}
//********fine del trasferimento QUI
//.........
?>
3) dove legge i messaggi hai rimesso il DESC?
PHP:
<?php
//.........
$numero=3; // Limite max successi da visualizzare
// Legge tutti i campi in ordine decrescente
$q="SELECT * FROM successi ORDER BY id DESC LIMIT $numero"; 
// Lancio la query
//..........
?>
per ora usa DESC, non puoi invertire usando ASC, se proprio vuoi averli all'incontrario (come qui nel forum, cosa che non mi piace) devo trovare un qualcosa in php perche per prima si deve leggere in quell'ordine e poi invertire
 
ciao
1) ho riprovato lo script dove legge e ho provato ad aggiungere dei record e rimane l'ultimo in cima e il più vecchio va in archivio.
2) per avere l'aggiornamento dei contatori prova ad aggiungere, dove fa il trasferimento, la riga sotto il delete
PHP:
<?php
//..... alle righe dove fa il trasferimento aggiungi
			//avendo salvato in tab. archivio posso eliminarlo dalla tab. messaggi
			$ris_d=mysql_query("DELETE FROM successi WHERE id=$id");
			echo "<meta http-equiv='Refresh' content='0; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";//<=questa riga
			//ricarica la pagina e quindi aggiorna i contatori
		}
	}
}
//********fine del trasferimento QUI
//.........
?>
3) dove legge i messaggi hai rimesso il DESC?
PHP:
<?php
//.........
$numero=3; // Limite max successi da visualizzare
// Legge tutti i campi in ordine decrescente
$q="SELECT * FROM successi ORDER BY id DESC LIMIT $numero"; 
// Lancio la query
//..........
?>
per ora usa DESC, non puoi invertire usando ASC, se proprio vuoi averli all'incontrario (come qui nel forum, cosa che non mi piace) devo trovare un qualcosa in php perche per prima si deve leggere in quell'ordine e poi invertire

Nel post #124 c'è la sequenza che uso, ora si aggiorna tutto, post e numero, però devo attendere qualche secondo, comunque così va bene
 
Uno o l'altro è indifferente?

PHP:
echo "<meta http-equiv='Refresh' content='0; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

echo '<meta http-equiv="REFRESH" content="0; url=http://miosito.it/successi.php">';
 
ciao
se la pagina a cui vuoi rimandare è la stessa pagina in cui c'è il refresh e si chiama come scrivi
successi.php, si
il vantaggio della prima, sempre se vuoi refresciare la pagina stessa, è che
1) se cambi il nome alla pagina non devi corregge il nome dell'url
2) se ti serve in qualche altra pagina con copia/incolla la metti dove vuoi senza modificare il nome

ti conviene usare la prima così eviti comunque errori
(analogo discorso è per l'action dei form che rimandano alla stessa pagina)

p.s.
immagino che tu lo sappia, ma te lo dico lo stesso, dove serve (es visualizzare un messaggio prima di refresh) il
content="0;
rappresentano i secondi di attesa prima der re, es.
content="4; = attesa 4 secondi
 
ciao
se la pagina a cui vuoi rimandare è la stessa pagina in cui c'è il refresh e si chiama come scrivi
successi.php, si
il vantaggio della prima, sempre se vuoi refresciare la pagina stessa, è che
1) se cambi il nome alla pagina non devi corregge il nome dell'url
2) se ti serve in qualche altra pagina con copia/incolla la metti dove vuoi senza modificare il nome

ti conviene usare la prima così eviti comunque errori
(analogo discorso è per l'action dei form che rimandano alla stessa pagina)

p.s.
immagino che tu lo sappia, ma te lo dico lo stesso, dove serve (es visualizzare un messaggio prima di refresh) il
content="0;
rappresentano i secondi di attesa prima der re, es.
content="4; = attesa 4 secondi
Ok, quel htmlspecialchars($_SERVER['PHP_SELF'] che funzione ha in questo codice? Da quello che so converte in entità html solo alcuni caratteri, ma in questo codice che utilità ha?
 
ciao
htmlspecialchars($_SERVER['PHP_SELF']);
1) $_SERVER['PHP_SELF'] restituisce il nome della pagina in cui sei
2) htmlspecialchars è una sicurezza
se sei nella pagina successi.php e nella pagina hai messo un
PHP:
echo "<meta http-equiv='Refresh' content='0; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

se guardi il codice html con visualizza sorgente vedrai che $_SERVER['PHP_SELF'] è stato sotituito da
HTML:
<meta http-equiv='Refresh' content='0; URL=successi.php'>
 
Mi dicevi che mi spiegavi il significato di id int(12), poi io in rete ho cercato un codice che fa il backup del db in automatico, ma li ho trovati a tempo, io ho bisogno che mi fa il backup automatico in una cartella scelta da me e che però il backup lo faccia solo quando il db (e tabelle) viene modificato, es: modifico un capo, oppure viene inserito o tolto un messaggio
 
ciao
id int(12)
id è il nome del campo, non è obbligatorio che si chiami id, ma generalmente si (da identificativo) in quanto (sempre generlmente) è il campo che identifica il record, gli viene dato l'attributo primary key cioè nella tabella NON possono esistere due campi id con valore uguale e autoincrement, cioè ogni volta che inserisci un record in automatico si incrementa di 1 (questo per semplificare)
int rappresenta il tipo di valore che può contenere il campo, in questo caso un numero intero e solo un numero intero. un campo di tipo intero (non necessariamente un identificativo) accetta solo numeri interi e nel caso si tentasse di inserire un flot (es) 3.14 lo trasforma nell'intero 3, o un carattere o stringa (es) "pinco" lo trasforma nell'intero 0
(12)definisce il numero di cifre massimo che può contenere il campo, in pratica il numero intero massimo accettato, in questo caso 999.999.999.999 cioè il primo record che immetti avrà il numero 1, l'ultimo che potrei inserire il 999.999.999.999 (poi inserire circa 1000 miliardi di record ammesso che l'host te lo permetta)
 
ciao
prima dimenticavo.
il bck dovrebbe fartelo l'host dove hai il db, tra l'altro fare il bck ad ogni cambiamento mi sembra un'esagerazione, i database degli host sono abbastanza sicuri, salvo che tu non abbia scelto un provider "scalzacani"
 
ciao
id int(12)
id è il nome del campo, non è obbligatorio che si chiami id, ma generalmente si (da identificativo) in quanto (sempre generlmente) è il campo che identifica il record, gli viene dato l'attributo primary key cioè nella tabella NON possono esistere due campi id con valore uguale e autoincrement, cioè ogni volta che inserisci un record in automatico si incrementa di 1 (questo per semplificare)
int rappresenta il tipo di valore che può contenere il campo, in questo caso un numero intero e solo un numero intero. un campo di tipo intero (non necessariamente un identificativo) accetta solo numeri interi e nel caso si tentasse di inserire un flot (es) 3.14 lo trasforma nell'intero 3, o un carattere o stringa (es) "pinco" lo trasforma nell'intero 0
(12)definisce il numero di cifre massimo che può contenere il campo, in pratica il numero intero massimo accettato, in questo caso 999.999.999.999 cioè il primo record che immetti avrà il numero 1, l'ultimo che potrei inserire il 999.999.999.999 (poi inserire circa 1000 miliardi di record ammesso che l'host te lo permetta)
Praticamente è il numero id es #34, ho trovato il modo per cancellarli tutti e partire da zero cliccando su SVUOTA.

Però se ho dentro dei post e ne cancello uno che si trova in mezzo agli altri, gli id non si autoaggiornano, es:

ho il post #1,2,3,4 e 5, metti che cancello il 3, poi a video mi rimane stampato #1,2,4,5, non si può fare in modo che gli id si autoaggiustano in sequenza?
 
ciao
Però se ho dentro dei post e ne cancello uno che si trova in mezzo agli altri, gli id non si autoaggiornano, es:

ho il post #1,2,3,4 e 5, metti che cancello il 3, poi a video mi rimane stampato #1,2,4,5, non si può fare in modo che gli id si autoaggiustano in sequenza?
non avendo mai avuto la necessità di farlo, ho googlato un poco.
le risposte che ho trovato (sorry):
non serve
non si fa
è inutile
non possibile

se si vuole dare un numero progressivo ai record è meglio via php numerare i record a video
 
ciao
non avendo mai avuto la necessità di farlo, ho googlato un poco.
le risposte che ho trovato (sorry):
non serve
non si fa
è inutile
non possibile

se si vuole dare un numero progressivo ai record è meglio via php numerare i record a video

Ho fatto delle ulteriori prove e posso tenerlo anche così
PHP:
<div class=\"idSuccessiDX\">#".$riga['id']."</div>

Quello che ho notato è che gli #id dei post che elimino dalla tabella successi (non in quella archivio) non sono visibili, nel senso che a video rimangono sempre stampati in sequenza in entrambe le tabelle, quelli eliminati "si nascondono" fra le 2 tabelle, es: tabella successi #1 #2 #3, nella archivio #5 #6 #7
 
ciao
ma ti serve mostrere l'id?
generalmente non viene mostrato, anche perchè in futuro (aggiungi/sposta/elimina) potresi avere un id che è maggiore del numero dei record che hai, se proprio vuoi mostare un numero progressivo sui messaggi, metti un contatore
 
ciao
ma ti serve mostrere l'id?
generalmente non viene mostrato, anche perchè in futuro (aggiungi/sposta/elimina) potresi avere un id che è maggiore del numero dei record che hai, se proprio vuoi mostare un numero progressivo sui messaggi, metti un contatore
Il contatore sarebbe meglio perché mostrerebbe i numeri progressivi indipendentemente dal numero di id, dove lo trovo?
 
ciao
nella parte in cui visualizzi i successi
PHP:
<?php
//...........
if(mysql_num_rows($ris) > 0) { 
    // Leggo un record alla volta e lo stampo
	$contatore=1; //inizializzi il contatore a 1
    while($riga=mysql_fetch_array($ris)) {
        echo "<div class=\"stampaS\">"; 
		echo "<div class=\"idSuccessiDX\"># $contatore</div> ";//lo stampi
        echo "<div class=\"dataBox\">".crea_data($riga['data_localeS'])."</div>";  
/*
tralascio tutti gli altri echo div
*/
        echo "<div class=\"bandierinaBox\">$bandierina<div class=\"nazione\">".$countries[$two_letter_country_code][1]."</div></div>"; 
        echo "</div>";//stampaS
		$contatore ++; //e ad ogni giro lo incrementi di uno
    }
 //*********da qui inizia la parte che trasferisce in archivio post SOSTITUISCI DA QUI  
//.....
?>
analogo se lo vuoi anche dove mostri l'archivio

p.s.
secondo me sarebbe da chiudere la discussione, sta diventando un poema, apri se ti servono altri post
 

Discussioni simili