Képfeltöltés IE vs Firefox
Sziasztok!
Az alábbi kódot használom jelenleg képfeltöltésre, de ezzel két problémám van.
Ha valaki az űrlap minden adatát kitölti csak képet nem tölt fel, akkor nem küldi el az űrlapot az adatbázisnak.
A másik pedig, hogy csak IE tudok vele képet feltölteni. Más böngészőben nem.
Várom segítségeteket.
<?
// a kép feltöltése, és a termék felvétele
//========================================
elseif ($mit=="feltoltes") {
$hiba = 0;
if (is_uploaded_file($imgfile)) {
if ($imgfile_type=="image/pjpeg") {
$newfile = "../img/" . $imgfile_name;
if (copy($imgfile, $newfile)) {
$sql = "INSERT INTO proba2 (nev, foto, leiras) VALUES ('$nev', '$imgfile_name', '$leiras')";
mysql_query($sql);
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
?>
■ Az alábbi kódot használom jelenleg képfeltöltésre, de ezzel két problémám van.
Ha valaki az űrlap minden adatát kitölti csak képet nem tölt fel, akkor nem küldi el az űrlapot az adatbázisnak.
A másik pedig, hogy csak IE tudok vele képet feltölteni. Más böngészőben nem.
Várom segítségeteket.
<?
// a kép feltöltése, és a termék felvétele
//========================================
elseif ($mit=="feltoltes") {
$hiba = 0;
if (is_uploaded_file($imgfile)) {
if ($imgfile_type=="image/pjpeg") {
$newfile = "../img/" . $imgfile_name;
if (copy($imgfile, $newfile)) {
$sql = "INSERT INTO proba2 (nev, foto, leiras) VALUES ('$nev', '$imgfile_name', '$leiras')";
mysql_query($sql);
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
?>
Korábbi témák
http://www.google.com/search?sitesearch=weblabor.hu&q=weblabor.hu/forumok+kép+feltöltés
Addig is ajánlom a file feltöltés ide vonatkozó leírásának olvasgatását.
A teljes kód
Aki tud légyszíves segítsen.
Köszönöm
ob_start();
include("../dbconn.php");
include("../fuggvenyek.php");
header("Pragma: no-cache");
Header("Cache-control: private, no-store, no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
if (!isset($kat1)) {
$kat1=0;
}
if (!isset($kat2)) {
$kat2=0;
}
if (!isset($kat3)) {
$kat3=0;
}
if (!isset($szint)) {
$szint=0;
}
if ($szint==1) {
$kat2=0;
$kat3=0;
}
if ($szint==2) {
$kat3=0;
}
if (!isset($mit)) {
$mit="kategoria";
}
// 1. lépés: a kategória kiválasztása
//===================================
if ($mit=="kategoria") {
?>
<html>
<head>
<META NAME="cache-control" CONTENT="private, no-store, no-cache, must-revalidate">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Felvétel</title>
</head>
<body style="font-family:tahoma">
<font style="font-size:12pt;color:#990033"><b>Új felvétel - a kategória kiválasztása</b></font>
<br><br>
<form name="urlap" action="proba_felvetel.php" method="POST">
<input type="hidden" name="mit" value="kategoria">
<input type="hidden" name="szint" value="0">
<b>1.szint:</b>
<select name="kat1" size="1" onChange="document.urlap.szint.value=1; document.urlap.submit()">
<option value="0" <? if ($kat1==0) {print "selected";} ?>>válaszd ki a fő kategóriát</option>
<?
$kategoria = "";
$sql = "SELECT * FROM kategoriak WHERE szulo1=0 ORDER BY id";
$eredmeny = mysql_query($sql);
while ($sor = mysql_fetch_array($eredmeny)) {
$id = $sor["id"];
$nev = $sor["nev"];
?>
<option value="<?= $id?>" <? if ($kat1==$id) {print "selected"; $kategoria=$nev;} ?>><?= $nev?></option>
<?
}
?>
</select>
<br>
<?
if ($kat1>0) {
$sql = "SELECT * FROM kategoriak WHERE szulo1=$kat1 AND szulo2=0 ORDER BY id";
$eredmeny = mysql_query($sql);
if (mysql_num_rows($eredmeny)>0) {
?>
<b>2.szint:</b>
<select name="kat2" size="1" onChange="document.urlap.szint.value=2; document.urlap.submit()">
<option value="0" <? if ($kat2==0) {print "selected";} ?>>válassz kategóriát</option>
<?
while ($sor = mysql_fetch_array($eredmeny)) {
$id = $sor["id"];
$nev = $sor["nev"];
?>
<option value="<?= $id?>" <? if ($kat2==$id) {print "selected"; $kategoria.=" - ".$nev;} ?>><?= $nev?></option>
<?
}
?>
</select>
<?
}
}
?>
<br>
<?
if ($kat2>0) {
$sql = "SELECT * FROM kategoriak WHERE szulo1=$kat1 AND szulo2=$kat2 ORDER BY id";
$eredmeny = mysql_query($sql);
if (mysql_num_rows($eredmeny)>0) {
?>
<b>3.szint:</b>
<select name="kat3" size="1" onChange="document.urlap.submit()">
<option value="0" <? if ($kat3==0) {print "selected";} ?>>válassz kategóriát</option>
<?
while ($sor = mysql_fetch_array($eredmeny)) {
$id = $sor["id"];
$nev = $sor["nev"];
?>
<option value="<?= $id?>" <? if ($kat3==$id) {print "selected"; $kategoria.=" - ".$nev;} ?>><?= $nev?></option>
<?
}
?>
</select>
<?
}
}
?>
<br><br>
<input type="hidden" name="kategoria" value="<?= $kategoria?>">
<input type="button" value="a termék adatai -->" onClick="document.urlap.mit.value='adatok';document.urlap.submit()">
</form>
</body>
</html>
<?
}
// 2. lépés: a termék adatai
//==========================
elseif ($mit=="adatok") {
if (!isset($nev)) {
$nev="";
}
if (!isset($nev2)) {
$nev2="";
}
if (!isset($rovidnev)) {
$rovidnev="";
}
if (!isset($ar_huf)) {
$ar_huf="0";
}
if (!isset($raktaron)) {
$raktaron="0";
}
if (!isset($egyseg)) {
$egyseg="darab";
}
if (!isset($leiras)) {
$leiras="";
}
if (!isset($hosszu_leiras)) {
$hosszu_leiras="";
}
?>
<html>
<head>
<META NAME="cache-control" CONTENT="private, no-store, no-cache, must-revalidate">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Felvétel</title>
</head>
<body style="font-family:tahoma;font-size:10pt">
<font style="font-size:12pt;color:#990033"><b>Új felvétel</b></font>
<br><br>
<form name="urlap" action="proba_felvetel.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="512000">
<input type="hidden" name="mit" value="feltoltes">
<input type="hidden" name="kat1" value="<?= $kat1?>">
<input type="hidden" name="kat2" value="<?= $kat2?>">
<input type="hidden" name="kat3" value="<?= $kat3?>">
<input type="hidden" name="kategoria" value="<?= $kategoria?>">
<table cellpadding="5" style="font-family:tahoma;font-size:10pt">
<tr>
<td align="right">Kategória:</td>
<td><?= $kategoria?></td>
</tr>
<tr>
<td align="right"><b>Név:</b></td>
<td><input name="nev" style="width:200px" value="<?= $nev?>"></td>
</tr>
<tr>
<td align="right"><b>Fotó:</b></td>
<td><input type="file" name="imgfile" style="width:350px"></td>
</tr>
<tr>
<td align="right" valign="top"><b>Rövid leírás:</b></td>
<td><textarea name="leiras" style="width:300px" rows="3"><?= $leiras?></textarea></td>
</tr>
</table>
<br><br>
<input type="button" value="feltöltés -->" onClick="document.urlap.submit()">
</form>
</body>
</html>
<?
}
// a kép feltöltése, és az űrlap felvétele
//========================================
elseif ($mit=="feltoltes") {
$hiba = 0;
if (is_uploaded_file($imgfile)) {
if ($imgfile_type=="image/pjpeg") {
$newfile = "../img/" . $imgfile_name;
if (copy($imgfile, $newfile)) {
$sql = "INSERT INTO proba1 (nev, foto, leiras) VALUES ('$nev', '$imgfile_name', '$leiras')";
mysql_query($sql);
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
?>
<html>
<head>
<META NAME="cache-control" CONTENT="private, no-store, no-cache, must-revalidate">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Felvétel</title>
</head>
<body style="font-family:tahoma;font-size:10pt">
<?
if ($hiba==0) {
?>
<font style="font-size:12pt;color:#006666"><b>Sikeres felvétel!</b></font>
<?
}
else {
?>
<font style="font-size:12pt;color:#CC0033"><b>A kép feltöltése nem sikerült!</b></font>
<br><br>
<?
}
?>
</body>
</html>
<?
}
mysql_close($kapcsolat);
ob_end_flush();
?>
Nem sikerült elolvasni?
változók
A $imgfile_type és $imgfile_name ott keletkezik.
Még egy hibát vettem észre. Másik képet ugyan azzal a névvel már nem tudok feltölteni és az új bejegyzésnél egy régebben feltöltött kép jelenik meg. Ezért jó lenne, ha minden új feltöltött kép előtt még egy egyedi azonosító is lenne.
register_globals OFF
ha tudnám
Átolvastam a Fájlfeltöltés kezelése oldalt, de nem lettem sokkal okosabb, hogy én mit hogy változtassak meg a kódban ahhoz hogy jó legyen...
$_FILES tömb
Lehet hogy ha meglátjátok, majd a hajatokat tépitek, mert nem tudom mennyire szabályos.
Nekem így most működik úgy, mint az előző kód is. A hibák viszont ugyan úgy megvannak és ugyan azok.
- Csak IE tudok feltölteni
- kötelező képet csatolni
- azonos nevű új kép felülírja a régi azonos nevű képet a tárhelyen
<input type="hidden" name="MAX_FILE_SIZE" value="512000">
<input type="hidden" name="mit" value="feltoltes">
<input type="hidden" name="kat1" value="<?= $kat1?>">
<input type="hidden" name="kat2" value="<?= $kat2?>">
<input type="hidden" name="kat3" value="<?= $kat3?>">
<input type="hidden" name="kategoria" value="<?= $kategoria?>">
<table cellpadding="5" style="font-family:tahoma;font-size:10pt">
<tr>
<td align="right">Kategória:</td>
<td><?= $kategoria?></td>
</tr>
<tr>
<td align="right"><b>Név:</b></td>
<td><input name="nev" style="width:200px" value="<?= $nev?>"></td>
</tr>
<tr>
<td align="right"><b>Fotó:</b></td>
<td><input type="file" name="userfile" style="width:350px"></td>
</tr>
<tr>
<td align="right" valign="top"><b>Leírás:</b></td>
<td><textarea name="leiras" style="width:300px" rows="3"><?= $leiras?></textarea></td>
</tr>
<input type="button" value="az új termék feltöltése -->" onClick="document.urlap.submit()">
</form>
// a kép feltöltése, és a termék felvétele
//========================================
elseif ($mit=="feltoltes") {
$hiba = 0;
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
if ($_FILES['userfile']['type']=="image/pjpeg") {
$newfile = "../img/" . $userfile_name;
if (copy($userfile, $newfile)) {
$sql = "INSERT INTO proba1 (nev, foto, leiras) VALUES ('$nev', '$userfile_name', '$leiras')";
mysql_query($sql);
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
}
else {
$hiba = 1;
}
Gondolat
Az, hogy a képfájlt felülírja a rutinod, azon nincs semmi csodálkozni való, ugyan is az nem tartalmaz kritériumokat azzal kapcsolatban, hogy csak akkor másolhatja oda, ha nem létezik olyan nevű.
Ha azt akarod, hogy nevezze át, akkor írd hozzá a rutinhoz:
- A másolás előtt gyözödj meg a fájl meglétéről (file_exist())
- ha van, automatikusan prefixeld a kép nevét,
és mindjárt nincs felülírás
Ha egyszer a form beküldésekor nem hajtatsz végre semmilyen eseményt, akkor javaslom a submit típusú button használatát, így semmi értelme az onsubmit eseménynek.
Az, hogy nem rögzít rekordot az adatbázisban, ha nincs megadva kép... hát kérlek az a feltételed:
"Ha sikerül a feltöltött képet új néven másik könyvtárba másolni, akkor írd be az adatokat."
Ez elég egyértelmű.
Szerintem:
Nem teljesen érted, hogy mi is történik, ezért én a helyedben szétbontanám három fő egységre a problémát:
1. Kitapasztalnám (megtanulnám), hogyan kell htm formot php-nek elküldeni böngésző függetlenül, majd a php-ben hol találom meg a felküldött adatokat.
2. Egyszerű képfeltöltés és meglévő név figyelése egymezős form-ról.
3. Adatbázis művelet.
Egy kis olvasmány:
http://php.about.com/od/phpwithmysql/ss/Upload_file_sql.htm
http://www.blazonry.com/scripting/upload-size.php
Jó munkát:
s_volenszki
$_FILES['userfile']['type']=="image/pjpeg"
???
$_FILES['userfile']['type']=="image/pjpeg
helyett?
File elemzés
Ilyeneket találtam...
Kiterjesztés:
Remélem segít!
Ő másra gondolt.
Proclub egészen másra gondolt! Konkrétan arra, hogy az az ellenőrzés amit te teszel, az egy fajta külső jegyek ellenőrzése. Erre írták már feljebb, hogy viszonylag alacsony a bizalmi szint ezekkel az adatokkal, ugyanis könnyen hamisíthatóak (próbálj meg egy php fájlt átnevezni .jpg-re és a képfeltöltőddel feltölteni! Ha vannak felhasználóid és isten őrizz még fájlműveleteket is végezhetnek a saját feltöltött fájljaikkal...).
A másik ellenőrzési lehetőség az, hogy kiovasod a fájl tartalmat, konkrétan képként bánsz vele. Ha erre nincs hibaüzi, akkor tuti kép, és minden adata meglesz.
Kiterjesztés
Köszi