Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z podmianą pliku poprzez formularz
Forum PHP.pl > Forum > Przedszkole
dopal
Witam,
Mam plik formularza ( zrobiłem to na szybko na potrzeby wątku na forum).
Można w nim dodawać informacje wraz z plikiem ( np. doc, pdf). To działa bez problemu. Wszystko ładnie się wyświetla w dalszej części pliku.
Jest też opcja edycji, która zaczytuje dane z bazy i pozwala zmodyfikować.
Plik formularza wygląda jak poniżej:
  1. <h2>Dodawanie</h2>
  2. <table>
  3. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
  4. <tr><td>Imię:</td><td><input type="text" name="imie" /></td></tr>
  5. <tr><td>Nazwisko:</td><td><input type="text" name="nazwisko" /></td></tr>
  6. <tr><td>Dołącz plik:</td><td><input type="file" name="file"/></td></tr>
  7. <tr><td></td><td><input type="submit" name="add" style="background-color:yellow" value="Dodaj"/></tr>
  8. </form></table>
  9.  
  10. <hr>
  11.  
  12. <?php $get = $test->load_all(); ?>
  13.  
  14. <table width="50%" border="1">
  15. <tr bgcolor="yellow">
  16. <td width="20%"><b>Imie</b></td>
  17. <td width="20%"><b>Nazwisko</b></td>
  18. <td width="20%"><b>Plik</b></td>
  19. <td width="10%"><b>Zarządzaj</b></td></tr>
  20. <?php
  21. while( $set = mysql_fetch_assoc( $get)){
  22. echo '<tr><td width="20%">'.$set['imie'].'</td>
  23. <td width="20%">'.$set['nazwisko'].'</td>
  24. <td width="20%">'.$set['plik'].'</td>
  25. <td width="2%"><a href="panel.php?get=testowy&set=edit&id='.$set['Id'].'" alt="Edytuj" title="Edytuj miasto"><img src="../images/edit.png" width="20" height="20" ></a></td>';
  26. }
  27. ?>
  28. </table>
  29.  
  30. <?php
  31.  
  32. if( isset( $_GET['set']) && $_GET['set'] == 'edit'){
  33. $id = mysql_real_escape_string( $_GET['id']);
  34. $set = mysql_fetch_assoc( $test->get( $id));
  35. ?>
  36.  
  37. <hr>
  38. <table>
  39. <h3>Edytuj</h3>
  40. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" >
  41. <tr><td>Imię:</td><td><input type="text" name="imie" value="<?php echo $set['imie']; ?>"/></td></tr>
  42. <tr><td>Nazwisko:</td><td><input type="text" name="nazwisko" value="<?php echo $set['nazwisko']; ?>"/></td></tr>
  43. <tr><td>Dołącz plik:</td><td><input type="file" name="file"/></td></tr>
  44. <tr><td></td><td><input type="submit" name="edit" style="background-color:yellow" value="Edytuj"/></tr>
  45. </form>
  46. </table>
  47. <?php }?>

Drugi plik zawiera zapytania do bazy:
  1. <?php
  2. class Testowy{
  3. public $imie;
  4. public $nazwisko;
  5. public $file;
  6.  
  7. public function add(){
  8. $query = mysql_query("INSERT INTO `test1` (`id`,`imie`, `nazwisko`, `plik`) VALUES (NULL,'$this->imie', '$this->nazwisko', '$this->file')") ;}
  9.  
  10. public function edit( $id){
  11. $query = mysql_query("UPDATE `test1` SET `imie` = '$this->imie', `nazwisko` = '$this->nazwisko', `plik` = '$this->file' WHERE `id` = '$id'") ;}
  12.  
  13. public function get( $id){
  14. return $query = mysql_query("SELECT * FROM `test1` WHERE `id` = '$id'"); }
  15.  
  16. public function load_all(){
  17. return $query = mysql_query("SELECT * FROM `test1` ORDER BY `nazwisko`") ; }
  18. }?>

W trzecim najważniejszym pliku wszystko się wykonuje:
  1. if ($_SESSION['upr_test']=='1'){
  2. require_once('../class/class.SQL.php');
  3. require_once('../class/class.User.php');
  4. require_once('../class/class.Testowy.php');
  5. $sql = new SQL;
  6. $sql->connection();
  7. $user = new User;
  8. $test = new Testowy;
  9.  
  10. if( $user->checkSession() == false){
  11. header('Location: ../login.php'); }
  12.  
  13. if( isset( $_POST['add'])){
  14. if( !empty( $_POST['imie']) && !empty( $_POST['nazwisko']) && is_uploaded_file( $_FILES['file']['tmp_name'])){
  15.  
  16. $test->imie = mysql_real_escape_string( $_POST['imie']);
  17. $test->nazwisko = mysql_real_escape_string( $_POST['nazwisko']);
  18.  
  19. if( $_FILES['file']['type'] == 'application/pdf' or $_FILES['file']['type'] == 'application/msword' or $_FILES['file']['type'] == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or $_FILES['file']['type'] == 'application/vnd.ms-excel' or $_FILES['file']['type'] == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
  20.  
  21. $file_name = explode( '.', $_FILES['file']['name']);
  22. $roz = end( $file_name);
  23. $file_name = strtotime('now').'.'.$roz;
  24. move_uploaded_file( $_FILES['file']['tmp_name'], '../files/'.$file_name.'');
  25. $test->file = $file_name;
  26. }
  27. $test->add();
  28. }}
  29. elseif( isset( $_POST['edit'])){
  30. if( !empty( $_POST['imie']) && !empty( $_POST['nazwisko']) && is_uploaded_file( $_FILES['file']['tmp_name'])){
  31.  
  32. $test->imie = mysql_real_escape_string( $_POST['imie']);
  33. $test->nazwisko = mysql_real_escape_string( $_POST['nazwisko']);
  34.  
  35. if( $_FILES['file']['type'] == 'application/pdf' or $_FILES['file']['type'] == 'application/msword' or $_FILES['file']['type'] == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or $_FILES['file']['type'] == 'application/vnd.ms-excel' or $_FILES['file']['type'] == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
  36.  
  37. $file_name = explode( '.', $_FILES['file']['name']);
  38. $roz = end( $file_name);
  39. $file_name = strtotime('now').'.'.$roz;
  40. move_uploaded_file( $_FILES['file']['tmp_name'], '../files/'.$file_name.'');
  41. $test->file = $file_name;
  42. }
  43.  
  44. $id = mysql_real_escape_string( $_GET['id']);
  45. $test->edit( $id);
  46. }}
  47.  
  48. $title = 'Zarządzaj';
  49.  
  50. require_once('../themes/header.php');
  51. require_once('../admin/menu_slownik.php');
  52. require_once('../themes/admin/testowy.php');
  53. }

Dodawanie danych wraz w nową nazwą pliku do bazy, a także umieszczeniem pliku np. doc w odpowiednim folderze na serwerze działa dobrze.
Problem pojawia się w sytuacji edycji. Oczywiście problem dotyczy pliku.
Zrobiłem wszystko analogicznie jak w przypadku dodawania, ale efektu nie ma.
Chciałbym by nazwa pliku w bazie podmieniła się na nową nazwę pliku z edycji i by nowy plik dodał się do folderu na serwerze. Stary plik na serwerze zostaje.
Jak to można zrobić, skoro robiąc identycznie jak przy dodawaniu, w edycji to nie działa?
olszam
Zdebuguj zapytanie dla edit i sprawdź czy wszytko jest, oraz sprawdź bazę czy one mają id jakiekolwiek. Dla dodawania ja bym wywalił id bo i tak auto_increment dodaje je z automatu.
dopal
Kilka godzin kombinowania...a to zwykły czeski błąd smile.gif
Przy dodawaniu jest :
  1. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">


Przy edycji:
  1. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" >


Wiadomo czego brakowało:)
Teraz działa bez problemu. Może komuś się przyda.
Temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.