Query eseguita parzialmente
Query eseguita parzialmente postato il 11/06/2012 18:55:02 nel forum programmazione, open source e hosting e modificato da dreamgate_staff il 11/06/2012 19:03:26
Vorrei chiedervi un'opinione su un fatto piuttosto curioso che mi sta succedendo nel voler cambiare il modo in cui segnalare i nuovi post in bacheca. Il codice incriminato è il seguente
$query_NewRead = mysql_query("SELECT idpg FROM personaggio");
$ToRead = "";
while(list($NewRead) = mysql_fetch_array($query_NewRead)) { $ToRead .= $NewRead."-"; }
$Inserisci = "INSERT INTO bacheca (idmessaggio, idbacheca, idprimomessaggio, ";
if ($Topic == NULL) { $Inserisci .= "titolo, "; } #Nuovo topic
$Inserisci .= "messaggio, autore, orainvio, idrazza, idgilda, idmestiere";
if (isset($_POST[gildat])) { $Inserisci .= ", gilda"; }
elseif (isset($_POST[mestieret])) { $Inserisci .= ", mestiere"; }
elseif (isset($_POST[razzat])) { $Inserisci .= ", razza"; }
$Inserisci .= ", daleggere) VALUES ($NewPost, ";
if ($Topic == NULL) {
$Inserisci .= "$Araldo, "; } /*Nuovo topic*/ else {
$query_araldo = mysql_query("SELECT idbacheca FROM bacheca WHERE idprimomessaggio = $Topic");
$risultato_araldo = mysql_fetch_array($query_araldo);
$ExistAraldo = $risultato_araldo[idbacheca];
mysql_free_result($query_araldo);
$risultato_araldo -> close;
$Inserisci .= "$ExistAraldo, "; }
if ($Topic == NULL) { $Inserisci .= "$NewPost, "; } /*Nuovo topic*/ else { $Inserisci .= "$Topic, "; }
if ($Topic == NULL) { $Inserisci .= ""$Titolo", "; }
$Inserisci .= ""$Testo", "$Nome", NOW(), $Razza, $Gilda, $Mestiere";
if (isset($_POST[gildat])) { $Inserisci .= ", $Gilda_N"; }
elseif (isset($_POST[mestieret])) { $Inserisci .= ", $Mestiere_N"; }
elseif (isset($_POST[razzat])) { $Inserisci .= ", $Razza_N"; }
$Inserisci .= ", "$ToRead")";
if ($Primo != NULL) { $IDTopic = $Primo; }
#echo $Inserisci;
$query_Inserisci = mysql_query($Inserisci);
La penultima riga mi torna utile per vedere se la query viene scritta come si deve; in questo caso, essa restituisce
INSERT INTO bacheca
(idmessaggio, idbacheca, idprimomessaggio, messaggio, autore, orainvio, idrazza, idgilda, idmestiere, daleggere)
VALUES
(1145, 15, 878, "prova", "NOMEPG", NOW(), 2003, 0, 0, "CONTENUTO VARIABILE $ToRead")
Il problema è che l'ultima parte della query, quella riguardante la colonna "daleggere", non viene eseguita. O meglio, viene impostata come se la variabile $ToRead abbia come contenuto "". Tutte le altre colonne vengono impostate con i relativi valori, treanne quella che ho appena citato. Se inserisco la query così com'è dal database, la colonna in questione viene settata come si deve. Ho provato anche scrivendo semplicemente l'istruzione
mysql_query("QUERY");
inserendo la query così com'è tra le virgolette: anche in questo caso tutti i campi sono stati impostati correttamente. Mi è venuto perfino da pensare che la variabile $ToRead sia stata costruita usando gli apici sbagliati.
Avete qualche idea su come risolvere questo problema? Io le ho esaurite, almeno per ora
Pagine → 1
11/06/2012 19:48:24 e modificato da leoblacksoul il 11/06/2012 19:53:17
$Inserisci .= ", "$ToRead")";
non capisco com'è possibile che la tua pagina possa anche solo funzionare senza un errore fatale del parser.
Quella linea di codice non è PHP, hai messo quattro virgolette che quindi definiscono due stringhe attorno a $ToRead senza però concatenarla! Teoricamente dovrebbe risultare in un errore di sintassi.
è sempre consigliabile usare tipi diversi di apici per PHP e per MySql, così eviti di fare questi casini.
Io uso i doppi apici per dichiarare le stringhe delle query in PHP, e gli apici singoli per circondare i valori stringa o data all'interno delle query mysql.
$Inserisci .= ", '$ToRead')";
Così dovrebbe andare
La stessa cosa succede anche qualche riga sopra:
if ($Topic == NULL) { $Inserisci .= ""$Titolo", "; }
$Inserisci .= ""$Testo", "$Nome", NOW(), $Razza, $Gilda, $Mestiere";
dovrebbe essere:
if ($Topic == NULL) { $Inserisci .= "'$Titolo', "; }
$Inserisci .= "'$Testo', '$Nome', NOW(), $Razza, $Gilda, $Mestiere";
11/06/2012 21:12:58 e modificato da dreamgate_staff il 11/06/2012 21:24:26
Azz, mi sa che nel copiare il codice non mi ha messo tutto. Ho inserito degli slash come caratteri di "escape" prima di ogni doppio apice che racchiudeva il testo (infatti avevo provato a inserirli anche qui prima di modificare ma non lo ha visualizzato). In ogni caso, ho provato a inserire degli apici semplici nelle posizioni che mi hai detto te, ma il risultato è stato sempre lo stesso. La cosa più assurda è che in locale funziona tutto come si deve. Una volta caricato sul dominio non funziona
EDIT
Correggo, avevi ragione te. Ho modificato tutto come mi hai consigliato e stavolta funziona. Grazie mille ^^
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Enlisted ↗
AlterEgo ↗
Neverness to Everness ↗