Newsgroup: it.comp.www.php
Titolo: Variabile e underscore

ciao a tutti
premetto che sono newbie di php e so solo fare qualche cosetta.
ho il seguente codice:
$TABLE_PREFIX = 'ciao'
$result=mysql_query("SELECT topic_title, topic_id
FROM $TABLE_PREFIX_topics WHERE topic_views != 0 ORDER BY $PHPBB2_ORDER 
DESC LIMIT 0, $PHPBB2_AMOUNT");
nella query sql, php deve capire che $TABLE_PREFIX_topics = ciao_topics
io non riesco a farlo, ho provato in vari modi ma niente. Ho necessità 
di gestire $TABLE_PREFIX dinamicamente percui la devo associare come 
variabile.
grazie per l'aiuto
ciao!!

Non hai detto che errore ti da, in questo modo non si riesce a capire da 
cosa dipende. Comunque procedi in questo modo:
1) Metti tutta la query in una variabile e stampala, così verifichi che 
non ci siano errori nella query:
$SQL = "SELECT topic_title, topic_id FROM $TABLE_PREFIX_topics WHERE 
topic_views != 0 ORDER BY $PHPBB2_ORDER DESC LIMIT 0, $PHPBB2_AMOUNT";
print $SQL;
2) Verifica che la sintassi di diverso != sia supportata dal tuo 
serverSQL, non vorrei che volesse la dicitura <> idem per la LIMIT
3) Prova a costruirti il nome della tabella esternamente, poi includi il 
codice ottenuto nella query:
$TABLE_PREFIX = 'ciao'
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABELLA WHERE topic_views != 
0 ORDER BY $PHPBB2_ORDER DESC LIMIT 0, $PHPBB2_AMOUNT";
$result=mysql_query($SQL);
Ciao
Gianni

 grazie ;)
ho provato anche una cosa + contorta con una 3 variabile solo per 
"_topics" ma non va ugualmente (unexpected t variables)


la query sql è giusta perchè con quella variabile messa "a mano" riesce 


 risultato: spazio vuoto.
Il fatto che non compare alcun risultato, mi fa pensare che il problema 
stà nella query. In questo caso,prova a fare un copia incolla del codice 
sotto sul tuo codice (ovviamente cambia il valore del $TABLE_PREFIX come 
vuoi tu e passando i dovuti valori alle variabili della query):
$TABLE_PREFIX = 'ciao'
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABELLA WHERE
         topic_views<> 0 ORDER BY $PHPBB2_ORDER DESC LIMIT 0,
         $PHPBB2_AMOUNT";
$result = mysql_query("$SQL") or die("Errore nella Query,
                                   Verificare:<br>$SQL");
// Risultati query
while ($riga = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("Titolo: %s  Argomento: %s", $riga[0], $riga[1]);
}
print "Se Sopra non hai visto nulla, verifica la tua query:<br>$SQL";
Nel caso sopra si possono verificare 3 cose:
1) si verifica un errore durante l'esecuzione della query, ti viene 
stampata a video "Errore nella Query, 
Verificare + la query incriminata". In questo caso c'è sicuramente un 
errore su com'è composta la query
2) La query viene eseguita, ma non riporta risultati. In questo caso, la 
query è sintaticamente corretta, ma non restituisce alcun risultato
3) Vengono stampati a video i dati che volevi.... problema risolto :-)
Nei primi 2 casi:
Verifica a video che sia corretta, magari fai anche un copia ed 
incollala sul client del tuo database relazionale per vedere che venga 
effettivamente eseguita e che riporti effettivamente dei record.
Fammi Sapere... ora vado a nanna, sono stufo di lavorare
Ciao
Gianni

 DESC LIMIT 0, $PHPBB2_AMOUNT");
FROM " .$TABLE_PREFIX. "_topics" ...
Io ODIO l'embedding di variabili dentro le stringhe. E` forse una delle
fonti di errore piu` grandi di PHP.
Bye.

 fonti di errore piu` grandi di PHP.
Anch'io lo odio, ma permettimi di puntualizzare....
Se tu scrivi:
$SQL="SELECT FROM" .$TABLE_PREFIX. "_topics";
Tanto vale scrivere:
$SQL='SELECT FROM' .$TABLE_PREFIX. '_topics';
In questo modo velocizzi l'esecuzione del codice.
Ciao
Gianni

 In questo modo velocizzi l'esecuzione del codice.
Si`, magari con uno spazio dopo il FROM. ;)
Anche io uso spessissimo le ' al posto delle ", ma era per seguire lo
stile del poster.
Lo svantaggio delle ' e` che non puoi metterci \n, \t, ecc. ecc.
Bye.

 Si`, magari con uno spazio dopo il FROM. ;)
Mhh.... uno spazio, ho la vaga impressione che sia necessario ;-)
..... a meno che non si faccia la follia di inserire lo spazio nella 
variabile.... stamani sono in vena di str**te :-)
Ciao
Gianni

 Gianni
ok, ho provato e la query va
il problema sta che il php non capisce di accostare $TABLE_PREFIX a 
_topics. Se assegno alla variabile l'intera stringa giusta ciao_topics 
allora il tutto funziona.
boh

 _topics.
L'errore stà proprio nel tuo codice:
"SELECT topic_title, topic_id
FROM $TABLE_PREFIX_topics WHERE topic_views != 0 ORDER BY $PHPBB2_ORDER 
DESC LIMIT 0, $PHPBB2_AMOUNT"
scrivere $TABLE_PREFIX_topics è errato...ed è anche logico: per php il 
nome della variabile, nel tuo caso, è tutto $TABLE_PREFIX_topics e non 
solamente $TABLE_PREFIX come tu vorresti
Se provi col codice che ti ho postato e che ti rinvio (testato sul mio 
server), funziona.
<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
$TABLE_PREFIX = 'ciao';
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABLE_PREFIX_topics";
$result = mysql_query("$SQL") or die("Errore nella Query,
                                   Verificare:<br>$SQL");
// Risultati query
while ($riga = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("<br>Titolo: %s  Argomento: %s", $riga[0], $riga[1]);
}
?>
Ciò significa che:
o componi il nome della tabella fuori dalla query e poi includi la 
variabile (come nel mio esempio)
oppure fai l'operazione suggerita da Alessandro: FROM " .$TABLE_PREFIX. 
"_topics"

 ?>
Arghh!! scusa, ma il codice sopra è errato, ho sbagliato il copia 
incolla (ho incollato il pezzo di codice con l'errore). Sotto trovi il 
codice giusto:
<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
$TABLE_PREFIX = 'ciao';
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABLE_PREFIX";
$result = mysql_query("$SQL") or die("Errore nella Query,
                                   Verificare:<br>$SQL");
// Risultati query
while ($riga = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("<br>Titolo: %s  Argomento: %s", $riga[0], $riga[1]);
}
?>
Ciao
Gianni

 $SQL = "SELECT topic_title, topic_id FROM $TABLE_PREFIX";
Scusa ancora, ma la forma corretta è questa:
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABELLA";
(ovviamente alla select poi ci aggiungi anche il resto)
Direi che è ora della pausa colazione.... :-)
Ciao
Gianni


ciao, ho provato la tua soluzione ma non va, mi da sempre risultato vuoto
ho provato la soluzione di alessandro ma mi da questo errore: Parse 
error: parse error, unexpected T_STRING
sto provando il tutto su altervista se può essere di aiuto

 error: parse error, unexpected T_STRING
Credo che tu non abbia chiuso gli apici
Ciao
Gianni

 
mi stampa
Tabella:_topics
Query:

 Query:
Strano.... strano davvero....
Hai scritto ESATTAMENTE quello sotto?
<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
$TABLE_PREFIX = 'ciao';
$TABELLA = $TABLE_PREFIX.'_topics';
$SQL = "SELECT topic_title, topic_id FROM $TABELLA";
print "<br>Tabella:".$TABELLA."<br>Query:".$SQL."<br>";
$result = mysql_query("$SQL") or die("Errore nella Query,
                                   Verificare:<br>$SQL");
// Risultati query
while ($riga = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("<br>Titolo: %s  Argomento: %s", $riga[0], $riga[1]);
}
?>
Insisto perchč come minimo il codice sopra ti deve stamapare:
Tabella:ciao_topics
Query:SELECT topic_title, topic_id FROM ciao_topics
Per un attimo lascia perdere il tuo script e prova a copiare il codice 
sopra in un nuovo file php, poi eseguilo (ovviamente passando i 
parametri di connesione al db corretti)
Dimmi cosa ti restituisce. (scusa se ti sembro insistente)
Ciao
Gianni

 Dimmi cosa ti restituisce. (scusa se ti sembro insistente)
figurati, mi fa piacere avere trovato un esperto :D
ecco cosa mi dice:
Tabella:ciao_topics
Query:SELECT topic_title, topic_id FROM ciao_topics
sembra che funzioni adesso O_o
provo a modificare il vero codice....

 provo a modificare il vero codice....
non lo prende nel codice vero
la variabile $TABLE_PREFIX viene presa dal database la quale è stata 
immessa dall'utente tramite una piccola form contenuta in un altro file.


ALT fermi tutti: ce l'ho fatta, ora funziona, c'era una imperfezione 
nella chiamata della variabile in questione
grazie a tutti per il supporto e per gli insegnamenti datemi :D
ciao!!

 immessa dall'utente tramite una piccola form contenuta in un altro file.
Quindi l'errore sembra essere nel post (o nella get).
Adesso è chiaro.... probabilmente recuperi i dati in modo errato. Se 
utilizzi php configurato con register_global=off (caldamente consigliato 
vedi php.ini), nel tuo script la variabile si chiameranno:
$_POST['TABLE_PREFIX'] se utilizzi il post come metodo di invio dati
oppure
$_GET['TABLE_PREFIX'] se utilizzi il get
Quindi tornando al tuo codice, prova a scrivere:
$result=mysql_query("SELECT topic_title, topic_id
FROM ".$_POST['TABLE_PREFIX']."_topics WHERE topic_views != 0");
Ovviamente stessa cosa devi fare per tutte le variabili che passi via 
get o via post
Ciao
Gianni


ho risolto se leggi sopra
OT: hai un hosting veramente buono da consigliarmi con tutte le opzioni 
del php e mysql settate ottimamente?
grazie ancora :D

 del php e mysql settate ottimamente?
1) 
http://www.seeweb.com
Il menu di amministrazione non è dei migliori (ha solo il minimo 
necessario, perlomeno l'offerta che io utilizzo), il prezzo non è 
bassissimo, ma l'assistenza è ottima. I rari problemi avuti negli ultimi 
5 anni, me li hanno sempre risolti in poche ore. PHP è impostato di 
default alla vecchia maniera (con register_global=on), ma basta creare 
un file .htaccess in htdocs e inserire: php_flag register_globals Off 
per settarlo come lo hai tu in locale.
2) Un mio cliente ha voluto per forza registrare il dominio quì: 
http://www.hostingplan.net/
Devo dire che le pagine di amministrazione del dominio sono veramente 
notevoli.... puoi fare veramente di tutto, compreso decidere gli ip di 
accesso al database mysql che si traduce in possibilità di fare 
applicazioni locali (ad esempio fatte con delphi o Visual Basic o 
chessò, Gambas sotto linux anziche python), che accedono direttamente al 
server sul web. Questo è un servizio raro da avere.
Ciao
Gianni