Creare folder in mod automat cu PHP

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adrian_ady
Mesaje: 80

Creare folder in mod automat cu PHP

Salutare,
am in site urmatorul cod pentru userul care introduce din contul sau o noua oferta. Ce trebuie sa adaug astfel incat sa se creeze in mod automat si un folder personal in care ulterior sa adauge cateva imagini(referitoare la oferta)?
Cumva trebuia facut la momentul inregistrarii in site?

Merci!
Am intrat in an nou, suntem inca aici deci e de bine!

MarPlo Mesaje: 4343
Salut
Cred ca asa ar trebui, cand utilizatorul se inregistreaza tot atunci sa se creeze directorul pe server, cu numele lui.
Cu functia mkdir() se poate crea directoare pe server cu php.

Cod: Selectaţi tot

// if folder 'name' not exists, create it
if(!is_dir('/path_to/name')) mkdir('/path_to/name', 0755); 

adrian_ady Mesaje: 80
Nu stiu sa iau valoarea inputului 'firma' de mai jos:

Cod: Selectaţi tot

<input name="firma" type="text" class="inputcol" id="firma"  value="<?=Member::inputvalue('firma')?>" placeholder=" *" maxlength="100" style="text-transform: uppercase;" />
care face parte din form-ul de inscriere si sa o preiau in input-ul 'hidden' din acelasi formular ce contine denumirea viitorului folder personal.

Cod: Selectaţi tot

<input name="folder" type="hidden" class="inputcol" id="folder"  value=" ??? "  />

MarPlo Mesaje: 4343
Valoarea dintr-un camp de formular se preia in php cu $_POST['nume'].
La tine cred ca merge asa:

Cod: Selectaţi tot

<input name="folder" type="hidden" class="inputcol" id="folder"  value="<?php echo isset($_POST['firma']) ? $_POST['firma'] : '';?>"  />

adrian_ady Mesaje: 80
Sunt ore, ore de cand tot incerc sa formulez cererea pentru a sterge si folderul atunci cand se sterge userul insa nu gasesc calea.

Cod: Selectaţi tot

       $folder =  $db->select("SELECT folder FROM membri WHERE id = ".$_GET['id']."  ")
        // in linia de mai sus ceva nu este bine cu toate ca pare totul corect sau poate ca mai trebuie ceva adaugat... 
        $cale_folder = '../'.$folder;
        if(is_dir($cale_folder)) rmdir($cale_folder);
        $db->delete("DELETE  FROM membri WHERE id = ".$_GET['sterge']." ");
	$db->delete("DELETE  FROM cereri WHERE id_membru = ".$_GET['sterge']." ");
	$db->delete("DELETE  FROM oferte WHERE id_membru = ".$_GET['sterge']." ");

MarPlo Mesaje: 4343
In codul tau, variabila $folder contine rezultatul de la $db->select(), care probabil returneaza un array sau object cu randurile selectate, si trebuie parcurs acest rezultat cu o functie foreach() ca sa preiei datele din coloana "folder".
Ceva gen:

Cod: Selectaţi tot

foreach($folder as $row) {
  $cale_f = '../'. $row['folder'];
  // ...
} 
Functia rmdir() sterge un director daca e gol. Dar daca are fisiere in el, trebuie mai intai sterse toate fisierele, apoi aplicat rmdir().
Poti folosi functia din acest exemplu, sterge fisierele si directorul.

Cod: Selectaţi tot

function deleteDir($path) {
  if(is_dir($path) === true) {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
    foreach ($files as $file) {
      if(in_array($file->getBasename(), array('.', '..')) !== true) {
        if($file->isDir() === true) rmdir($file->getPathName());
        else if (($file->isFile() === true) || ($file->isLink() === true)) unlink($file->getPathname());
      }
    }

    return rmdir($path);
  }
  else if((is_file($path) === true) || (is_link($path) === true)) return unlink($path);

  return false;
}
deleteDir('dir/test/'); 

adrian_ady Mesaje: 80
Am incercat dar nu iese; vreau sa specific ceva important:
'folder' este o voce a grupului 'membri', este unic, se formeaza automat la crearea unui nou cont deci nu sunt mai multe randuri. Pana acum am facut probe numai cu foldere goale deci nici macar asa nu a mers. Aseara am luat-o babeste si am facut proba inlocuind
$folder = $db->select("SELECT folder FROM membri WHERE id = ".$_GET['id']." ")
cu valoarea absoluta a folderului de sters:
$folder = 'denumirea din campul folder'; si a functionat.
De aici am tras concluzia ca este o greseala in randul de mai sus.

Cod: Selectaţi tot

$cale_folder = '../'.$folder;
if(is_dir($cale_folder)) rmdir($cale_folder);

MarPlo Mesaje: 4343
Modifica adresa catre acel director, poate ca nu trebuie (doar) "../", ci alta cale.
Depinde unde sunt acele directoare pe server in raport cu locatia fisierului php.

Subiecte similare