Originalmente inviato da
fcfclean
salve
ho trovato questo codice che crea la cartella dentro quella esistente funziona ma come posso aggiungere un messaggio cartella creata con successo chiedo aiuto grazie
Come suggerito da GraphOGL sopra, è possibile mostrare un messaggio. Il codice così com'è però è un po rischioso, visto non c'è nessun controllo sul nome della directory che viene creata. Proviamo a renderlo un po' più solido!
Prima di tutto, diamo una ripulita alla sintassi del php, ed ai tag del form:
Codice PHP:
<?php
$path = "documenti/{$_POST['foldername']}"; // ← evitiamo warning con apici, e graffe di sicurezza
if(!is_dir($path)){
mkdir($path);
}
?>
<form method="post">
<label for="foldername">Cartella</label>
<input type="text" name="foldername" id="foldername" placeholder="Nuova cartella" />
<button type="submit">Crea</button>
</form>
Ho aggiunto una <label> collegata al campo, e sostituito value= con placeholder=. Per inviare il form, input/submit è un po' obsoleto, con <button> hai più controllo.
Poi aggiungiamo il messaggio di conferma, leggermente diverso dall'esempio sopra:
Codice PHP:
<?php
$path = "documenti/{$_POST['foldername']}";
$creazione_riuscita = false; // ← assumiamo di non esserci riusciti
if(!is_dir($path)){
$creazione_riuscita = mkdir($path); // ← e poi guardiamo il risultato
}
?>
<form method="post">
<label for="foldername">Cartella</label>
<input type="text" name="foldername" id="foldername" placeholder="Nuova cartella" />
<button type="submit">Crea</button>
</form>
<?php if ($creazione_riuscita): ?>
<div>
Directory <code><?= htmlspecialchars($path) ?></code> creata con successo!
</div>
<?php endif ?>
Purtroppo qualsiasi cosa uno scriva nel campo, viene accodata a documenti/ senza nessun controllo. Se io scrivessi ../altrove, la directory verrebbe creata accanto a "documenti", invece che al suo interno. Per evitare questo problema, è meglio validare il nome.
La prima parte diventa così:
Codice PHP:
<?php
$nuova_directory = $_POST['foldername'] ?? ""; // ← se manca il parametro, usiamo una stringa vuota
function percorso_valido($dir) {
// il nome può contenere solo lettere, numeri, e '-'
if (!preg_match("/[a-zA-Z0-9-]+/", $dir)) {
return false;
}
// la directory non deve già esistere
if (is_dir($dir)) {
return false;
}
// tutti i controlli sono passati? OK!
return true;
}
// mkdir viene chiamata solo se il percorso è valido
$creazione_riuscita = percorso_valido($nuova_directory)
&& mkdir("documenti/{$nuova_directory}");
?>
I controlli potevano andare tutti su una riga, ma separandoli così sono più facili da leggere e modificare. E con questo la cartella viene creata solo se il nome rientra nei parametri.