Probléma: Tömbös adat- és fájlfeltöltés
Ü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:
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:A segítségeteket előre is köszönöm...
■ 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]
-----+--------
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>
<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>
Elírás?
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.
Javítanám magamat...
[RESET]