Ok, hai ca incerc altfel:
Din cate inteleg tu o sa ai un element HTML select cam asa:
Apropo, sa scoti eventul de onchange pus de dreamweaver, altfel nu mai e valabil ce zic eu aici.
Cod: Selectaţi tot
<form action="fisier_php_care_executa_query_la_DB.php" method="post">
<select name="nume_tabel">
<option>tabel 1</option>
<option>tabel 2</option>
<option>tabel 3</option>
<option>tabel 4</option>
</select>
<input type="submit">
</form
Tu cand dai submit la formularul asta, o sa ai la dispozitie in fisier_php_care_executa_query_la_DB.php variabila supergolabala (adica o poti accesa de oriunde in codul tau - functie, clasa sau cod simplu) $_POST
In ea o sa gasesti numele tabelului selectat in select daca citesti $_POST['nume_tabel']. E, asta e variabila care iti trebuie tie, ca... asta variaza in codul tau, nu? Numele tabelelui.
Daca query-urile pe care vrei sa le faci la DB arata la fel si doar numele tabelelui variaza atunci e aiurea sa stai sa scrii 4 query-uri pentru 4 tabele adica in total 16 query-uri. Mai bine faci o functie care primeste ca argument numele tabelului pe care trebuie sa il modifice sau ce i-o mai face.
Cod: Selectaţi tot
function proceseazaTabel($nume_tabel) {
// aici ne asiguram ca scriptul nu e vulnerabil la SQL injection
$nume_tabel = mysql_real_escape_string($nume_tabel);
$query1 = "SELECT * FROM " . $nume_table . "ORDER BY date";
mysql_query($query1) or die(mysql_error());
// celelalte query-uri
$query4 = "....";
mysql_query($query4) or die(mysql_error());
}
Asta a fost functia, sa zicem ca o pui la inceputul fisierului al doilea, adica acolo unde te duce formularul.
Acum nu iti mai ramane decat sa apelezi functia asa:
Cam asta e solutia, insa, nu stiu ce vrei tu sa faci cu scriptul asta si nici cum arata structura bazei tale de date dar gandeste-te si la lucrul asta. Un utilizator ar putea trimite ca valoare a $_POST['nume_tabel'] orice vrea el, nu numai ce ai tu definit in select. Si uite cum, face exact ce am facut eu aici numai ca inlocuieste doua chestii, atributul action de la formular, sa trimita spre pagina din site-ul tau care proceseaza formularul, si doi, valoarea din optiunea selectata de el.
Bun, acum sa acopar alte aspecte din primul meu post. Iti ziceam de magic_quotes_gpc. Fac o paranteza, iti explic aici dar sa treci si pe la manual sa te uiti ca PHP-ul e mai mare decat am eu timp si cunostinta sa zic.
In php.ini exista o directiva, magic_quotes_gpc, care daca e pe on, face escape la toate variabilele superglobale, alea de le ziceam mai sus. Adica, daca eu introduc intr-un formular caracterul ' (ghilimea), il voi primi in scriptul care proceseaza formularul valoarea \'. Asta pentru ca ghilimelele sunt periculoase pentru query-uri. Bun, acum daca directiva asta e pe on si eu fac mysql_real_escape_string (functie care face acelasi lucru) o sa fac escape de doua ori, ceea ce e egal cu nici un escape, deci am vulnerabilitate in query.
asa ca mai sus in loc de doar mysql_real_escape_string($nume_tabel) ar trebui:
Cod: Selectaţi tot
if ( get_magic_quotes_runtime() ) {
$nume_tabel = stripslashes($nume_tabel);
$nume_tabel = mysql_real_escape_string($nume_tabel);
}
Ok, ar mai fi cate ceva de zis dar sper ca postul asta sa te ajute mai mult ca celalalt.