come inserire in un database un dato e farlo andare come primo dato messo

patriziou

Utente Attivo
12 Lug 2011
79
0
0
ciao allora io ho inserito un dato in un record del database e ne volevo aggiungere un altro solo che volevo che lui prendesse come id 1 e andasse in alto e l' altro invece divenise secondo.
Come devo fare? (utilizzo phpmyadmin nn so l' sql)
devo cambiare qualcosa nel codice php affinchè mi facccia apparire i dati nuovi in alto e i vecchi me li sposti come anche per l' id
qui il codice nel caso servisse
PHP:
<?
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 10;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag &egrave; valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

// Mi connetto al database
$conn = mysql_connect("localhost","admin","password");
mysql_select_db("my_crashgiochi", $conn);

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella agenda
$all_rows = mysql_num_rows(mysql_query("SELECT id FROM giochi_volo"));

// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM giochi_volo LIMIT $first, $x_pag");
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
    echo "<p><table><tr>";
    echo "<td>" . $row['id'] . "</td>";
    echo "<td><a href='".$row['url'].".php'>" . $row['nome'] . "</a></td>";	
	echo "</tr>";
    echo "<tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}

// Se le pagine totali sono pi&ugrave; di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">";
    echo "Pagina Avanti</a>";
  } 
}

// Chiudo la connessione ad DB
mysql_close($conn);
?>
 
PHP:
$rs = mysql_query("SELECT * FROM giochi_volo LIMIT $first, $x_pag" ORDER BY id DESC);
Penso che avrai creato un indice..
 
ciao
non ti conviene lavorare con l'id, ma ti conviene mettere un altro campo nella tabella chiamato (es.) daia_ins (io generlamente lo valorizzo con timestamp per cui potrebbe essere data_ins int 15 notnull) per cui qundo vai a fare le select aggiungi
SELECT id FROM giochi_volo ORDER BY data_ins ASC
o
SELECT id FROM giochi_volo ORDER BY data_ins DESC
per cui i recordo ti appaiono ordinati per data asecendente o decrescente (come preferisci)
 
uhm mi piace la soluzione della data ma vorrei fare emtrembi è possibile se sì come? e poi per quanto riguarda l' id mi esce dopo l' id in alto 1 non è che mi trovo in alto per dire 10 d uno stà in fondo a tutto ?
 
anzi devo modificare qualcosa nel codice php per il fatto della data devo inserire qualcosa (comunque non vabbene int perchè se voglio scrivere 30/04/2012 non lo posso scrivere come devo scriver?
 
Ultima modifica:
ciao
visto che sei agli inizi
non ho creato un indice tutto ciò che ho creato è un database e questo codice è tutto ciò che ho poi cosa intendi con un indice?
tu prima hai creato (immagino in locale) un db, poi una tabella (un database è un insieme di tabelle da una a diciamo quante vuoi).
ogni tabella è un insieme di record (righe) e ogni record è fatto di campi (colonne),
generalmente uno dei campi piu importanti è il campo indice (chiamoato spesso id) ed il campo che identifica il record e ha quasi sempre le caratteristiche

id int 6 primarykey autoincrement
generalmente viene gestito in automatico da mysql
dove
id = nome del campo (anche se si puoi chiamarlo in altra maniera)
int = il dato che conterrà sarà un numero intero
6= numero massimo di cifre del numero (sta a te decidere quante te neservono)
primarikey = definisce che il campo è una chiave primaria NON possono esistere due record con lo stesso id
autoincrement= ad ogni inserimento mysql legge l'ultimo id lo incrementa (di 1) e lo attribuisce al nuovo recordi inserito.

proseguendo ti accorgerai dell'importanza in quanto (es) quando modifichi il record devi far sapere a php/mysql quale record modificare
 
metti varchar(10) se lo vuoi prendere da in input, altrimenti crei il campo con il tipo date
(serve a molto un indice)
 
ciao non avevo visto la tua risposta sulla data.
quando si usano le date in formato "umano" bisogna stare attenti perche 28/11/2012 è più piccola di 30/05/2012, considerato che per php e mysql le date non sono che dati usando il timestamp ti faciliti poi l'ordinamento, trasformi il timestamp in data umana solo quando ti serve visualizzarla a monitor o stamparla su un foglio
 
io dico cosa devo modificare per la data nel codice php qualcosa?? ah e cmnq ho un problema per questa riga di codice per orderby
PHP:
<?
$rs = mysql_query("SELECT * FROM giochi LIMIT $first, $x_pag ORDER BY id DESC"); 
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
    echo "<p><table><tr>";
    echo "<td><a href='".$row['url']."'>" . $row['nome'] . "</a></td>";	
    echo "<tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}?>
non parte l' if ma va l' else perchè dove sbaglio?
comunque l"indice "l' ho fatto sarebbe appunto l' id ma nn sapevo che così si chiamasse
 
evidentemente $nr è 0 e non vengono trovati record nel database

comunque invece del ciclo for, sarebbe meglio usare un while con un fetch_array magari
 
uhm però nel database ci sono i dati se tolgo la parte order by me li trova se lo metto invece no perchè?
 
$first e $x_pag sei sicuro che non vadano oltre i valori esistenti di id nel database?
 
allora $x_pag=10
$first = ($pag - 1) * $x_pag;
ma $pag sarebbe questo
$pag = $_GET['pag'];
// Controllo se $pag &egrave; valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1;
in realtà questa parte iniziale nn sapevo come farla mi hanno detto di mettere $pag = $_GET['pag']; ed io così l'ho lasciata
nel database c'è l' id 1 e basta
 
L'errore sta qui, riscrivi la query cosi:
PHP:
//nel caso ci sia un order il limit va dopo
$rs = mysql_query("SELECT * FROM giochi ORDER BY id DESC LIMIT $first, $x_pag") or die(mysql_error());
 
okkei allora vabbene questo?

giochi

Campo Tipo Null Predefinito Commenti
id int(10) No
nome varchar(100) No None
immagine text No
testo varchar(10000) No None
url text No

Indici:
Nome chiave Tipo Cardinalità Campo
PRIMARY PRIMARY 2 id


Spazio utilizzato:
Tipo Utilizzo
Dati 508 B
Indice 2,048 B
Totale 2,556 B
Statistiche righe:
Istruzioni Valore
Formato dinamico
Righe 2
Lunghezza riga ø 254
Dimensione riga ø 1,278 B
Prossimo Autoindex 29
Creazione 30 Apr, 2012 at 10:04 AM
Ultimo cambiamento 30 Apr, 2012 at 10:21 AM
cmnq continuo a chiedere si può fare in modo tale che l' id cambi non rimanga sempre associato alla stesso dato?
 
ciao
devi modificare alcune cose
all'id devi aggiungere autoincrement
il campoo testo (se non ricordo male) non può superare i 250 caratteri, per mettere tutti i caratteri che gli dici deve essere del tipo text o longtext
dimenticavo:
l'id è essenziale che individui uno e solo un unico record
 
Ultima modifica:
cioa scusa un'altra cosa
perche hai dato al campo immagine come tipo text?
se nel campo inserisci l'immagine (te lo sconsiglio) il campo deve essere di tipo blob, se invece ci metti l'url dell'immagine ti basta (e avanza) varchar 250
 

Discussioni simili