Miten poistan kaikki mysql taulut joissa esiintyy käyttäjän nimi? Olen kokeillut näin muttei toimi
<?php mysql_query("DROP TABLE LIKE `galleria_{$_GET["user"]}_%`",$yhteys); ?>
Ja miksei tää toimi
<?php foreach (glob("./profile/{$_GET["user"]}/{$_GET["dir"]}/*.*") as $filename) { $ext = explode(".", $filename); mysql_query("DROP TABLE `galleria_{$_GET["user"]}_{$ext[0]}_kuvateksti`",$yhteys); mysql_query("DROP TABLE `galleria_{$_GET["user"]}_{$ext[0]}_kommentit`",$yhteys); } ?>
HUOM Olen vielä noob mysql:län kanssa
Xuvo kirjoitti:
Miten poistan kaikki mysql taulut joissa esiintyy käyttäjän nimi? Olen kokeillut näin muttei toimi
<?php mysql_query("DROP TABLE LIKE `galleria_{$_GET["user"]}_%`",$yhteys); ?>
Ei taida olla ihan validia syntaksia. Onnistuisikohan vaikka näin:
1. haet taulujen nimet esim. tyyliin: $result = mysql_query("SHOW TABLES",$yhteys);
2. tutkit PHP:lla esim for loopissa onko vastauksen taulun nimessä tuo $_GET["user"] ja jos on, suoritat sitten poiston mysql_query("DROP TABLE $result[$i]",$yhteys);
Tässä ihan hatusta ideaa jota ei ole kokeiltu.
Joku vois tehä jonkun esimerkin kun en itse osaa tota koodata jota kasetti ehdotti
Osaat kyllä, kunhan vain viitsit ajatella. Myslin ja php:n manuaalit auttavat.
tsuriga kirjoitti:
Myslin ja php:n manuaalit auttavat.
Varsinkaan PHP:n kertoo aika hyvin miten homma tehdään. Olipahan siellä jonkun käyttäjän (wbphfox at xs4all dot nl) koodiesimerkkikin (hieman muokkasin):
<?php function Connection() { $server = "localhost"; $database = "TIETOKANTA"; $user = "KÄYTTÄJÄ"; $password = "SALASANA"; $link = mysql_connect( $server, $user, $password ) or die( "No connection available" ); mysql_select_db( $database, $link ) or die( "Can't select database" ); } echo "<p align=\"left\">"; //this is the connection file for the database.... $dbname = 'TIETOKANNAN NIMI'; Connection(); $result = mysql_list_tables($dbname); echo "<table width=\"75%\" border=\"0\">"; echo "<tr bgcolor=\"#993333\"> "; echo "<td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"-1\" color=\"#FFFFFF\">Table name:</font></td>"; echo "<td><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"-1\" color=\"#FFFFFF\">Delete?</font></td>"; echo "</tr>"; if (!$result) { print "DB Error, could not list tables\n"; print 'MySQL Error: ' . mysql_error(); exit; } while ($row = mysql_fetch_row($result)) { echo "<tr bgcolor=\"#CCCCCC\">"; echo "<td>"; print "$row[0]\n"; echo "</td>"; echo "<td>"; echo "<a href=\"$PHP_SELF?action=delete&table="; print "$row[0]\n"; echo "\">Yes?</a>"; echo "</td>"; echo "</tr>"; } mysql_free_result($result); //Delete if($action=="delete") { Connection(); $deleteIt = mysql_query("DROP TABLE $table"); if($deleteIt) { echo "The table \""; echo "$table\" has been deleted with succes!<br>"; } else { echo "An error has occured...please try again<br>"; } } ?>
Mihinköhän päin tossa koodissa pitäis pistää LIKE 'galleria_tunnus'
Ei mihinkään. Käytä substr_counttia. mysql_list_tables-funktiolla haet siis taulujen nimet ja etsit niistä käyttäjän nimeä ja poistat ne, joista se löytyy.
Ps. Tuossa koodissa oletetaan register_globals=on.
Mä en tajuu miten substr_count auttais nyt. Joku vois kyl tehä esimerkin miten poistetaan tauluja jotka alkaa tietyllä tavalla
Tulipaha mieleen, notta strpos voip olla nopeampi.
No siis, sulla on ne taulujen nimet ja jos tahot poistaa ne, joiden nimessä on vaikka "tatti", niin looppaat ne nimet läpi ja poistelet malliin. Muokkaat tästä annan nyt melko valmista koodia kun et itse jaksa ajatella.
Warning: Invalid argument supplied for foreach() in W:\www\project_sh\gallery\testi.php on line 18
tollanen ilmotus tuli
Arvaan: mysql_list_tables ei onnistunu ja se palautti falsen taulukon sijasta.
Ei lähteny toimimaan vaikka kuinka kikkailin ton kanssa
Hmm missä kohdin menee väärin? Eikö mysql_list_tables anna millään taulujen nimiä vai eikö taulujen droppaus onnistu?
mysql_list_tables ei mun mielestä tainnu toimia. Jotenkin yhdistämisessä jotain vikaa.
<?php $yhteys = mysql_connect("localhost", "root", "root"); mysql_select_db("gal", $yhteys); $taulujen_nimet = mysql_list_tables($yhteys); foreach($taulujen_nimet as $taulu) { if (strpos($taulu,"galleria_") !== false) mysql_query("DROP TABLE ".$taulu); } ?>
Tollasta kokeilin ja tuli se foreach error
Ilmankos kun mysql_list_tables palauttaa resurssin. Lukaise https://www.php.net/manual/en/function.mysql-list-tables.php, siinä on vaihtoehtoinen tapa hakea taulujen nimet, ilmeisesti sinun tulee joka tapauksessa käyttää jotain lausetta tyyliin while ($row = mysql_fetch_row($result)) {.
Yritin tuota vaihtoehtoista versiota mutta samaa foreach erroria sanoo vieläkin. Voiskohan muuten johtua mun palvelimesta että tulee se error on muuten ennenkin valittanu foreachin kanssa.
Noniin mun palvelimesta se oli kiinni nyt ei enään näy foreach erroria mutta nyt ei näy mitään kun yritin laittaa sen tulostaa taulujen nimet
Tuollainen taulujen paljous kuulostaa kyllä vähän pahaenteiseltä. Mitäpä jos panisit kaikki kuvat (tai muut tietokantaan tallennettavat jutut) samaan tauluun ja lisäisit ylimääräisen käyttäjän ilmoittavan kentän?
Kaikki käyttäjät on samassa taulussa, mutta käyttäjän muut tiedot esim. oletus kuva on eri taulussa (galleria_tunnus_oletus)
Aihe on jo aika vanha, joten et voi enää vastata siihen.