- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema Inserimento campi in database
-
Problema Inserimento campi in database
Salve ragazzi...sto cercando di realizzare uno script che mi visualizzi il nickname del profilo che visita un altro utente provvisto di data e ora della visita...
il nickname di chi visita me lo ricavo tramite
_SESSION
mentre il nick di chi si va a visitare tramite _GETQuesto lo script
[php]
<?
//Apro la sessione e...
session_start();//verifico se esiste la variabile destinatario per il voto
if(isset($_GET['nickname']) OR $_GET['nickname'] != ""){
$destinatario=$_GET['nickname'];
}
$nickdichivisita=$_SESSION['nickname'];
$nicknamevisitato=$_GET['nickname'];//parte relativa alla data e all ora delle visite ricevute da utenti
$date3 = date("Y/m/s H");//data ultima visita
$ultimavisita3=strftime("%A %d %B %Y");
//ora ultima visita
$ultimavisitaora3=strftime("%T");//valore che assegno al campo letto relativo al nick di chi visita
$letto='1';//seleziono le visite e controllo se l utente che visita abbia nel campo letto il valore 1...se si aggiorni cioè fai un update altrimenti invece
//se il campo letto e vuoto inserisci i dati//mi connetto al datase
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
$query1 = @mysql_query("SELECT id,nickvisitato1,nickdichivisita1,letto
FROM visiteutenti WHERE nickvisitato1='$nicknamevisitato' AND nickdichivisita1='$nicknamevisitato'",$link);while($row=mysql_fetch_array($query1)){
$nickdichivisita=$row['nickdichivisita1']; $nickvisitato=$row['nickvisitato1'];
$haivisitato=$row['letto'];
}
if($nickdichivisita=$haivisitato){$query = "UPDATE
visiteutenti
SETnickdichivisita1
= '$nickdichivisita'";
$query2 = "UPDATEvisiteutenti
SETnickvisitato
= '$nickvisitato1'";
$query3 = "UPDATEvisiteutenti
SETletto
= '1'";
$query4 = "UPDATEvisiteutenti
SETdatadellavisita
= '$ultimavisita3'";
$query5 = "UPDATEoradellavisita
SETdatadellavisita
= '$ultimavisitaora3'";
$query6 = "UPDATEoradellavisita
SETdata3
= '$date'";} else{
//Se quell utente non ha ancora visitato quell utente Invio i dati al database
$query2 = @mysql_query("INSERT INTO visiteutenti VALUES ('$id','$nickdichivisita','$nickvisitato'
,'$letto','$ultimavisita3','$nickvisitato','$ultimavisitaora3','$date3')",$link);}
[/php]Succede però che nel database non mi inserisce nulla..come mai??
-
Ciao,
Metti:
[php] or die(mysql_error()) [/php]
E vedi se ci sono errori.
-
[PHP]
//seleziono il database
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());[/PHP]
L ho aggiunto ma non mi da nessun errore...:():
-
Devi aggiungerlo a tutte le query, altrimenti se continui a nascondere gli errori con le @, non potrai capire mai niente.
-
Mi ritrovo questo errore..
Errore apertura database: Column count doesn't match value count at row 1
-
Gli insert sarebbe sempre meglio farli specificando a quale campo dare quel valor.
Probabilmente stai saltando qualche campo della tabella.
-
@Thedarkita said:
Gli insert sarebbe sempre meglio farli specificando a quale campo dare quel valor.
Probabilmente stai saltando qualche campo della tabella.
Su quello script non ci capivo piu' nulla..ne sto facendo un altro...[PHP]
<?
//Apro la sessione e...
session_start();//verifico se esiste la variabile destinatario per il voto
if(isset($_GET['nickname']) OR $_GET['nickname'] != ""){
$destinatario=$_GET['nickname'];
}
$nickdichivisita=$_SESSION['nickname'];
$nicknamevisitato=$_GET['nickname'];
//parte relativa alla data e all ora delle visite ricevute da utentisetlocale(LC_TIME, 'it_IT');
$date3 = date("Y/m/s H");
//data ultima visita
$ultimavisita3=strftime("%A %d %B %Y");
//ora ultima visita
$ultimavisitaora3=strftime("%T");//valore che assegno al campo letto relativo al nick di chi visita
$letto='1';//mi connetto al database
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
//seleziono la tabella
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());$strsql="INSERT INTO visiteutenti (id,nickdichivisita1,nickvisitato1,letto,datadellavisita,oradellavisita,data3)
VALUES ('','$nickdichivisita','$destinatario','1','$ultimavisita3','$ultimavisitaora3',NOW())";
mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
[/PHP]
Fino a qui funziona tutto...ora dovrei fare in modo che se un utente rivisita quell utente
eseguire un aggiornamento dei campi..
Per come e strutturatro lo script ora ad ogni visita aggiunge delle nuove righe..invece io vorrei che aggiornasse non che aggiungesse..
Come potrei proseguire lo script per far ciò?
-
Puoi usare insert on duplicate key se utilizzi gli indici.
Altrimenti fai una query che controlli se già è stato visitato fai un update se no aggiungi.La seconda solzuione ti obbliga a fare 2 query e quindi la CPU lavora di più, è preferibile la prima però dipende da come hai impostato in discorso.
-
Lo script è in via di sviluppo...quindi modificabile.
Riguardo la tua prima ipotesi dovrei assegnare al campo id auto_increment chiave primaria giusto?
Funziona cosi'?
-
No perchè se è autoincrement non può avere mai un duplicate key. Sarebbe da mettere come chiave primaria una cosa tipo idvisitatore-idvisitato per poter sfruttare la prima soluzione.
-
Quindi devo togliere il campo con l auto increment dalla tabella...e assegnare chiave primaria al mio campo "nickdichivisita" ?
-
Come ti ho scritto primo sarebbe da mettere come chiave primaria una cosa tipo idvisitatore-idvisitato per poter sfruttare la prima soluzione.
Altrimenti usi la seconda soluzione se ti viene più facile da implementare per ulteriori funzionalità dello script finale.
-
@Thedarkita said:
Come ti ho scritto primo sarebbe da mettere come chiave primaria una cosa tipo idvisitatore-idvisitato
Scusami ma non ho capito...idvisitatore-idvisitato sarebbe un unico campo??
Se si in questo campo dovrei salvarmi il nick di chi visita??
-
Supponendo che io guardo il tuo profilo nel campi id metti: thedarkita-carlitos1982.
Anche se è sempre preferibile mettere l'id al nick.
-
Quindi devo fare in modo che nel campo id con chiave primaria mi vadano a finire il nick di chi visita e dell utente che viene visitato nel formato
idvisitatore-idvisitato
Giusto?
-
Si, ma come ti ho detto prima se apposto del nick metti l'id è meglio, oltre ad occuparti meno memoria se ai tuoi utenti dai la possibilità di cambiare nick ti sballa tutto.
-
Giusto..non ci avevo pensato....
Forse e meglio che uso la seconda soluzione..
Per quanto riguarda gli Update e possibile utilizzare un solo Update su piu' campi???
-
Si, basta separare con la virgola.
-
Per quanto riguarda il ocntrollo...
io do al campo"letto" il valore 1 ogni volta che un utente visita un altro utente...
ora come faccio per..
se io utente carlitos ho il valore 1 nel campo "letto" relativo all utente nicola fai update con i nuovi valori....
altrimenti inserisci...[php]
//verifico se esiste la variabile destinatario per il voto
if(isset($_GET['nickname']) OR $_GET['nickname'] != ""){
$destinatario=$_GET['nickname'];
}
$nickdichivisita=$_SESSION['nickname'];//seleziono i campi
$strsql="SELECT id,nickdichivisita1,nickvisitato1,letto,datadellavisita,oradellavisita,data3 FROM visiteutentiWHERE nickvisitato1='$destinatario'
";
$rs=@mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
//faccio un ciclo while
while ($riga = mysql_fetch_array($rs)) {
$str_nickdichivisita = $riga['nickdichivisita1'];
$str_datadellavisita = $riga['datadellavisita'];
$str_oradellavisita = $riga['oradellavisita'];if($str_nickdichivisita
//qui nn ho capito come fare il ocntrollo..[/php]
-
Ho fatto cosi'...
[PHP]
//mi connetto al database
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
//seleziono il database
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());
//seleziono i campi da visualizzare per singolo utente
$strsql="SELECT id,nickdichivisita1,nickvisitato1,letto,datadellavisita,oradellavisita,data3 FROM visiteutentiWHERE nickvisitato1='$destinatario'
";
$rs=@mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
//faccio un ciclo while
while ($riga = mysql_fetch_array($rs)) {
$str_nickdichivisita = $riga['nickdichivisita1'];
$str_datadellavisita = $riga['datadellavisita'];
$str_oradellavisita = $riga['oradellavisita'];
$haivisitato=$riga['letto'];}if($str_nickdichivisita =$haivisitato)
$queryaggiorna = mysql_query("UPDATE visiteutenti SET nickdichivisita1 = '$nickdichivisita' , nickvisitato1 = '$destinatario', letto = '1', datadellavisita = '$ultimavisita3'
, oradellavisita = '$ultimavisitaora3', data3 = NOW()
WHERE nickvisitato1='$destinatario'");
else{
$strsql="INSERT INTO visiteutenti (id,nickdichivisita1,nickvisitato1,letto,datadellavisita,oradellavisita,data3)VALUES ('','$nickdichivisita','$destinatario','1','$ultimavisita3','$ultimavisitaora3',NOW())";
mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
}
[/PHP]
Funziona...ora devo dedicarmi alla parte della visualizzazione...