ugrás a tartalomhoz

Probléma: Tömbös adat- és fájlfeltöltés

Pi-Tec · 2008. Május. 5. (H), 11.03
Üdvözlet mindenkinek! Bevallom, szakképzett n00b vagyok PHP témában, azaz vannak ismereteim belőle, de semmilyen kritikusabb dolgot nem kellett még lekódolnom benne. Ez most megváltozott.

Egy kényelmes és felhasználóbarát interfész-kódot gyúrogatok egy alapjában véve egyszerű admin-felületre: a lényege, hogy egy (bináris) szöveges (azaz nem MySQL) adatlistából kiszed dinamikusan neveket, ezeket fordított(!) sorrendben kilistázza táblázatban, párosítva a megfelelő mappából a megfelelő sorszámú képpel. A végére, új rekord-felvitel lehetőségként odakerül egy mező, ami a lista UTOLSÓ UTÁNI, új elemére kell mutasson. Az egész kapásból editelhető mint text-ek és file upload-ok. (hogy mennyit bírna ezekből a szerver, arról fingom nincs, de azt már le tudnám kezelni utólagos foltozgatással is) A form önmagának postolja az adatokat, és updatelve ki is írja azokat.

Látványosabban:
TEXT | FILE_UP
-----+--------
név5 | [5.jpg]
név4 | [4.jpg]
név3 | [3.jpg]
név2 | [2.jpg]
név1 | [1.jpg]
név0 | [0.jpg]
-----+--------
név6 | [6.jpg]

Tehát:
Bal oldalon text-boxok kitöltve a létező lista alapján (ha van), jobbra meg képek, mellettük üres upload-mezők. (Részletek a doboz hátoldalán olvashatók.)



A LISTA:

A lista bináris szövegfájl, soronként egyetlen adattal. Hozzáférés a szerveren engedélyezve.



A KÉPTÁR:

A képeket /logo/$i.jpg néven kéne feltöltse a rendszer. A mappába még az ukrán elnök is beleratyizhat, szóval azzal nem lehet gond. /tmp/ mappa szintén létezik, szintén engedélyezett. (Egyébként ezek az útvonalak a .php fájlhoz vagy a domainhez vonatkoztatva relatívak?)



A HIBA:

Már betettem egy rekordot manuálisan az adatfájlba, de nem hajlandó azt se beolvasni, ellenben az üres mező és üres képkeret ugyanúgy megjelenik, mert a "W" az adatok updatelésekor kitisztítja a fájlt, ugye. Csak valamiért nem visz be semmit, és a képet se tölti fel...



A KÓD:

<html>
  <body><form enctype="multipart/form-data" action='a_ujmarka.php' method='post'>
    <?php
      //EZ ITT A $_POST és $_FILES DEBUG INFÓJA
      print_r($_POST);
      print_r($_FILES);
    ?>
    <table width='600' border='2'>
      <tr>
        <td colspan='2'>
          <a href='a_szerk.php' method='post'><img width='64' height='64' title='Karbantartás' alt='Karbantartás' border='0' src='lista.jpg' /></a>
          <a href='a_ujtermek.php' method='post'><img width='64' height='64' title='Új termék' alt='Új termék' border='0' src='taska.jpg' /></a>
          <a href='a_ujcsalad.php' method='post'><img width='64' height='64' title='Új család' alt='Új család' border='0' src='csalad.jpg' /></a>
          <a href='a_ujtipus.php' method='post'><img width='64' height='64' title='Új kategória' alt='Új kategória' border='0' src='tervrajz.jpg' /></a>
          <a href='a_ujmarka.php' method='post'><img width='64' height='64' title='Új márka' alt='Új márka' border='0' src='marka.jpg' /></a>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          <a href='a_letolt.php' method='post'><img width='64' height='64' title='Feketedoboz mentése' alt='Feketedoboz mentése' border='0' src='dobozle.jpg' /></a>
          <a href='a_feltolt.php' method='post'><img width='64' height='64' title='Feketedoboz betöltése' alt='Feketedoboz betöltése' border='0' src='dobozfel.jpg' /></a>
        </td>
      </tr>
      <tr>
        <td colspan='2'>
          <h2>Új márka</h2>
          <p>Itt új márkát vihetsz fel, vagy írhatod át a már meglévőket. A feltett képek csak .jpg formátumúak lehetnek.</p>
            <font color='red'><b>
              <?php
                //VIZSGÁLJA A JELSZÓT
                if(isset($_POST["pwd"]) && $_POST["pwd"]!="teszt"){
                  //HIBÁS
                  echo "A jelszó hibás!";
                } else if (isset($_POST["pwd"])){
                  //HELYES, HA VAN ÚJ:
                  if (isset($_POST["t"])) {
                    // FELÜLÍRJA AZ ADATBÁZIST
                    if($fh=##kukac##fopen("marka.ab","w")){
                      fwrite($fh,$_POST["t"][0]);
                      for($i=1;$i<count($_POST["t"]);$i++){
                        $str="\n".$_POST["t"][$i];
                        fwrite($fh,$str);
                        echo "x";
                      }
                      fclose($fh);
                      echo "Adatbázis módosítva.";
                    } else {
                      //NEM ÍRHATÓ
                      echo "Az adatbázis nem hozzáférhető.";
                    }
                  }
                  //KÉPEK FELTÖLTÉSE
                  if(isset($_FILES["f"])){
                    for($i=0;$i<count($_FILES["f"]);$i++){
                      if(isset($_FILES["f"]["name"][$i])){
                        $str=$_FILES["f"]["name"][$i];
                        if($_FILES["f"]["type"][$i]=='image/jpeg'){
                          $userftype = ".jpg";
                        } else if($_FILES["f"]["type"][$i]=='image/pjpeg'){
	                        $userftype = ".jpg";
                        } else if($_FILES["f"]["type"][$i]=='image/JPG'){
                          $userftype = ".jpg";
                        } else {
                          $userftype = "FAIL";
                        }
                        if($userftype != "FAIL"){
                          $uploaddir = "/logo/";
                          $uploadfile = $uploaddir . basename($i . $userftype);
                          if (move_uploaded_file($_FILES["f"]["tmp_name"][$i], $uploadfile)) {
                            echo "A kép ($str) feltöltése sikeres.";
                          } else {
                            echo "A kép ($str) feltöltése sikertelen!";
                          }
                        } else {
                          echo "A kép ($str) rossz formátumú, nem került feltöltésre!";
                        } 
                      } //ha nincs fájlnév, csendben átugorja
                    }
                  };
                }
                unset($_POST);
                unset($_FILES);
              ?>
            </b></font>
        </td>
      </tr>
      <tr>
        <td>
          <b>Márkanév</b>
        </td>
        <td>
          <b>Logó</b>
        </td>
      </tr>
            <?php
              if($fh=##kukac##fopen("marka.ab","r")){
                $arr=array();
                while(!feof($fh)){
                  $arr[]=fgets($fh,4096);
                }
                for($i=count($arr);$i>0;$i--){
                  echo " <tr> <td> <input type='text' name='t[$i]' value='$arr[$i]' /> $arr[$i] </td> <td>";
                  echo "<img src='/logo/$i.jpg' /><input type='file' name='f[$i]' />' </td> </tr>";
                }
                fclose($fh);
              } else {
                echo " <tr> <td> Az adatbázis nem olvasható. Nem létezik, vagy le van tiltva az elérés. </td> </tr>";
              };
            ?>
      <tr>
        <td>
            Új márka: <?php
              echo "<input type='text' name='";
              if(isset($arr)){
                $i=count($arr);
                echo "t[$i]";
              } else {
                echo "f[0]";
              }
              echo "' />";
            ?>
        </td>
        <td>
            Logó: <?php
              echo "<input type='file' name='";
              if(isset($arr)){
                $i=count($arr);
                echo "f[$i]";
              } else {
                echo "f[0]";
              }
              echo "' />";
            ?>
        </td>
      </tr>
      <tr>
        <td colspan='2'>
            Jelszó: <input type='password' name='pwd' /><input type='submit' value='Mehet!' />
        </td>
      </tr>
    </table></form>
  </body>
</html>
A segítségeteket előre is köszönöm...
 
1

Elírás?

sayusi · 2008. Május. 6. (K), 08.24
if($fh=##kukac##fopen("marka.ab","w"))
A fenti részletet elírtad?
Mert első ránézésre egy ifen belüli változó deklarálásnak tűnik, nem pedig egy vizsgálatnak.
Hiányzik egy egyenlőségjel.

Illetve egy javaslat: próbáld meg szétválasztani a html -t és a php-t mert a fenti kóddal bevezeted magad az örök szopás dicső birodalmába.
2

Javítanám magamat...

sayusi · 2008. Május. 6. (K), 10.10
Javítanám magamat... Megnéztem és értem, hogy mit akarsz, de elsőre alaposan bekavarodtam :)
3

[RESET]

Pi-Tec · 2008. Május. 7. (Sze), 08.57
Nah, kaptam egy baráti levelet, hogy ekkora kódot berakni értelmetlen. Most már én is belátom. Szóval... nyitok egy újabb, lényegre törőbb topicot. ;)