Newsgroup: it.lavoro.professioni.webmaster
Titolo: query da php su mysql ke a volte funzionano altre no

Salve a tutti,
ho un problema di cui vorrei capire il perchè e spero che qualcuno mi possa
aiutare.
Ho un sito web dinamico dove tramite un'amministrazione si inseriscono degli
alberghi che hanno dei testi di descrizione e delle foto.
Il sito è sviluppato in html+javascript+php il database è mysql.
Ogni albergo ha un campo di testo relativo a una certa descrizione, lo si
modifica nella amministrazione del sito. Il testo viene inserito o
modificato nel relativo campo del relativo albergo nel database.
Si è verificato che il procedimento funziona e il testo in questione viene
modificato e visualizzato sul sito perfettamente. Il tutto funziona e anche
controllando il codice tutto è a posto.
Ma ogni tanto, magari per alcune ore o per qualche attimo accade che
modificando o inserendo un testo relativo a un albergo sembra che tutto vadi
bene ma quando si va a vedere il testo visualizzato ci si accorge che il
campo del database è stato svuotato come se al database fosse arrivato di
non inserire niente in quel campo e quindi si cancella anche quello che
c'era scritto prima in caso di modifica.
Questo problema si verifica solo a volte e solo magari per qualche minuto,
un attimo o per delle ore.
Poi uno torna a fare una prova a magicamente funziona.
Il codice sembra a posto, almeno credo.
Mi verrebbe da pensare che magari è un problema del server del database o
del server del sito web che essendo occupati magari ricevono male la query.
Questo lo penso perchè il sito e il database stanno su dei server dove
stanno molti altri siti e altri database per poca banda best-effort e pochi
euro l'anno appunto.
Le mie sono solo ipotesi da uno che non sa il perchè, infatti sono qua per
questo.
Fondamentalmente la domanda è: perchè una query da php a mysql delle volte
fa perfettamente ma altre sembra che faccia invece poi si è cancellato tutto
perchè la query è arrivata ma non sono arrivati i dati da inserire nel
relativo campo indicato?
Non so se sono stato abbastanza chiaro, se avete domande per far chiarimento
farò il possibile per rispondere perchè vorrei capire il problema e se c'è
modo risolverlo.
Grazie comunque e ciao a tutti!

 dati da inserire nel relativo campo indicato?
Come gestisci gli errori di connessione ed esecuzione delle query al DB
in PHP?
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 in PHP?
La connessione al database viene fatta tramite la funzione:
function db_connect()
{
// Dati per la connessione
$host="xx.xxx.xxx.xx";
$database="xxxxx";
$login="xxxx";
$password="xxxx";
// Connessione al server mysql
$connection=mysql_connect($host,$login,$password) or die ("Non sono riuscito
a connettermi al server mysql.");
// Selezione del database
mysql_select_db($database,$connection) or die("Errore nella selezione del
database.");
}
che č contenuta in un file functions.php che viene incluso in ogni pagina
che deve usare il database cosě:
<?php
session_start();
include '../functions.php';
db_connect();
...
...
?>
nella pagina dove ad esempio si modifica un hotel si ha un link che apre un
pop-up con un editor wysiwyg fatto tramite iframe e javascript, quando si
salva si torna alla precedente pagina e il javascript memorizza il valore
scritto nell'editor in un campo textarea invisibile (<textarea name="testo"
style="display: none;">).
il form viene mandato (<form action="......" method="post"
enctype="multipart/form-data" name="form1">) alla relativa pagina (dove ho
messo i puntini). L'ho scritto nel caso il method e l'enctype possono
servire a capire dove sta il problema.
La pagina che riceve il form fa una query piuttosto lunga con diverse
operazioni che alla fine si conlude con la sua esecuzione in:
$result=mysql_query($query) or die ("Non sono riuscito a modificare la
struttura.");
Per gestione degli errori pensoc he tu indenda nel particolare quello che io
ho scritto con "or die...".
Scusa, ma al momento non so essere piů preciso, se hai altre domande fammele
pure.
Grazie ciao!


 che io ho scritto con "or die...".
Se ci fosse un errore di collegamento al server mysql verrebbero
chiamate le varie funzioni die, per cui non credo che il problema possa
essere di collegamento.


 essere di collegamento.
Intendi dire che il collegamento con il server su cui si trova mysql
funziona in quanto non vengono chiamate le funzioni die, quindi il mysql
interagisce con il sito?
Quindi se le cose stanno così il problema non sta su un fatto di connessione
al database.
Da cosa potrebbe dipendere che la query viene eseguita ma i value che
arrivano risultano nulli di modo che nel database sembra che si sia
scancellato il relativo campo che magari si voleva solo modificare?
Non so che pesci prendere: che ci siano dei problemi quando i dati vengono
inviati per post alla pagina php che poi esegue la query al database?


 database?
Il problema dovrebbe al 90% essere nel codice, ma senza una analisi
approfondita (es con debugger etc) e' un po' complicato ipotizzare dove
sta l'errore.


 sta l'errore.
Come posso fare eventualmente questa analisi tramite debugger?
Che programma posso usare?
Ad ogni modo mi è venuta in mente una cosa, non so se può essere utile.
La pagina che riceve i dati per post dal form seleziona il tipo di query da
fare a seconda che si debba ad esempio modificare un hotel  o qualche altra
cosa.
C'è uno switch che seleziona il caso a seconda di che cosa si deve
modificare:
switch($a){
 case "struttura":
  controlla_foto1("foto_h");
  //controllo delle foto di cui si deve fare l'upload
  ...
  ...
 //altre istruzioni semplici
 $query=sprintf("update structures set "
                 ."regione=%s, "
                 ."provincia=%s, "
                 ."citta=%s, "
                 ."ambiente=%s, "
                 ."tipologia=%s, "
 ...
 ...
GetSQLValueString($regione, "int"),
GetSQLValueString($provincia, "text"),
GetSQLValueString($citta, "int"),
GetSQLValueString($ambiente, "int"),
 GetSQLValueString($tipologia, "int"),
...
...
upload_foto2("foto_h", $id_struttura, $cfoto_h);
upload_foto2("foto_p1", $id_struttura, $cfoto_p1);
upload_foto2("foto_p2", $id_struttura, $cfoto_p2);
upload_foto2("foto_p3", $id_struttura, $cfoto_p3);
//upload delle foto (le funzioni sono nel solito file functions.php
...
...
//infine viene eseguita la query
$result=mysql_query($query) or die ("Non sono riuscito a modificare la
struttura.");
// e per andare a una altra pagina faccio...
print "<script
language=\"javascript\">self.location=\"vis_strutture.php\"</script>";
///finisce il caso dello switch
break;
Ora io ho usato javascript perchè l'istruzione header di php non potevo
usarla perchè va usata subito nel codice e perchè mi creava problemi con le
sessioni mi pare.
Magari mi sto esprimendo male anche io, spero che tu capisca cosa intendo.
Non so se sia il metodo giusto, mi sono chiesto appunto se sia questo che da
noia a volte all'esecuzione delle query. Ovvero, è solo una ipotesi come
un'altra magari senza senso, ma non è che il javascript viene eseguito prima
che i dati per post siano arrivati tutti e così la query viene fatta senza
dati?
Non so se abbia senso...
Le funzioni che hanno a che fare con le foto non dovrebbero avere a che fare
con il problema in quanto quest'ultimo si verifica anche senza fare upload
di foto.


 siano arrivati tutti e cosl la query viene fatta senza dati?
No, n on ha senso. Javascript e' lato client, PHP lato server, PHP
viene sempre eseguito prima.


 viene sempre eseguito prima.
Mi sembrava, ma non ero sicuro. Meglio così allora.


 problema?
Si.


"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:7IB3c.62359$FJ6.2...@twister1.libero.it...

The requested URL /maguma_studio-1.2.0-complete.exe was not found on this
server.
:|

 inviati per post alla pagina php che poi esegue la query al database?
E' il primo dubbio che č venuto a me: i dati li mandi con method="post"? Perchč
se per caso non fosse specificato il metodo, l'implicito "get" ti potrebbe
impedire di mandare via tutti i caratteri nel form; in questo modo la richiesta
la esegue ma non trova tutti i parametri che servono al programma perchč... non
sono arrivati, e quindi il campo sul db viene ripulito.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

Stefano Reksten wrote:
PS ebbene si, sono tornato, non mi siete mancati per nulla perché ero in Costa Rica
a spassarmela un po' :) Comunque ben ritrovati a tutti.
