Scusate la riapertura del topic ma stavo apportando delle modifiche per "dinamicizzare" questo script (che ultimamente uso parecchio - sopratutto nel webserver locale) ed ho delle difficoltà nell'esecuzione del secondo form (che dovrebbe occuparsi dell'eliminazione):
Codice PHP:
<?php
error_reporting(E_ALL);
echo '<div style="margin: 10px;">';
# Avvio la sessione
session_start();
# Imposto la sessione (tramite i dati presi dal form)
$_SESSION['hostname'] = $_POST['hostname'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
$_SESSION['dbName'] = $_POST['dbName'];
$_SESSION['prefix'] = $_POST['prefix'];
# Connessione al database, configurazione dei dati (ricavati dal form)
$host = $_SESSION["hostname"];
$user = $_SESSION["username"];
$pass = $_SESSION["password"];
$dbName = $_SESSION["dbName"];
$prefix = $_SESSION["prefix"];
# Creo il form
echo '
<form method="post" name="view">
<input name="hostname" value="'.$host.'" type="text" style="margin: 5px 0"> > DB_HOST (Usually localhost) <b>*</b><br />
<input name="username" value="'.$user.'" type="text" style="margin: 5px 0"> > DB_USER (Your MySQL username) <b>*</b><br />
<input name="password" value="'.$pass.'" type="password" style="margin: 5px 0"> > DB_PASSWORD (...and MySQL password) <b>*</b><br />
<input name="dbName" value="'.$dbName.'" type="text" style="margin: 5px 0"> > DB_NAME (Your database name) <b>*</b><br />
<input name="prefix" value="'.$prefix.'" type="text" style="margin: 5px 0"> > TB_PREFIX (eg: wp_)<br />
<input value="View Table" name="view_now" type="submit" style="margin: 5px 0">
</form>';
# Controllo campi obbligatori
if (empty($host) && empty($user) && empty($pass) && empty($dbName)) {
echo "All fields marked with an asterisk (*) are required!";
}
elseif (empty($host)) {
echo "Hostname is required!";
}
elseif (empty($user)) {
echo "MySQL Username is required!";
}
elseif (empty($pass)) {
echo "MySQL Password is required!";
}
elseif (empty($dbName)) {
echo "Database Name is required!";
}
else {
# Lunghezza prefisso
$pl = strlen($prefix);
# Inizio connessione al database
$db = mysql_connect($host, $user, $pass) or die("Error: " . mysql_error());
mysql_select_db($dbName, $db) or die("Error: " . mysql_error());
# Query per estrarre i nomi delle tabelle
$q = mysql_query('SHOW TABLES FROM ' . $dbName, $db) or die("Error: " . mysql_error());
# Tabelle da eliminare
$toDrop = '';
while($r = mysql_fetch_row($q)) {
$name = $r[0]; # il nome della tabella
$n = substr($name, 0, $pl); # taglia il nome dall'inizio fino alla lunghezza del prefisso
if($n == $prefix) # se il prefisso corrisponde, aggiungo alla coda di eliminazione
$toDrop .= $name . ',';
}
$toDrop = substr($toDrop, 0, strlen($toDrop) - 1); # rimuove la virgola finale
$viewtables = $toDrop;
$droptables = 'DROP TABLE ' . $toDrop;
if(!empty($viewtables)) {
$viewtables = str_replace(",", " | ", $viewtables);
echo '
Table(s) found:
<hr />
<em>', $viewtables, '</em>
<hr />
<form method="post" name="delete" style="margin: 25px 0">
<input name="dropall" value="ok" type="hidden">
Warning: "Drop all tables Permanently" > <input value="Drop NOW!" name="drop_now" type="submit">
</form>';
}
elseif(isset($_POST["dropall"])) {
$droptables = str_replace(array("DROP TABLE", ","), array("<br />", " | "), $droptables);
echo '
Provo ad eseguire la query:
<hr />
<em>', $droptables, '</em>
<hr />';
if(mysql_query($droptables, $db))
echo '
Tabelle eliminate con successo!';
else
echo '
Error: ', mysql_error();
}
else {
echo 'No table(s) found!';
}
}
mysql_close($db); # Chiudo la connessione al db
session_destroy(); # Distruggo la sessione
echo '
</div>';
?>
Semplicemente mi ricarica la pagina e svuota tutti i campi (anziché avviare la corretta eliminazione delle tabelle interessate).
Idee per risolvere (penso ci sia qualcosa nei form - non li ho mai digeriti granché)?