ugrás a tartalomhoz

Dinamikus Táblamódosítás?

net.god · 2006. Aug. 15. (K), 22.42
Hi!

Ez lenne az a rész ahol elakadtam:

<?php
$table=$_POST['nev'];
$sql = "INSERT INTO $table (`adat`, `datum`) VALUES ('$_POST[data]', '$datum')";
$table változót valahogyan idézőjelezni kellene, de már számos variációt megpróbáltam (string összefűzéssel meg minden), de nem, nem megy!

Hogyan lehet dinamikusan változtatni a tábla nevét?
 
1

támadások melegágya

Táskai Zsolt · 2006. Aug. 16. (Sze), 10.01
ez így elég meredek. egy POSTból jövő paraméter a tábla neve? ezzel elég komoly rést nyitsz a rendszereden. persze lehet, hogy ez csak kivonata a kódodnak, de az ilyentől sokan megijedünk. amúgy nagyjából jól néz ki a dolog, ha a POSTból jövő változó tényleg egy tábla neve. irasd ki a query-t az oldalra, és nézd meg, hogy azt akartad-e. esetleg próbáld meg phpmyadminban is, ha ránézésre nem látod, mi a baj. utóbbi talán részletesebb hibaüzenettel szolgál.
jó munkát,
Tasi
2

phpmyadmin vs. $valami

net.god · 2006. Aug. 16. (Sze), 13.12
phpmyadmin jó ötletnek bizonyul, de változóval hogyan teszteljem?
3

az összeállított query-t

Táskai Zsolt · 2006. Aug. 16. (Sze), 13.20
azt a query-t irasd ki HTML-be, amit lefuttatnál. ebben már nyilván minden behelyettesítést megtettél. aztán ezt másold be a phpmyadminba.
4

query = NULL

net.god · 2006. Aug. 16. (Sze), 17.37
//Ha erre gondoltál:
$sql = "INSERT INTO `.$table.` (`adat`, `datum`) VALUES ('$_POST[data]', '$datum')";
$eredmeny = mysql_query($sql, $kapcsolat) or mysql_error(); //nincs mysql_error()
print $eredmeny . "<br>";//DE az eredmény NULL

if (!$eredmeny){ echo 'Valamilyen okból NEM sikerült feltölteni a táblát!<br>';
}//Tehát kiírja, hogy HIBA!
else print "Siker <br>";

//EZ így nem az igazi, mert nem mond semmit a query
8

a következőt mondtam

Táskai Zsolt · 2006. Aug. 17. (Cs), 11.08

$sql = "INSERT INTO `$table` (`adat`, `datum`) VALUES ('$_POST[data]', '$datum')";
echo ($sql);
5

Tervezési hiba

Anonymous · 2006. Aug. 17. (Cs), 07.52
Mint azt előttem már mondották, ez támadások melegágya. Általában ha ilyen típusú querykre van szükséged, akkor valamilyen tervezési hiba forog fenn. Mit szeretnél ezzel elérni? Egy rakás hasonló táblába beletenni adatokat? Miért nem vonod össze egy táblává?
6

Tesztelés

net.god · 2006. Aug. 17. (Cs), 08.35
Ez nem egy netre kikerülő adatbázis lenne. Csupán egy tesztelés itthonra, hogy a kereséseket egy hatalmas adatbázisban hogyan lehetne gyorsítani. Jól látod hogy ugyan olyan adatok vannak sok táblában és igen össze lehetne vonni, de akkor keresnem kellene a nevek között, azután meg a hozzá tartozó adatok között (rengeteg adat). Ez valószínűleg jobban terheli a szervert mintha a név adott lenne (mint tábla) és ebben a táblában kell megkeresni a megfelelő adatot, mivel így kisebb egységekben kell keresnie, és tudjuk hogy kevesebb dolgot könnyebb rendezni is.

Lehet, hogy védelmi okokból maga a mysql nem biztosít olyan lehetőséget, hogy dinamikusan adjunk meg tábla nevet?
7

Nem

Anonymous · 2006. Aug. 17. (Cs), 10.32
Ez akkor is valószínűleg tervezési hiba. SQLben nagyon sok minden nem lehet megoldani, pl. XOR kapcsolatokat sem, de ezért nem is szabad úgy megtervezni az adatbázisokat.

Én úgy oldottam meg ezt, hogy a közös adatokat, pl metainformációk és társai egy táblába kerültek, ahol az adatok egy egyedi azonosítót kaptak. A specifikus adatok pedig külön-külön táblába, amelyet egy távoli kulccsal a központi táblához kapcsolatam.

A keresés ezen úgy megy, hogy ha a metainfók között keresek, akkor a központi táblán, ha specifikus adaton, akkor a spec táblában.

Jól lehet, így nem lehet fulltext keresést csinálni az összes típusú adaton, erre még keresem a megoldást.