-
Inserire una chat
Eccomi di nuovo qui ç_ç. Dunque, come da titolo, per il sito che sto facendo sto cercando di inserire una chat che poggia su php e MySQL. In pratica, un form invia al database quanto viene scritto nella chat e, in base a caratteri speciali inseriti all'inizio della frase, viene visualizzato a schermo con scritte diverse a seconda di valori inseriti nella tabella dove vengono immagazzinate le frasi. Fin qui, nulla di strano. I problemi mi sorgono quando ho fatto il codice per inserire la frase nel database. Ecco qui il codice della pagina adibita a tale scopo, ovvero 'input.php'
Codice PHP:
<?php
session_start();
include("inc/config.inc.php");
include("inc/connetti.inc.php");
$query="SELECT personaggi.gestione, gilda.ar FROM personaggi LEFT JOIN gilda ON personaggi.idgilda=gilda.idgilda WHERE nome='$login'";
$result=mysql_query($query);
$rs=mysql_fetch_array($result);
$gestione=$rs['gestione'];
$ar=$rs['ar'];
$rs->close;
mysql_free_result($result);
if((substr($msg, 0, 1) == "§")&&(($gestione==1)||($gestione==2))) { /*Controllo Master*/
$tipo=2;
$testo=substr($msg, 1); }
elseif((substr($msg, 0, 1) == "§")&&($ar==1)) { /*Controllo Master Gilda*/
$tipo=4;
$testo=substr($msg, 1); }
if(substr($msg, 0, 1) == "+") { /*Controllo Azione*/
$tipo=1;
$testo=substr($msg, 1); } else { /*Controllo Parlato*/
$tipo=0; }
if(substr($msg, 0, 1) == "@") { /*Controllo Sussurri*/
$pos=strpos(substr($msg, 1), "@");
if($pos===FALSE) {
$tipo=0; }
else {
$tipo=3;
$p_dest=$pos-1;
$p_msg=$pos+1;
$dest=substr($msg, 1, $p_dest);
$testo=substr($msg, $p_msg);
$mitt=$login; }
$query="SELECT * FROM presenti WHERE idstanza='$idstanza' AND nome='$dest'";
$result=mysql_query($query);
$rs=mysql_fetch_array($result);
if($rs===FALSE) {
$testo="$dest non è presente nella stanza";
$testo=htmlspecialchars($testo);
$dest=$login; } }
/*$query="INSERT INTO chat(idstanza, ora, mittente, destinatario, sesso, imggilda, nome, tipo, tag, testo) VALUES ('$idstanza', NOW(), '$mitt', '$dest', '$sesso_S', '$img_S', '$tipo', '$tag', '$testo')";
mysql_query($query);*/
?>
</head>
<form action="input.php" method="post">
<table>
<tr>
<td><input type="text" nome="tag" size="20" value="<?=htmlspecialchars($tag)?>"</td><td><input type="text" nome="msg" size="60"</td><td><input type="submit" value="Invia"></td>
</tr>
</table>
</form>
</html>
Dunque, vediamo un pò. Le variabili $login, $sesso_S e $img_S sonodi sessione e fin qui ci siamo. Ora, il problema è che, se tolgo i commenti dalla query finale di MySQL al database non viene inviato nulla. Ho controllato più volte che i nomi delle colonne della tabella e quelli della query e coincidono. Aiutatemi ç_ç
-
Hai inserito 10 nomi di campi e solo 9 valori nella query.
-
Ho inserito il valore mancante, ma continua a non eseguire la query. Il bello è che pare proprio che dai form non riceva nulla, come se non ci scrivessi niente. Infatti ho provato a fare una print con i valori dei form, ma non è comparso nulla.
ç_ç
-
magari se posti il codice di tutte le pagine coinvolte si puo fare qualcosa...
a proposito,nel codice:
Codice PHP:
<td><input type="text" nome="tag" size="20" value="<?=htmlspecialchars($tag)?>
al posto di "nome" prova con "name",senno per forza che non va,va scritto in inglese
-
orca miseria è vero O_O... ad ogni modo nemmeno si è risolto il problema... se prima non eseguiva la query, adesso cmq quello che scrivo nei campi di text non viene nemmeno letto dallo script, come se non esistesse e, ovviamente, non viene nemmeno caricato nel database ç_ç...
EDIT: Dunque, scrivo un nuovo messaggio perchè credo sia meglio così ç_ç. Allora, invio i codici corretti delle pagine coinvolte. Questo è input.php
Codice PHP:
<?php
session_start();
include("inc/config.inc.php");
include("inc/connetti.inc.php");
$query="SELECT * FROM personaggi WHERE nome='$login'";
$result=mysql_query($query);
$rs=mysql_fetch_array($result);
$master=$rs['master'];
if((substr($msg, 0, 1) == "§")&&($master==1)) { #Controllo Master
$tipo=2;
$testo=substr($msg, 1); }
elseif((substr($msg, 0, 1) == "§")&&($master==2)) { #Controllo Master Gilda
$tipo=4;
$testo=substr($msg, 1); }
if(substr($msg, 0, 1) == "+") { #Controllo Azione
$tipo=1;
$testo=substr($msg, 1); } else { #Controllo Parlato
$tipo=0;
$testo=$msg; }
if(substr($msg, 0, 1) == "@") { #Controllo Sussurri
$pos=strpos(substr($msg, 1), "@");
if($pos===FALSE) {
$tipo=0; }
else {
$tipo=3;
$p_msg=$pos+2;
$dest=substr($msg, 1, $pos);
$testo=substr($msg, $p_msg);
$mitt=$login; }
$query="SELECT * FROM presenti WHERE idstanza='$idstanza' AND nome='$dest'";
$result=mysql_query($query);
$rs=mysql_fetch_array($result);
if($rs===FALSE) {
$testo="$dest non è presente nella stanza";
$testo=htmlspecialchars($testo);
$dest=$login; } }
$query="INSERT INTO chat (idstanza, ora, mittente, destinatario, sesso, imggilda, nome, tipo, tag, testo) VALUES ('$idstanza', NOW(), '$mitt', '$dest', '$sesso_S', '$img_S', '$login', '$tipo', '$tag', '$testo')";
mysql_query($query);
?>
</head>
<form action="input.php" method="post">
<table>
<tr>
<td><input type="text" name="tag" size="20" value="<?=htmlspecialchars($tag)?>"></td><td><input type="text" name="msg" size="60"></td><td><input type="submit" value="Invia"></td>
</tr>
</table>
</form>
</html>
Lui esegue quasi tutto come si deve, soltanto che, non so il motivo, arrivato a Controllo Master e Controllo Master Gilda è come se ignorasse l'if. La cosa brutta è che se prendo if ed elseif e faccio loro eseguire una funzione di print qualunque in caso le loro condizioni siano verificate, tutto funziona correttamente. Da ciò mi viene di pensare che il problema sta in quello che viene eseguito da queste due strutture di controllo. L'altro problema è lui, chat.php
Codice PHP:
<?php
session_start();
include("inc/config.inc.php");
include("inc/connetti.inc.php");
$query="SELECT * FROM chat WHERE idstanza='$idstanza' WHERE DATE_ADD(ora, INTERVAL 20 MINUTES)>=NOW()";
$result=mysql_query($query);
$rs=mysql_fetch_array($result);
$ora=$rs['ora'];
$testo=$rs['testo'];
$imggilda=$rs['imggilda'];
$mitt=$rs['mittente'];
$dest=$rs['destinatario'];
$sesso=$rs['sesso'];
$autore=$rs['nome'];
$testo=$rs['testo'];
$tag=$rs['tag'];
$tipo=$rs['tipo'];
$tempo=strftime("%H:%M", strtotime($ora));
include("inc/top_foot.inc.php"); ?>
<META HTTP-EQUIV=refresh CONTENT="10;URL=http://jediorder.altervista.org/chat.php">
</head>
<?php
switch ($tipo) {
case 0: /*Parlato*/
print ('<font face="times new roman" size="3" color="#000000">'.$tempo.'&nbps;-&nbps;<img border=0 src=\"altervista_ht/'.$sesso.'.gif\">&nbps;<a href=\"scheda.php?pg='.urlencode($autore).'\"><img border=0 src="\_altervista_ht/gilde/'.$imggilda.'\"></a>'.$autore.'&nbps;['.$tag.']'.$testo.'</font>');
break;
case 1: /*Azione*/
print ('<font face="times new roman" size="2" color="#660000">'.$tempo.'&nbps;-&nbps;<a href=\"scheda.php?pg='.urlencode($autore).'\">'.$autore.'</a>['.$tag.']'.$testo.'</font>');
break;
case 2: /*Scritta master fati*/
print ('<font face="times new roman" size="3" color="#0000FF">'.$testo.'</font>');
break;
case 3: /*Sussurro*/
if($mitt==$login) { /*Stampa del sussurro inviato a $dest*/
print ('<table bgcolor="#000000">
<tr><td><font face="times new roman" size="2" color="#FFFFFF">Hai sussurrato a'.$dest.':</td></tr>
<tr><td><font face="times new roman" size="2" color="#FFFFFF">'.$testo.'</font><tr><td>
</table>'); } else { /*Stampa di un sussurro inviato da $mitt*/
print ('<table bgcolor="#000000">
<tr><td><font face="times new roman" size="2" color="#FFFFFF">'.$mitt.' ti sussurra:</td></tr>
<tr><td><font face="times new roman" size="2" color="#FFFFFF">'.$testo.'</font><tr><td>
</table>'); }
break;
case 4: /*Scritta master di gilda*/
print ('<font face="times new roman" size="3" color="#CC00FF">'.$testo.'</font>');
break; } ?>
Qui è ancora peggio, perchè qualsiasi comando gli dia, qualsiasi cosa prenda dal database (ammesso che ne prenda qualcuna), l'output html è SEMPRE questo
Codice HTML:
<META HTTP-EQUIV=refresh CONTENT="10;URL=http://jediorder.altervista.org/chat.php">
</head>
<font face="times new roman" size="3" color="#000000">&nbps;-&nbps;<img border=0 src=\"altervista_ht/.gif\">&nbps;<a href=\"scheda.php?pg=\"><img border=0 src="\_altervista_ht/gilde/\"></a>&nbps;[]</font>
Ho provato a modificare mille volte il codice, a togliere i caratteri &nbps; , ad assegnare le stringhe a delle variabili prima di passarle a print, a fare il print direttamente senza parentesi come ho visto su qualche guida, ma non è cambiato nulla, il risultato è sempre lo stesso.
Aiuto ç_________ç
FunCool: Non scrivere due messaggi consecutivi, utilizza il tasto Edita.