[PHP] Progettino CRUD di esercitazione. Problema su $_FILE.

  • Creatore Discussione Creatore Discussione Phelps
  • Data di inizio Data di inizio

Phelps

Utente Attivo
17 Dic 2018
50
0
6
ciao ragazzi sono nuovo e devo fare un esercizio con PHP OOP.
Qualcosa và storto nella logica del mio esercizio e non riesco ad ottenere i giusti messaggi di controllo.
Se vi posto il link di dropmefile vi và di dargli un occhiata?
pesa 10kb è una sciocchezza!
Grazie fatemi sapere
 
Se lo esegui sul tuo Xampp riwci a capire meglio.. Nel file add_user.php c'è la logica di inserire un utente. Ad un certo punto io istanzio la classe file e chiamo il metodo set_file che mi fa un controllo del file e poi il metodo move_file che oltre a fare qualche controllo deve anche spostare il file..
Ora cosa succede che se compilo il form di add_user mandando il file vengo reindirizzato bene ad users.php, il percorso viene scritto nel database e il file viene spostato nella cartella. Se cercassi di inserire un file con lo stesso nome ottengo nella pagina add_user l'errore da me impostato file gia esistente. e ok
Quando invece io compilo il form di add_user ma nonallego nessun file , invece di essere reindirizzato ad user ed avere quindi il campo user_image vuoto ottendo lo stesso errore file gia esistente ! ma io non allogo nessun file voglio proseguire diretto senza caricare file..
Spero di aver reso l'idea..
 
Nel solo file add_user.php modifica così:
PHP:
if (isset($_POST['submit'])) {
 /* $username = $_POST['username'];
  $password = $_POST['password'];
  $firstName = $_POST['firstName'];
  $lastName = $_POST['lastName'];*/
 
 
  $data_model=['username'=>'username','password'=>'password','first_name'=>'firstName','last_name'=>'lastName','user_image'=>''];
 
  if(!empty($_FILES['file_upload'])){
      $info = new SplFileInfo($_FILES['file_uploads']['name']);
      $data_model['user_image']=$info->getFilename().'-'.time().'.'.$info->get_Extension();
       $file = new File();
          $file->set_file($_FILES['file_upload']);
          if(!$file->move_file()){
            $message = $_SESSION['messaggio'];
            $session->message($message);
            redirect("add_user.php");
            die($message);
        }
  }
  $user = new User();
foreach($data_model as $k=>$v){
($k!='user_image')?$data_model[$k]=$_POST[$v]:null;
}


  $user->insert($data_model);
    $message = "User $user->id Inserted succesfully";
    $session->message($message);
    redirect('users.php');
}
 
<b>Fatal error</b>: Uncaught Error: Call to undefined method SplFileInfo::get_Extension() in C:\xampp2\htdocs\flavio\admin\add_user.php:16
Stack trace:
#0 {main}
thrown in <b>C:\xampp2\htdocs\flavio\admin\add_user.php</b> on line <b>16</b><br />
 
Ho messo if(!empty($_FILES['file_upload']['name'])) cosi la porzione di codice si attiva solo se arriva il nome del file immesso.
e poi nella classe file nei controlli di move uppload
ho detto che il file_exists e il moveupload si devono attivare solo se !empty($file['name'])
in move_file lo ricevo come $file e da add_user lo passo come $_FILES['file_upload']
funziona bene ora.

tu che mastichi bene php come vedi queste costruzioni?

Codice:
if (isset($_POST['submit'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];
  $firstName = $_POST['firstName'];
  $lastName = $_POST['lastName'];
  $user_image = !empty($_FILES['file_upload']) ? $_FILES['file_upload']['name'] : '';
  $fields = [
    'username' => $username,
    'password' => $password,
    'first_name' => $firstName,
    'last_name' => $lastName,
    'user_image' => $user_image
  ];

if(!empty($_FILES['file_upload']['name'])){
    $file = new File();
    $file->set_file($_FILES['file_upload']);
    if(!$file->move_file($_FILES['file_upload'])){
      $message = $_SESSION['messaggio'];
      $session->message($message);
      redirect("add_user.php");
      die($message);
  }
}
  $user = new User();
  $user->insert($fields);
    $message = "User $user->id Inserted succesfully";
    $session->message($message);
    redirect('users.php');
}
 
grazie del tuo intervento.. Ho ricevuto comunque l'input per risolvere il problema.
Saluti a presto per un prossimo problema;)
 

Discussioni simili