codice:
// CONNESSIONE AL DATABASE
$db = sqlite_open( 'tree_menu.db' );
// CONTROLLI E GESTIONE INSERIMENTI
if( isSet( $_GET['add'], $_GET['name'] ) ) {
$_GET['add'] = (int)$_GET['add'];
$_GET['name'] = sqlite_escape_string( $_GET['name'] );
$q1 = sqlite_unbuffered_query(
$db,
"SELECT
*
FROM
tree
ORDER BY
sx
ASC"
);
$row = 0;
$q2 = "BEGIN;
";
while( $r = sqlite_fetch_array( $q1, SQLITE_NUM ) ) {
$r[2] = (int)$r[2];
if( (int)$r[1] <= $_GET['add'] ) {
$q2 .= "UPDATE tree SET dx = ".( $r[2] + 2 )." WHERE id = {$r[0]};
";
}
else {
$q2 .= "UPDATE tree SET sx = ".( (int)$r[1] + 2 ).", dx = ".( $r[2] + 2 )." WHERE id = {$r[0]};
";
}
$row = &$r[0];
}
$q2 .= "INSERT INTO tree VALUES ( NULL, ".( ++$_GET['add'] ).", ".( ++$_GET['add'] )." );
INSERT INTO branch VALUES ( NULL, ( SELECT MAX(id) FROM tree ), '{$_GET['name']}' );
COMMIT;";
sqlite_unbuffered_query( $db, $q2 );
}
// CONTROLLI E GESTIONE ELIMINAZIONI
elseif( isSet( $_GET['remove'] ) ) {
$_GET['remove'] = (int)$_GET['remove'];
$q1 = sqlite_query(
$db,
"SELECT branch.tree_id, tree.sx FROM branch, tree WHERE branch.tree_id = tree.id AND branch.id = ".$_GET['remove']
);
if( sqlite_num_rows( $q1 ) === 1 ) {
$tree_id = $tree_sx = 0;
while( $r = sqlite_fetch_array( $q1, SQLITE_NUM ) ) {
$tree_id = $r[0];
$tree_sx = (int)$r[1];
}
sqlite_unbuffered_query( $db, "DELETE FROM tree WHERE id = ".$tree_id );
$q1 = sqlite_unbuffered_query(
$db,
"SELECT
*
FROM
tree
ORDER BY
sx
ASC"
);
$row = 0;
$q2 = "BEGIN;
";
while( $r = sqlite_fetch_array( $q1, SQLITE_NUM ) ) {
$r[2] = (int)$r[2];
if( (int)$r[1] < $tree_sx ) {
$q2 .= "UPDATE tree SET dx = ".( $r[2] - 2 )." WHERE id = {$r[0]};
";
}
else {
$q2 .= "UPDATE tree SET sx = ".( (int)$r[1] - 2 ).", dx = ".( $r[2] - 2 )." WHERE id = {$r[0]};
";
}
$row = &$r[0];
}
$q2 .= "DELETE FROM branch WHERE id = {$_GET['remove']};
COMMIT;";
sqlite_unbuffered_query( $db, $q2 );
}
}
// PRENDO TUTTO L' ALBERO
$q1 = @sqlite_query(
$db,
"SELECT
branch.id, branch.name, tree.sx
FROM
branch, tree
WHERE
branch.tree_id = tree.id
ORDER BY
tree.sx
ASC"
);
// SE C'E' LO MOSTRO
if( $q1 && sqlite_num_rows( $q1 ) > 0 ) {
$redirect = false;
$output = "
<script type=\"text/JavaScript\">
function add( where ) {
var w = window.prompt( 'Insert the name of the new branch' );
var str = '{$_SERVER['PHP_SELF']}?add=' + where + '&name=' + w.split(\"'\").join(\"\\\'\");
window.open( str, '_self' );
}
</script>
<pre>";
$last_sx = 1;
$tab = 0;
while( $r = sqlite_fetch_array( $q1, SQLITE_NUM ) ) {
$compare = (int)$r[2];
if( $compare === ( $last_sx + 1 ) ) {
$tab++;
}
elseif( $compare > ( $last_sx + 2 ) && $tab >= ( $compare - ( $last_sx + 2 ) ) ) {
$tab -= $compare - ( $last_sx + 2 );
}
$output .= str_repeat( "\t", $tab )."- ";
$output .= "<a title=\"remove this branch\" href=\"{$_SERVER['PHP_SELF']}?remove={$r[0]}\">{$r[1]}</a>";
$output .= "[<a title=\"add in this branch\" href=\"#\" onclick=\"add( {$r[2]} ); return false;\">+</a>]\r";
$last_sx = $compare;
}
echo $output."</pre>";
}
// ALTRIMENTI CREO IL DATABASE
else {
$redirect = true;
sqlite_unbuffered_query(
$db,
"BEGIN;
CREATE TABLE tree (
id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
sx INTEGER UNSIGNED NOT NULL,
dx INTEGER UNSIGNED NOT NULL
);
CREATE TABLE branch (
id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tree_id INTEGER UNSIGNED NOT NULL,
name VARCHAR(255) NOT NULL
);
CREATE TABLE leaf (
id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
branch_id INTEGER UNSIGNED NOT NULL,
content TEXT
);
INSERT INTO tree VALUES( NULL, 1, 16 );
INSERT INTO tree VALUES( NULL, 2, 15 );
INSERT INTO tree VALUES( NULL, 3, 6 );
INSERT INTO tree VALUES( NULL, 4, 5 );
INSERT INTO tree VALUES( NULL, 7, 8 );
INSERT INTO tree VALUES( NULL, 9, 14 );
INSERT INTO tree VALUES( NULL, 10, 11 );
INSERT INTO tree VALUES( NULL, 12, 13 );
INSERT INTO branch VALUES( NULL, 1, 'Massimiliano' );
INSERT INTO branch VALUES( NULL, 2, 'Francesco' );
INSERT INTO branch VALUES( NULL, 3, 'Mario' );
INSERT INTO branch VALUES( NULL, 4, 'Luigi' );
INSERT INTO branch VALUES( NULL, 5, 'Fabio' );
INSERT INTO branch VALUES( NULL, 6, 'Piero' );
INSERT INTO branch VALUES( NULL, 7, 'Gianni' );
INSERT INTO branch VALUES( NULL, 8, 'Luca' );
COMMIT;"
);
}
// CHIUDO LA CONNESSIONE
sqlite_close( $db );
// VERIFICO SE HO CREATO O MENO IL DATABASE
if( $redirect === true ) {
// IN CASO RICARICO LA PAGINA
header('Location:'.$_SERVER['PHP_SELF']);
}