Scorrere una dir codice particolare

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti,

quello che vorrei fare è un pò particolare, cercherò di speigarmi,

in realtà ho trovato più o meno come fare però mi si presenta un problema

spiego

Devo creare un file che mi lista una serie di hyperlink ognuno collegato ad una specifica cartella rpesente nella cartella madre.

La dir mamma presenta altre cartelle ad esesmpio
1-figlio
2-figlio
3 - figlio

in pratica ognuno di questi numeri ha un nome nel mio database
1 = giovani
2 = andrea
3= Paolo

Ora dovrei tramite uno script prendere tutti i numeri iniziali delle sottocartelle di /mamma , estarrre il nome di queste dal database e listarle come hyperlink e quindi avere la seguente lista

Giovanni
Andrea
paolo

dove ognuno di questi link deve inviare ad un altro file il suo suffisso

ad esempio se uno clicca su giovanni si deve aprire un file /index e deve ricevere l'id 1 di giovanni

non so se mi sono speigato.

mi semrba molto complessa come cosa :hammer:
 
Prova con qualcosa di simile:
PHP:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=directory', 'root', 'password');
$stm = $pdo->prepare('SELECT name FROM directories WHERE id = ?');

$dirs  = glob('mamma/*', GLOB_ONLYDIR);
$names = array();

foreach ($dirs as $dir) {
	$num = explode(' ', end(explode('/', $dir)));
	$num = $num[0];
	
	$stm->execute(array($num));
	
	if ($stm->rowCount() == 0) {
		// nessun record trovato per questo ID
		
		continue;
	}
	
	$data = $stm->fetch();
	$name = $data['name'];
	
	// $name contiene il nome associato alla cartella
	
	$names[] = $name;
}

foreach ($names as $name) {
	echo "<a href=\"{$name}\">{$name}</a><br />";
}
?>
Non l'ho testato, quindi probabilmente non funzionerà.

Fammi sapere.
 
mamma mia. :crying:

Mi vergogno di chiederti cosa hai scritto . Mi sono limitato ad un copiaincolla e cambiare i parametri senza capirci un tubo e devo dire che funge quasi tutto tranne per l'href che dovrebbe indirizzare ad un file inviando solo l'id della cartella per il resto mi lista esattamente solo le cartelle avente un id-nomecartella.

Domani mi studio sta cosa del PDO avevo letto qualcosa di sfuggita ma è la prima volta che vedo questi codici.

Per l'hefr invece come si può inviare l'id della cartella come se fosse un GET o un POST?

Grazie !
 
ok risolto girovagando sul web

ho isnerito un form e una stringa in javascript

PHP:
<form id="form_1" method="post" action="file.php">
<?php
$pdo = new PDO('mysql:host=localhost;dbname=directory', 'root', 'password');
$stm = $pdo->prepare('SELECT name FROM directories WHERE id = ?');

$dirs  = glob('mamma/*', GLOB_ONLYDIR);
$names = array();

foreach ($dirs as $dir) {
    $num = explode(' ', end(explode('/', $dir)));
    $num = $num[0];
    
    $stm->execute(array($num));
    
    if ($stm->rowCount() == 0) {
        // nessun record trovato per questo ID
        
        continue;
    }
    
    $data = $stm->fetch();
    $name = $data['name'];
    
    // $name contiene il nome associato alla cartella
    
    $names[] = $name;
}

foreach ($names as $name) {
    echo "<li><a href=\"#\" onClick=\"document.getElementById('form_1').submit()\">{$name}</a></li><br />";

}
?>

poi ho avuto un altro problema ma per fortuna la beata session_start mi ha risolto tutto

Grazie ancora.

però però

se non ti secca ed hai due minuti mi spieghi in breve questo codice?
new PDO e glob sono arabo per me ed ora sono troppo rpeso epr leggermi le guide
 
PDO (PHP Data Objects) è una libreria introdotta in PHP5 per l'accesso e l'esecuzione di istruzioni su qualunque tipo di RDBMS (MySQL, SQLite, PostgreSQL, etc.). Viene usato nelle moderne applicazioni per permettere all'utente l'uso di qualunque tipo di database, e anche per evitare molti rischi di sicurezza (ad esempio con le prepared statement si elimina l'obbligo di eseguire l'escape dei valori). La documentazione è qui: http://php.net/manual/en/book.pdo.php.

glob() è invece una funzione per listare tutti i file corrispondenti al pattern specificato. Vedi qua: http://it.php.net/manual/en/function.glob.php.
 
ciao
@alex
dato che non sempre gli host vengono aggiornati ad ogni novità, basta in phpinfo() per vedere se le pdo ci sono? e se si (o no) nel listato in che punto guardare?
 
Come non detto..............

allora intanto grazei alessandro epr i link, come finisco sta cosa li leggerò molto attentamente.

posto sempre qui perchè sicuramente il problema dipende dalla query anche se si presenta nell'invio delle variabili.

Ieri non mi ero accorto dell'inghippo sia per l'ora sia perchè testavo avendo una cartella sola nella dir da esplorare, aggiungendone altre epr prova mi sonoa ccorto che in sostanza mi invia tutti gli id ed usando il GET mi rovina il link

che diventa www.miosito.com/script/index.php?id=1&id=2&id=3 etc. tanti sono gli id tante volte mi riporta l'id nel GET

penso che quessto dipenda dal fatto che laquery non è associativa quindi mi invia tutti gli id mentre io devo inviare solo l'id rispettivo al $name dell'href

come si fa ora?

Intanto sfoglio un pò quei link sperando di trovare la soluzione
 
@borgo: phpinfo() visualizza anche tutte le estensioni installate, quindi sì, puoi controllare con quello se PDO è abilitato. Non so in che punto guardare, cerca nella pagina premendo CTRL + F e digitando "pdo".

@Monital: tu non devi semplicemente visualizzare una lista coi link a tutte le directory? Non capisco perché hai usato un form. Basta modificare così il mio script:
PHP:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=directory', 'root', 'password');
$stm = $pdo->prepare('SELECT name FROM directories WHERE id = ?');

$directories = array();
foreach (glob('mamma/*', GLOB_ONLYDIR) as $dir) {
    $num = explode(' ', end(explode('/', $dir)));
    $num = $num[0];

    $stm->execute(array($num));

    if ($stm->rowCount() == 0) {
        // nessun record trovato per questo ID

        continue;
    }

    $data = $stm->fetch();
    $directories[$dir] = $data;
}

foreach ($directories as $name => $directory) {
    echo "<a href=\"pagina.php?id={$directory['id']}\">{$directory['name']}</a>";
}
?>
 
ciao
è questo in
Configure Command
cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack" "--with-snapshot-template=d:\php-sdk\snap_5_2\vc6\x86\template" "--with-php-build=d:\php-sdk\snap_5_2\vc6\x86\php_build" "--with-pdo-oci=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=D:\php-sdk\oracle\instantclient10\sdk,shared" "--without-pi3web"
?
 
@borgo: phpinfo() visualizza anche tutte le estensioni installate, quindi sì, puoi controllare con quello se PDO è abilitato. Non so in che punto guardare, cerca nella pagina premendo CTRL + F e digitando "pdo".

@Monital: tu non devi semplicemente visualizzare una lista coi link a tutte le directory? Non capisco perché hai usato un form. Basta modificare così il mio script:
PHP:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=directory', 'root', 'password');
$stm = $pdo->prepare('SELECT name FROM directories WHERE id = ?');

$directories = array();
foreach (glob('mamma/*', GLOB_ONLYDIR) as $dir) {
    $num = explode(' ', end(explode('/', $dir)));
    $num = $num[0];

    $stm->execute(array($num));

    if ($stm->rowCount() == 0) {
        // nessun record trovato per questo ID

        continue;
    }

    $data = $stm->fetch();
    $directories[$dir] = $data;
}

foreach ($directories as $name => $directory) {
    echo "<a href=\"pagina.php?id={$directory['id']}\">{$directory['name']}</a>";
}
?>

si scusa non ho scritto poi

avevo risolto provvisoriamente facendo una query con mysql associativo e nell'href indicavo l'id sopo l'?

così

PHP:
$sqlquery = "SELECT * FROM tabella WHERE nome= '{$name}'";
$result = mysql_query($sqlquery);
while ($data = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $name = $data['nome_league'];
	$id=$data['id'];
	}

    echo "<li><a href=\"../pagina.php?id=$id\" onClick=\"document.getElementById('form_1').submit()\">{$name}</a></li><br />";


}

però mi sembra più pulito come dici te ma di sto PDO ne so praticamente 0 quindi nell'attesa ho risolto così

il form l'ho inserito eprchè avevo trovato inr ete in un forum dicevano di inserire il form e cmq credo mi serva lo stesso eprchè devo inviare alla pagina.php una variabile fissa che però mi sta creando un problema inviata come get.

E difficile da spiegare ma a me serve che alla pagina.php arrivi anche una variabile fissa diciamo $var=x che gli faccia capire che l'id è stato inviato dalla pagina della lista.

questa variabile la invio con un hidden e poi in pagina.php effettuo un if dove se la variabile fissa è repsente segue un iter diverso sennò nisba.
 
Ultima modifica:
Allora ti conviene fare un controllo sul referrer:
PHP:
<?php
if ($_SERVER['HTTP_REFERER'] != 'url pagina lista') {
    header('HTTP/1.0 403 Forbidden');
    die('Accesso negato.');
}

// ...
?>
Anche se in teoria si può aggirare. Per qualcosa di più sicuro dovresti usare le sessioni, ma pensa prima se ne vale la pena.
 
Allora ti conviene fare un controllo sul referrer:
PHP:
<?php
if ($_SERVER['HTTP_REFERER'] != 'url pagina lista') {
    header('HTTP/1.0 403 Forbidden');
    die('Accesso negato.');
}

// ...
?>
Anche se in teoria si può aggirare. Per qualcosa di più sicuro dovresti usare le sessioni, ma pensa prima se ne vale la pena.

no ma con il form la variabile arriva

soltanto che essendo come GET mi entra nel link e mi fa casino.

se come dici te(adesso provo) non serve il form penso mi basta fare un form che invia in POST e ci metto l'hidden della variabile fissa. mentre l'id mi dovrebbe passare senza form

ora provo ma credo vada così(se non serve il form pèer l'id)
 

Discussioni simili