Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Miten poistan kaikki mysql taulut joissa esiintyy käyttäjän nimi

Sivun loppuun

Suominen90 [07.09.2005 19:10:16]

#

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

kasetti [07.09.2005 19:51:10]

#

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.

Suominen90 [07.09.2005 19:59:00]

#

Joku vois tehä jonkun esimerkin kun en itse osaa tota koodata jota kasetti ehdotti

tsuriga [07.09.2005 20:11:12]

#

Osaat kyllä, kunhan vain viitsit ajatella. Myslin ja php:n manuaalit auttavat.

kasetti [07.09.2005 20:24:05]

#

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>";
}
}

?>

Suominen90 [08.09.2005 15:38:10]

#

Mihinköhän päin tossa koodissa pitäis pistää LIKE 'galleria_tunnus'

tsuriga [08.09.2005 18:21:15]

#

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.

Suominen90 [08.09.2005 18:43:31]

#

Mä en tajuu miten substr_count auttais nyt. Joku vois kyl tehä esimerkin miten poistetaan tauluja jotka alkaa tietyllä tavalla

tsuriga [08.09.2005 19:21:40]

#

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.

<?php
$taulujen_nimet = mysql_list_tables($muntietokanta);
foreach($taulujen_nimet as $taulu) {
  if (strpos($taulu,"tatti") !== false)
    mysql_query("DROP TABLE ".$taulu);
  }
?>

Suominen90 [09.09.2005 15:31:13]

#

Warning: Invalid argument supplied for foreach() in W:\www\project_sh\gallery\testi.php on line 18

tollanen ilmotus tuli

Blaze [09.09.2005 15:42:24]

#

Arvaan: mysql_list_tables ei onnistunu ja se palautti falsen taulukon sijasta.

Suominen90 [09.09.2005 20:26:13]

#

Ei lähteny toimimaan vaikka kuinka kikkailin ton kanssa

tsuriga [10.09.2005 10:30:44]

#

Hmm missä kohdin menee väärin? Eikö mysql_list_tables anna millään taulujen nimiä vai eikö taulujen droppaus onnistu?

Suominen90 [10.09.2005 12:20:53]

#

mysql_list_tables ei mun mielestä tainnu toimia. Jotenkin yhdistämisessä jotain vikaa.

Suominen90 [10.09.2005 13:39:46]

#

<?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

tsuriga [11.09.2005 12:59:01]

#

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)) {.

Suominen90 [11.09.2005 15:35:09]

#

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

Antti Laaksonen [11.09.2005 15:42:29]

#

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?

Suominen90 [11.09.2005 16:04:07]

#

Kaikki käyttäjät on samassa taulussa, mutta käyttäjän muut tiedot esim. oletus kuva on eri taulussa (galleria_tunnus_oletus)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta