- D1Rect: Nagy "hülyétkapokazapróktól" topik
- hdanesz: Hyundai Ioniq 28kWh - Első benyomások - második felvonás
- btz: Internet fejlesztés országosan!
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- koxx: Bloons TD5 - Tower Defense játék
- sziku69: Szólánc.
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- sto1911: Pinball FX3 PH! verseny
Új hozzászólás Aktív témák
-
cucka
addikt
Na lássuk.
Ha elolvasod a hibaüzenetet, akkor kiderül, hogyoutput started at /mnt/storage/www/virtual/.../index.php:8
Itt írtál ki először valamit a script kimenetére, ekkor a php létrehozta a http header-t. (Korábban ezt már leírtam)
in /mnt/storage/www/virtual/.../mail.php on line 3
Itt próbálod meghívni a session_start()-ot. Ez az előző kódsor után fut le.
Ennél jobban nem tudom elmagyarázni, bocs.
-
DviDee
csendes tag
válasz
PazsitZ #3088 üzenetére
Nálad tök jó, de nálam ezt írja:
Warning: Cannot modify header information - headers already sent by (output started at /mnt/storage/www/virtual/.../index.php:8) in /mnt/storage/www/virtual/l.../mail.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/storage/www/virtual/.../index.php:8) in /mnt/storage/www/virtual/.../mail.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/storage/www/virtual/.../index.php:8) in /mnt/storage/www/virtual/.../mail.php on line 3 -
biker
nagyúr
eddig eljutottam én is, hogy kb így kell, de....
- a betűméretek max 5-6 lépésben lehet (van értelme), ergo azt, hogy melyik címke hányszor fordult elő, azt max 5 sávra fel kellene bontani, és úgy megmondani, az adott szó hányszor fordult elő.
vagyis akkor is jól kell működjön, ha csak 20 cimkét talált, és max 4 az előfordulás, meg akkor is, ha 150 cimkét talált, és 30 a max, 3 a min
-
ArchElf
addikt
Ugye...
1) mentettél is
2a) nem inline a php kódod, hanem <?php val kezdődik a fájl, és az első sor a session_start();
2b) ha inline de mégsem az első, ugye az include-olt fájlok is BOM nélkül vannak mentve, és nem inline-osak, és nincs bennük egy szem kimenetre írás sem.AE
-
cucka
addikt
Ez egy teljesen jó kreatív feladat, kis gondolkozással te is meg tudod oldani
Én így csinálnám: a cimkék előfordulása legyen m és n között, a lehetséges betűméretek pedig a és b között. Az [m..n] intervallumot kell áttranszformálni a [a..b] intervallumra, mondjuk lineárisan, hogy egyszerűbb legyen.
Ha nem jutsz előre, segítek, de amúgy ez tök jó feladat, simán menni fog szerintem
-
biker
nagyúr
üdv
"címkefelhőt" szeretnék csinálni, de nem tudom a legjobb megoldást.
Lényeg az lenne, hogy az adott bejegyzésekhez tartoznak címkék, amit be tudna olvasni a táblából. és azt kellene megoldani, hogy ami többször szerepel, azt annyival nagyobbra tenni, amennyiszer szerepel.
DE
oldalanként változó, hogy 10 vagy 50 cimke van, és egy előfordulás 3x vagy 20x ismétlődik.
szóval egyszerű "ahányszor van, annyiszor nagyobb" az nem jó, mert 20x nagyobb ne legyen, de ha a két leggyakoribb 2x ill 4x fordul elő, akkor is emelje ki rendesen őket.Van valakinek tippje? mindent megszámolni és valahogy százalékolni?
-
akopacsi
csendes tag
Sziasztok, Szeretnék egy kis segítséget kérni. Egy űrlapot készítek, ahol egy termék szabadon beírható neve mellett szeretém megadni a kategóriát is, amit egy legördülő listáról kellene kiválasztani. A választható lehetőségeket szeretném egy kategoriak nevű táblából feltölteni. Hogyan lehet ezt megoldani?
Előre is nagyon köszönöm, ha valaki segít!
Eddig eljutottam:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><form action="termek_hozzaadasa.php" method="post">
<p>Termék név:<br>
<input type=text name="termek_nev" size="75"><br>
Kategória:<br>
<select name="termek_kategoria">
<option value=""></option>
<option value=""></option>
</select>
<input type=submit name="submit" value="Hozzáadás">
</p>
</form></body>
</html> -
DviDee
csendes tag
Ha esetleg tudnátok a megoldást megírnátok, vagy kipróbálnátok...nagyon megköszönném. Sajnos ismét csak este tudok géphez jönni, akkor visszanézek fórumra.
Köszönöm az eddigi segítségeiteket is! -
cucka
addikt
A hibaüzenet azt jelenti, hogy a session_start kiírtál valamit az output-ra. Ez lehet egy egyszerű print, vagy egy szóköz a <?php tag előtt, esetleg a szövegszerkesztőd a file elejére illeszti a BOM-ot, tehát azt kapcsold ki.
Ha valakit mélyebben érdekel: a php a http válasz fejlécét akkor hozza létre, amikor először kikerül valami a programod standard kimenetére. Bármilyen, a http fejléceket módosító függvényt csak ez előtt lehet meghívni. Ilyen például a header(), a session_start() vagy a setcookie() függvény is.
-
DviDee
csendes tag
válasz
Tele von Zsinór #3080 üzenetére
Sajna nem jó így sem... Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by
Meg frissíti az oldalt és úgy írja ki a hibát űrlap nélkül, ja és az eredménnyel megint gond van mert összeadom és nem jó. -
kymco
veterán
Át akartam állni a mysql-ben. php-ben, html-ben utf-8 kódolásra.
Az itt tanácsolt függvénnyel (iconv), kódhivatkozások átírásával (ez volt egy vagon a html k-től kzdve a php.ini-ig, a szerkesztett php-im átkódolása utf-8-ra stb, stb). Egy problémám maradt:
[link]
Természetesen a phpmyadmin-ra gondoltam. Ezen a felületen az ékezetes betűim 2 bytos kriksz-kraksz maradt. A weblapomon semmi probléma, gyönyörűen lekezelte és olvasható volt minden. De ez a fránya phpmyadmin nem.
Utánajártam a dolgoknak. Egy apró programsor maradt ki a programomból, aminek a beírása másodpercekben mérhető, a bosszúsága pedig napokban-hetekben.
Ez pedig az adatbázis megnyitása után kiadható: SET NAMES 'utf8'.
Ezután már a weblapom is kriksz-krakszokat jelenített megDe ez így volt jó.
Végül nem maradt más, ki kellett javítanom egy erre megírt rutinnal a hibás karakterkombinációkat, és minden tökéletes lett... én pedig bölcsebb... -
DviDee
csendes tag
válasz
Tele von Zsinór #3077 üzenetére
Nagyon szépen köszönöm (így utólag is a segítséged), de nálam most sem jó. Csak azt értem el vele, hogy nem az űrlapos részen írja ki a hibát, hanem amikor újratölt ott külön.
-
Tele von Zsinór
őstag
[...]
if ($_POST[op] != "ds") {
$a = rand(1,9);
$b = rand(1,9);
$_SESSION['c']=$a+$b;
echo "<form method=\"post\" action=\"$PHP_SELF\">
<p><strong>Your name:</strong><br>
<input type=\"text\" name=\"name\" size=30 value=\"$_POST['name']\"</p>
<p><strong>Your email:</strong><br>
<input type=\"text\" name=\"email\" value=\"$_POST['email']\"size=30</p>
<p>$a + $b = <br>
<input type=\"text\" name=\"szam\" value=\"$_POST['szam']\"size=30</p>
<p><strong>Comments:</strong><br>
<textarea name=\"comments\" cols=30 rows=5 wrap=virtual>$_POST['comments']</textarea></p>
<input type=\"hidden\" name=\"op\" value=\"ds\">
<p><input type=\"submit\" name=\"submit\" value=\"Mehet\"></p></font>
</form>";
} [...] -
D.R.O.
tag
Nah, olvasgattam egy kicsit, meg mással is foglalkoztam, aztán nekiálltam mégegyszer.
Tiszta lappal, headerben utf 8, iconv és nem fopennel, hanem fgets-el már működött.
Most dolgozom fel a stringetKössz a linkeket, meg a segítséget.
Lehet tegnap annyira akartam, hogy az akaratom elgörbítette a tér-idő dimenziókat, és ettől a böngésző kínai karaktereket vágott ki a képernyőre
-
DviDee
csendes tag
válasz
Tele von Zsinór #3073 üzenetére
Betettem, de nem jeleníti meg a számokat...szerintem így sem jó.
Így néz ki, most:
if ($_POST[op] != "ds") {
echo "$form_block";
$a = rand(1,9);
$b = rand(1,9);
$_SESSION[c]=$a+$b;
} -
Tele von Zsinór
őstag
válasz
Sk8erPeter #3068 üzenetére
Nem böngészőfüggő, a php kód a szerveren fut
Nálam ilyen egy próbafuttatás:tibia@sziget:~$ php --run 'echo iconv("utf-8", "us-ascii//TRANSLIT", "Gyémánt") . "\n";'
Gye'ma'nta fontos különbség: iso-8859-1 vs. us-ascii. Előbbi esetén nálam is furaság lesz a végeredmény
A preg_replace()-s sor, amit bemásoltál eltávolítja a nekem nem kellő karaktereket (url komponenst állítok elő), azaz mindent, ami nem szám vagy betű. Utána jön az iconv, majd megint egy preg_replace, hogy az iconv által berakott felesleget eltávolítsa. Emiatt elnézésed kérem, korábban azt mondtam, elég az iconv az ékezetek eltávolításához, de kell mögé az a preg_replace is.
-
tob!as
tag
Üdv!
Hát sajnos így nincs mit.
Még átfutottam a kérdéskört több szempontból, lehet hogy már talákoztál ezekkel az oldalakkal, de azért belinkelem, hátha valami hasznosat ki tudsz szűrni belőlük. Egyébként a te problémáddal nagyon nem találkozni, inkább az utf16-ra való visszakonvertálás a problémásabb.
http://www.moddular.org/log/utf16-to-utf8
http://hu.wikipedia.org/wiki/Byte-sorrendhttp://codingforums.com/showthread.php?t=157777
-
Pubszon
veterán
Hali.
Vki tudna egy xim.hu-n lévő scripthez hasonlót csinálni? Elég lenne egy egyszerű, ami kiírja az user ID-jét csak.
Ami ugye megmutatja hogy ki nézte meg az iwiw-emen az adatlapomat, de viszont nem változik az oldalon semmi, illetve nem is írja ki hogy én látom hogy vki megnézte.
-
DviDee
csendes tag
válasz
Tele von Zsinór #3063 üzenetére
Szerintem nem teljesen jól csinálom, tudnál még segíteni?
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3062 üzenetére
Hali!
Ezt most kipróbáltam, de ez az á, é, stb. ékezetes karaktereket pl. csak simán eltávolítja.
Gondolom ez a// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);sor miatt van, mintha rosszul dolgozná fel a beolvasott karaktereket.
Ráadásul ez a könyvtárral együtt lévő hivatkozás esetén a '/' (perjel) karaktert is lecseréli '-' (kötőjel) karakterre, az meg nem jó, igaz, ez mondjuk megoldható, úgy, hogy nem a könyvtár nevével együtt teszem be a szöveget, hanem csak simán, a fájl nevére hivatkozva, tehát ez még annyira nem is lenne érdekes (de ettől függetlenül nem jó, hogy így van).Érdekes az is, hogy ha úgy csinálom, ahogy itt van: iconv
echo 'Original : ', $text, PHP_EOL;
echo '<br />';
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;akkor meg az ékezetes karakterekből ilyen karaktert csinál, kimenet:
Original : upload/Gyémánt.gif
TRANSLIT : upload/Gy�m�nt.gifSzerk.: ezek szerint itt nem látszik, de amit kiír, az ilyen négyzet alakú ikon.
Legalábbis ez az, amit kiír, de valójában ez lesz belőle a tényleges fájlnév, amit feltölt:GyĂ©mánt.gif
Ez így nem túl jó. Ezért is gondoltam arra a tömbös megoldásra.
Ez böngészőfüggő probléma lehet? Operából próbálom, ha ez érdekes. Ja, és természetesen UTF-8 kódolású maga a php-fájl, ha ez fontos.
Mi lehet a probléma? Alternatíva? -
tob!as
tag
$handle = @fopen("utf16_fajl", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$buffer = iconv('UTF-16','UTF-8',$buffer);
echo $buffer;
}
fclose($handle);
}Így próbáltad ki az iconv() függvényt? Mert elméletileg ennek mennie kellene. Karakterkódolgatásoknál mindenképpen az iconv() függvény valamilyen formában való használata a nyerő szerintem.
-
D.R.O.
tag
Először is köszönöm a tippet. Kipróbáltam már az iconv()-t de nem ment. Megjelent minden tartalom, meg minden, de minden betű közé tett egy fekete kérdőjelet.
A főbb kérdés az lenne nálam, hogy magát az utf16-os fájlt nem lehet, mondjuk megnyitom fopen-nel, és annak az fgets tartalmát kellene feldolgozni. De nem lehet mert amit beviszek a feldolgozo.php fáljba karaktert, az nem utf16-os kódolás, hanem mondjuk utf8. Ha létrehozok egy utf16-os fáljt, benne a kóddal, akkor nem tudja értelmezni a böngésző. Egy nagy fehérség, még egy szimpla echot sem ír ki. Legalábbis nálam. Na ez itt a gond.
-
D.R.O.
tag
Hali mindenkinek.
Lenne egy olyan problémám, hogy fájlból akarok kiolvasni adatokat és feldolgozni. A probléma az, hogy a fájl utf-16-os kódolású, és egyszerűen nem lehet feldolgozni semmivel. Egyáltalán a php kezeli az utf-16-os cuccokat?
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #3061 üzenetére
Miért olvas ki a fájlból esetlegesen rossz információt?
Nem arról van szó, hogy a böngésző szúrja el, bár erre is láttam már példát; sokkal valószínűbb az, hogy egy rosszindulató látogató hamisít bele. Ha csak a mime alapján ellenőriznél, akkor mondjuk fel tudna tölteni egy .php filet, ha azt mondja, image/jpeg. Innen általában egyszerű kisakkozni, hova lett mentve és voilá: saját php kódját futtatja a te szervereden.
Az ékezetes, egyéb karakterekre valami ilyesmit ajánlok:
static public function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
}Ha van iconv modulod, ez a legjobb megoldás: utf8-ból alakít sima ascii-vá úgy, hogy transliterál (van erre magyar kifejezés?
), azaz az á-ból a-t csinál, de a ä-ból is, ë -> e, ç -> c, satöbbi.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #3058 üzenetére
lezso6, cucka, Tele von Zsinór: nagyon köszönöm mindannyiotok hozzászólását, sokat segítettetek!
Végül is maradtam a Tele von Zsinór által ajánlott getimagesize () függvénynél, ez bizonyult a lehető legegyszerűbb megoldásnak, mivel a lehető legtöbb képtípust támogatja.
Ha esetleg több olyan képtípus is felmerül, amit nem szeretnék, hogy feltöltsenek, akkor a lezso6 által ajánlott if (in_array(...) ) megoldást fogom választani, az is nagyon kézenfekvő.
cucka, abban pedig tökéletesen igazad van, hogy inkább azt engedjem, amit feltölthetnek, ne azt tiltsam, amiből többszáz típus van, először nem is tudom, ezt hogy gondoltam...
Ezt viszont már több helyen is olvastam, amit írtál, de nem értem az okát:
"Harmadrészt a mime típust a kliens küldi, tehát megbízhatatlan."
Miért olvas ki a fájlból esetlegesen rossz információt?___________________
Végül egyébként sikerült megoldani azt is, hogy ha létezik a fájl, akkor tegye mögé az alsóvonás utáni számot, attól függően, hogy hányszor létezik hasonló nevű fájl, tehát az volt a végső megoldás, hogy közvetlenül a move_uploaded_file függvény elé tettem egy ellenőrzést:
$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);
$fajlnev = $_FILES['uploaded']['name'];
// bla-bla... utána:
//Létezik már azonos nevű?
if (file_exists($target))
{
$file = $target;
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
$i = 1;
while(file_exists($file))
{
$i++;
$file = $name . '_' . $i . '.' .$path_parts['extension'];
}
echo 'A fájl neve korábban már szerepelt! Összerakott fájl neve: '.$file.'<br /><br />';
$target = $file; //hogy ne az eredeti elérési út maradjon, hanem az új névvel mentse el a fájlt a move_uploaded_file fv.-ben is
$fajlnev = substr($target, (strrpos($target, '/')+1));
// hogy utóbbi változók is az új célhelyre mutassanak a move_uploaded_file fv.-ben
}
//eddig tart az ellenőrzés;
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
// bla-bla...
}_________________________________
Itt (Google Cache által elmentve) pedig találtam egy tömböt, melyben a legtöbb, a böngésző vagy a szerver által kérdésesen támogatott vagy megjeleníthető ékezetes vagy egyéb karakter megtalálható - ez alapján szeretném kicserélni a feltöltendő fájl nevében szereplő esetleges hasonló karaktereket, na meg a szóközt!
Ilyesmi módon oldjam meg, ahogy itt látható, vagy a preg_replace() függvénnyel, vagy utóbbinak ehhez semmi köze? -
DviDee
csendes tag
Olyan problémám van, hogy van egy php fájlom és abban az alábbi tartalom:
<?
$a = rand(1,9);
$b = rand(1,9);
$_SESSION[c]=$a+$b;$form_block = "
<form method=\"post\" action=\"$PHP_SELF\">
<p><strong>Your name:</strong><br>
<input type=\"text\" name=\"name\" size=30 value=\"$_POST[name]\"</p>
<p><strong>Your email:</strong><br>
<input type=\"text\" name=\"email\" value=\"$_POST[email]\"size=30</p>
<p>$a + $b = <br>
<input type=\"text\" name=\"szam\" value=\"$_POST[szam]\"size=30</p>
<p><strong>Comments:</strong><br>
<textarea name=\"comments\" cols=30 rows=5 wrap=virtual>$_POST[comments]</textarea></p>
<input type=\"hidden\" name=\"op\" value=\"ds\">
<p><input type=\"submit\" name=\"submit\" value=\"Mehet\"></p></font>
</form>";if ($_POST[op] != "ds") {
echo "$form_block";} else if ($_POST[op] =="ds") {
if ($_POST[name] == "") {
$name_err = "<font color=blue>Please enter your name!</font><br>";
$send="no";
}
if ($_POST[email] == "") {
$email_err = "<font color=blue>Please enter your email!</font><br>";
$send="no";
}
if($_POST[szam] != "$_SESSION[c]") {
$szam_err = "<font color=blue>Please enter your szam!</font><br>";
$send="no";
}if ($_POST[comments] == "") {
$message_err = "<font color=blue>Please enter a comment!</font><br>";
$send="no";
}
if ($send !="no") {
$msg = "email sent from mywebsite.com\n";
$msg .="Name: $_POST[name]\n";
$msg .="Email: $_POST[email]\n";
$msg .="Comments: $_POST[comments]\n";
$to = "dvidee@gmail.com";
$subject = "Feedback Form";
$mailheaders = "From: My Website <dvidee@gmail.com>\n";
$mailheaders .= "Reply-To: $_POST[email]\n";
mail ($to, $subject, $msg, $mailheaders);
echo "<p>Elküldve sikeresen</p>";
} else if ($send == "no") {
echo "$name_err";
echo "$email_err";
echo "$message_err";
echo "$szam_err";
echo "$form_block";
}}
?>E-mailt küld a címemre ami működik is, de beépítettem egy apró biztonsági cuccot, hogy össze kell adni két számot. Az is működik, csak azt vettem észre, ha kiírja, hogy 2+3 akkor az 5 lenne, de nem fogadja el, hanem más az eredmény... Remélem értitek. Azt szeretném, hogy ne kelljen találomra beütni a számokat, hanem működön rendesen.
Ui: kezdő vagyok php-ben -
kymco
veterán
válasz
Tele von Zsinór #3057 üzenetére
Azt hiszem ez lesz... bár olyan jó volt, hogy belenyúlhattam az adatbázisba mindenféle fejlesztés nélkül, amikor kellett....
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #3052 üzenetére
Úgy emlékszem, képfeltöltésről van szó, legalábbis korábban esett itt szó az átméretezéséről.
Ahogy írták már, a böngésző által küldött mime megbízhatatlan. Ha azt akarod ellenőrizni, kép-e, használd a getimagesize() függvényt, képnél értelmes eredményt ad vissza, minden másnál hibát. -
kymco
veterán
válasz
Sk8erPeter #3053 üzenetére
Köszi!
Át fogom nézni... -
válasz
Sk8erPeter #3052 üzenetére
Ahogy cucka is mondta, több szempontból se jó a módszer.
De amúgy a többféle MIME ellenőrzéséhez az ilyesmi jó, és átlátható:
$valid = array(
'image/jpeg',
'image/pjpeg',
'image/gif',
'image/png',
);
if(in_array($tipus, $valid)) {
// yada-yada-yada
} else {
// error
} -
cucka
addikt
válasz
Sk8erPeter #3052 üzenetére
Rossz a feltételed.
Egyrészt amit írtál, az a megadott string-eken logikai vagy műveletet végez, majd megnézi, hogy az eredmény egyenlő-e a típus változóval. Próbáld inkább így.
if ($tipus == 'application/octet-stream' || $tipus=='application/zip' || $tipus=='application')
Másrészt létezik párszáz mime típus, amiből neked csak 3-4 típus a megfelelő, tehát inkább azt ellenőrizd, hogy beletartozik-e abba a 3-4 típusba, mint hogy azt, hogy beletartozik-e a maradék párszázba.
Harmadrészt a mime típust a kliens küldi, tehát megbízhatatlan. Javaslom, inkább a file kiterjesztése alapján ellenőrizz. Ha valaki rossz kiterjesztésű file-t tölt fel, akkor így járt.
-
Sk8erPeter
nagyúr
Hátha találsz itt megoldást, születtek karakterkódolási problémákról cikkek a Weblaboron is:
Karakterkódolási problémák kiküszöbölése
A MySQL nem ért magyarul, de még lehet rajta segíteni (ez lehet, hogy segít neked is)
MySQL 5.0: karakterkódolások
Magyar karakterek kezelése UTF-8-at használó MySQL-ben
stb. -
Sk8erPeter
nagyúr
Igen, ennek a függvénynek én is megörültem, mert korábban a levagdosással szenvedtem, ami sikerült is, de azért ez így jóval egyszerűbb megoldás.
Köszi, akkor ezeket majd kipróbálom, de időközben lenne egy másik probléma:
szeretnék korlátozást beállítani a feltölthető fájltípusokra, de valamiért csak akkor működik, ha az if feltételnél egyetlen szempontot adok meg, ha VAGY-olom a feltételeket ( || ), akkor már igazából semmilyen típust nem enged feltölteni, és ez így nem túl vicces.
Így írom be, egy feltétel esetén tökéletesen működik, csak a több feltétel esetén nem://Fájltípusra vonatkozó korlátozások
$tipus = $_FILES['uploaded']['type'];
if ($tipus == ('application/octet-stream' || 'application/zip' || 'application/x-msdownload' || 'text/css' || 'text/html' || 'text/plain' || 'message/rfc822'))
{
echo 'Ne tölts fel ilyen kiterjesztésű fájlt!<br />';
$ok=0;
}Mit ronthatok el?
-
kymco
veterán
válasz
Tele von Zsinór #3047 üzenetére
utf-8 alapból.
Lekérdeztem a forrást is, és a böngésző is ennek ismeri fel alapból... mégis krixkraxot ad.... -
akopacsi
csendes tag
Sziasztok! Szükségem lenne egy egyszerű webáruházra. (Nincs vevő regisztráció, hanem csak egy katalógus, egy bevásárlókocsi és egy megrendelő űrlap, ahol a megrendelő neve, címe bevihető.) Az OSCommerce messze túl bonyolultnak tűnik a feladathoz, egyszerűbb lesz valami nagyon primitív, saját php kód megírása. Azt szeretném megtudni, hogy milyen megoldást célszerű választani a bevásárlókocsi kezeléséhez? Arra gondolok, hogy érdemes egy külön táblát csinálni, ahol a session azonosítója az elsődleges kulcs, szerepel a sorban a termék neve, a rendelt mennyiség és egy időbélyegző vagy menet közben nem érdemes az egyes tételeket rögzítgetni, hanem egy globális változóban tárolni és a legvégén beírni az adatbázisba? Mi az elterjedt gyakorlat?
(Egyébként azt is megköszönöm, ha valaki tud olyan egyszerű webshop programot, ami erre képes.) -
válasz
Sk8erPeter #3048 üzenetére
Ja hogy van erre szakosodott függvény? Há' akkor használd azt.
Hibakezelésnek meg használd azt, ami legjobban bevált.Vagy ha elegánsan akarod megoldani, akkor ezt: Kivételkezelés
-
Sk8erPeter
nagyúr
Valóban, akkor lehet, hogy mástól lestem el. De kézenfekvőnek tűnik a változó állapotának nyomonkövetése. Ez miért csak egyszerűbb szkriptekhez jó? Mármint mitől jobb a többi hibakezelő módszer? A változó állapotának követésénél is meg lehet adni, hogy ha az mondjuk 0, akkor legyen "return: false", stb... Tehát akkor végül is ez, amit Te is használsz, elvileg majdnem ugyanaz.
Kiterjesztés kiderítésére a pathinfo() függvényt találtam a legésszerűbbnek, így:
$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);
$akarmivaltozo = pathinfo('$target');
echo 'Kiterjesztés: '.$akarmivaltozo['extension'].'<br />';Akkor ezt az extension tömböt lehetne rakni a substr() függvénybe, hogy ily módon vágja le a kiterjesztést, így jó?
Vagy mondjuk astrrpos($target, '.');
is jónak látszik.
_________________
(#3045) cucka: kivételkezelés?
Ez miben más/jobb, mint a többi hibakezelés?
-
cucka
addikt
válasz
Sk8erPeter #3043 üzenetére
Hibakezelésre az előttem leírt megoldás is jó, de kivételkezeléssel is megoldhatod, ami szerintem valamivel elegánsabb is
-
válasz
Sk8erPeter #3043 üzenetére
Hibakezelésre szerintem nem én ajánlottam a módszert, de egyszerűbb szkriptben megteszi ez is. Én amúgy ilyen sok kis
if (hiba) {
return hibakód;
}sorokat szoktam használni ellenőrzésre, amik függvényen vagy includolt szkripten belül használhatóak. A hibakezelés a függvényt hívó (vagy fájlt includoló) szkriptben történik.
Kiterjesztés visszarakásnál az a legcélszerűbb, hogy levágás előtt a substr() függvénnyel megjegyzed a kiterjesztést, oszt visszarakod amikor kell, így nem kell vele foglalkoznia a szkriptednek, fogalma se lesz róla, hogy milyen kiterjesztésű fájlokkal dolgozik.
-
Sk8erPeter
nagyúr
Jahh, értem már, akkor így módosítottam az image változót:
$image = ($_FILES['uploaded']['tmp_name']);
Ezzel már megfelelően eléri?
Másik kérdés, hogy még a konkrét feltöltés előtt mindenféle fájltípusra, fájlméretre és egyebekre vonatkozó ellenőrzéseket végzek a fájlon, és egy $ok változóval jelzem, ha minden ok, utána mehet a feltöltés, tehát így (sztem ezt még Te javasoltad, h így érdemes):
if ($ok==0)
{
...valami gáz van...;
}
else
{
if (move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
...ezt meg ezt csináld, írd ki, hogy faszán sikerült feltölteni a fájlt...;
}
else
{
...írd ki, hogy nem jött össze, stb...;
}Nyilván az ellenőrzésnek, hogy létezik-e már a fájl, ezelőtt kéne lefutnia.
Ekkor tehát csak simán állítsam az $ok változót 1-re, miután a while ciklus az i változó növelgetésével, kiterjesztés levágásával, kiegészítő név hozzácsapásával lefutott?
Hogy fog mögékerülni a kiterjesztés, ha a move_uploaded_file függvénynek kéne utána következnie? Külön if-be tegyem be, hogy ha volt ilyen jellegű változtatás (kiterjesztés levágása), akkor a képtípustól függő kiterjesztést tegye mögé? -
válasz
Sk8erPeter #3041 üzenetére
bináris = nyers, vagyis alapjában véve ugyebár egy tempfájlba tölt fel, aminek a nevét $_FILES[{inputname}]['tmp_name'] változóból éred el, s abban van a bináris. Most nézve a file_put_contents()-em gyakorlatilag hülyeség, szóval mást használj helyette, a fájlnév a régebb megadott átnevező-algoritmus $file változójában van. Pölö lehet move_uploaded_file() azonnal átmenteni, vagy az imagesave()-vel menteni, ha már be van olvasva GD-be.
-
Sk8erPeter
nagyúr
Jaaaaa
Oké, úgy látszik, késő van...
A feltöltés során mondjuk így adok nevet:$target_dir = "upload/";
$target = $target_dir . basename( $_FILES['uploaded']['name']);Milyen módon érem el bináris formában magát a képet?
____________________________________________________________________
Basszus, a fájltípusra vonatkozó kérdésem sztornó... Azt nem írtam, hogy próbáltam már a $_FILES tömbből elérni (ahogy írtad is), és ezt jól is tettem, azzal a kivétellel, hogy elcsesszintettem két karaktert a formon belül, az inputnak adott névnél, és emiatt nyilván nem működött...
Tehát így:
$tipus = $_FILES["uploaded"]["type"];
(na, és itt az uploaded helyett upload-ot írtam, és ezt jó ideig nem vettem észre
)
-
válasz
Sk8erPeter #3038 üzenetére
UTF8-at szerintem valahogy csak meg lehet oldani, de a mikéntjéről fogalmam sincs.
A fájltípust (MIME) a $_FILES tömbből is elő tudod varázsolni, én úgy szoktam. [L:http://www.php.net/manual/en/features.file-upload.post-method.php][/L]
-
válasz
Sk8erPeter #3037 üzenetére
1.)
Az 010101110101011010111010101011011110 alatt a képet értettem bináris formában. Tehát magát a képet, mint adat, feltöltés esetében ugyebár ez a $_FILES tömbben van.2.)
Igen, pontosan ezt csinálja. -
Sk8erPeter
nagyúr
Ezzel helyesen tudod megjeleníteni ATW-n is az UTF-8-as karakterkódolást?
Csak mert én már rákérdeztem ATW-nél, hogy mikor válik lehetővé ott az UTF-8-as kódolás helyes megjelenítése, miért csak az ISO-8859-2 kódolás megy, és ezt válaszolták:
"A karakterkódolás az ingyenes oldalaknál valóban csak ISO-8859-2 lehet. Ez régebbről maradt így a rendszer felépítése miatt, és több dolgon is módosítani kellene, hogy változzon. Idővel természetesen változni fog ez, egészen konkrétan az admin felületről lehet majd választani. Pontos időpontot erre most nem tudnék mondani."Ezek szerint mégis ki lehet ezt kerülni, és helyesen megjeleníteni az UTF-8-as kódolású weblapokat?
_______________
Még egy kérdés a képfeltöltéssel kapcsolatban: hogyan tudom olvasható formában kiíratni egy feltöltött kép típusát? Próbálkoztam párral, de eddig valahogy nem jött össze:
image_type_to_extension
image_type_to_mime_type
Persze lehet, hogy valami tök triviális dolgot rontok el, vagy valamire nem gondoltam.Köszi!
-
Sk8erPeter
nagyúr
Hali!
Bocsánat, csak most volt időm foglalkozni a dologgalKöszönöm a segítséget!
A dolog valamilyen oknál fogva nem működik jól:
ha létezik a fájl, létrehozza az új, kiegészített fájlnevet, de maga a kép csak az image változóban meghatározott számsorozatot tartalmazza (36 bájt, nyilván, mivel 36 szám (karakter) van benne).Egy-két alapdolog még nem teljesen tiszta számomra, ezért inkább megkérdezem:
1.) mi a szerepe az$image = '010101110101011010111010101011011110';
sornak?
A file_put_contents szerint ez hozzáfűzi ezt az infót a fájlhoz. Valóban, a tartalma ez lesz. Tehát ha megnézem magát a fájl tartalmát mondjuk szövegszerkesztővel, akkor benne ezt látom.
De ez mire jó jelen esetben? Csupán ennyit fog tartalmazni a fájl, semmi mást.Ebből következően a képet nem tudja megjeleníteni, mert arra vonatkozó infókat nem tartalmaz, hogy akkor hogyan is néz ki a fájl (ezt felülírja az image változóval a file_put_contents második paramétere).
2.) Jól értelmezem, hogy az alábbi sornál a strpos megkeresi azt a pozíciót, ahol a pont előfordul a fájlnévben, és a substr pedig a file változó legelejéről kezdve elmegy a pontig, és azt adja vissza eredményül?
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
Majd ha jól értem, a while függvényben szereplő cucc ehhez a névhez fogja hozzáfűzni a ".jpg" kiterjesztést.
Egyébként természetesen jpg kiterjesztésű fájllal próbáltam ki a dolgot. -
kymco
veterán
Sikeresen megoldottam a kódolási problémámat, most már mindenhol utf-8 van, és az excel tábla is szépen feltölthető adatokkal.
Köszönöm az eddigi segítséget!
Már csak egy problémám van, hogy a mysqladmin bár a html forrást nézve utf-8 kódolású weblapot generál, de az én bevitt karakterláncaim ékezetes betűinél krikszkrakszokat hoz ki...
Mit lehet tenni, hogy ne így legyen? -
cucka
addikt
Byte order mark. A több byte-os karakterkódolásoknál ez specifikálja az "endianness"-t. (Van erre magyar szó?
. Gyakorlatilag arról van szó, hogy egy két byte-on ábrázolt számnál/karakternél nem egyértelmű, hogy az a felső vagy az alsó byte van elől, az egyiket little endian-nak hívják, a másikat big endian-nak)
Ha utf8 kódolású weboldalt készítesz, akkor BOM nélkül mentsd a file-okat. -
kymco
veterán
válasz
Tele von Zsinór #3030 üzenetére
Elkövettem egy pár alapvető hibát korábban...
A php 'ISO-8859-2'-re volt állítva.
A MYSQL első-körben ISO-8859-1-re, másod-körben 'UTF-8'-ra lett konfigurálva
A notepad++-ban ANSI kódolással szerkesztettem.
Eltart egy ideig, míg homogenizálom a kódlaprengeteget -
kymco
veterán
Sziasztok!
Olyan problémám van, hogy egy magyar kódolású (amit próbáltam: próbáltam utf-8, iso-8859, windows-1250) weblapon windows alól szerkesztve szeretnék egy excel táblát létrehozni teleírni a táblába egy olyan karakterláncokkal, amikben ékezetes betűk is előfordulnak.
A táblát több, a netről leszedhető rutinnal létre is tudom hozni, és ha ékezet nélkül írom be a karakterláncot, nincs is gond, de amint ékezetes betűket használok akkor nem tud mit kezdeni az ékezetekkel egyik sem.
Létezik olyan php függvény, amivel egy karakterláncot konformmá tud tenni más kódlapokra, vagy nekem kell valamit kitalálnom hozzá?
Vagy van valami más megoldás?
(egyelőre az működik, ha szeparátorokkal elválasztott txt fájlba írom, mert ezt megeszi az excel, de ez félmegoldás) -
vakondka
őstag
Akkor esetleg annyit lehetne még hozzátenni, hogy a frissítés megkezdése előtt ideiglenesen átnevezni a fájlt amiből frissít a progi, így elvileg egy másik szál már nem tud lefutni akkor sem ha véletlenül tényleg pont egyszerre 2 látogató nézné meg az oldalt adott pillanatban
De ez tényleg csak nagyon kényszer megoldás, minden normális tárhelyen van CRON,
azt kell használni, nemhiába találták ki...szóval nem progikat kellene írni erre hanem tárhely szolgáltatót változtatni -
vakondka
őstag
Ha egy tárhelyen van a két oldal, akkor simán lehet másolni az egyik adatbázisából a másikba.
Ha nem egy tárhelyen van a kettő és nincs cron, azt is lehet helyettesíteni php scripttel.
Ezt általában úgy oldják meg, hogy a php fájlok láblécében meghívódik egy program ami a frissítést végzi, így a látogatók böngészés közben futtatják neked az árfrissítést
Nyílván a sikeres frissítést el kell menteni egy txt fájlba, vagy adatbázisba, hogy mikor volt az utolsó sikeres frissítés.
A frissítés előtt pedig egy feltétellel meg kell viszgálni, hogy eltelt-e már 24 óra az utolsó frissítés óta. Ha eltelt, akkor frissíteni kell és a "last update" időpontját megváltoztatni az aktuálisra, ha nem telt el, akkor nyílván nem csinál semmit a script.Ha van mondjuk egy footer.php fájlod, ami minden oldalon be van include-olva, akkor ide kell beépíteni ezt és már kész is van a saját CRON
A guglival is találtam ilyet: [link]
-
G.A.
aktív tag
Hali!
Kéne egy kis help.
Megoldható e a kövi művelet:
Van 2 oldal, az egyikről szeretném a másik oldal bizonyos adatait (árlista) frissíteni. Ez megoldható PHPban? H automatikusan frissítse? Ha nem van más lehetőség?GA
-
-
-
tildy
nagyúr
válasz
fordfairlane #3018 üzenetére
Unionnál üres tömböt kapok vissza...
-
fordfairlane
veterán
Ennyit találtam ki hirtelen:
$query = '
SELECT DISTINCT id,title FROM ((SELECT id,title,1 AS sorrend FROM cikkek WHERE title LIKE "%tes%")
UNION
(SELECT id,title,2 AS sorrend FROM cikkek WHERE keywords LIKE "%tes%")
UNION
(SELECT id,title,3 AS sorrend FROM cikkek WHERE lead LIKE "%tes%")
UNION
(SELECT id,title,4 AS sorrend FROM cikkek WHERE content LIKE "%tes%")
ORDER BY sorrend, id) AS result
'; -
tildy
nagyúr
A 2. esetben mi biztosítja, hogy olyan sorrendben jönnek az adatok, ahol kell? Merthogy ez lényeges! Fulltext searchnél ugyanis nem lehet beállítani a sorrendiséget.
"Alapból nem:
Every correct word in the collection and in the query is weighted according to its significance in the collection or query. Consequently, a word that is present in many documents has a lower weight (and may even have a zero weight), because it has lower semantic value in this particular collection. Conversely, if the word is rare, it receives a higher weight. The weights of the words are combined to compute the relevance of the row."
esetleg még így: (select * from (fulltext-es lekérdezés) left join (like-os lekérdezés) on ...)
Természetesen megjelenítés előtt kell szűrni.
Lehet jó lenne az array merge, ha nem a saját lekérdezési formulánkat használnám , ami ad midnen sorhoz egy rowidt is...Hm, ezt még átnézem. -
tildy
nagyúr
Van 4 fulltext searchom .azért négy, mert másképp nem lehet megoldani a sorrendiséget, hogyan keressen.
Keres keywordban, címben, leadben, és szövegtörzsben.
Vannak olyan cikkek ugye, aminek a leadjeben is szerepel az a szó, ami mondjuk a keywordben.
hogy tudom belepakolni ezeket úgy egy tömbbe, hogy ne legyen duplikáció? Próbálkoztam array diffel meg merge-el, de eddig nem oké a dolog.Tehát van a , b, c, d tömb, amelyben lehetnek azonos elemek. Ezt a 4 tömböt akarom úgy mergelni, hogy a közös elemek közül csak 1 maradjon benne.
mondjuk nem tudom , az elején a rowidt azt minek veszi....
-
BigManus
addikt
válasz
Orb1337 #3007 üzenetére
Bemásoltam:
<html>
<head>
<title>Teszt</title>
</head>
<body>
<p>Ez egy teszt oldal </p>
</body>
</html>
<?php
session_start();
if($_SESSION['belepett'] == true)
{
print "<b>Védett tartalom</b>, ha <big>ezt</big> olvasod,<br /> sikerült
belépned, gratulálok";
}
else
{
print "Csak regisztráltaknak!";
}
?>Ezt a hibát írja:
Ez egy teszt oldal
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\vedett.php:9) in C:\AppServ\www\vedett.php on line 10
Csak regisztráltaknak! -
-
BigManus
addikt
válasz
Orb1337 #3003 üzenetére
És ebből hogyan érem el pl. hogy egy általam létrehozott php fájl védett legyen?
Most ez van a vedett.php ban:
?php
session_start();
if($_SESSION['belepett'] == true)
{
print "Védett tartalom, ha ezt olvasod, sikerült belépned, gratulálok";
}
else
{
print "Csak regisztráltaknak";
}
?> -
BigManus
addikt
válasz
Frenky89 #3001 üzenetére
Sziasztok!
Előre bocsájtom teljesen kezdő vagyok a php-hez, a html egy kicsit megy.
Szeretnék készíteni egy weboldalt, de úgy, hogy bizonyos tartalmakat csak regisztrált felhasználók érhessenek el.
Utánanéztem pár letölthető login rendszernek, de számomra túl bonyolultak.Egyet beüzemeltem ami lényegében működik.
Ha helyes felhasználónév/jelszó párost adok meg, akkor kiírja hogy beléptem, tehát ez működik.
Van egy " védet tartalom " link amire ha rákattintok azt írja csak regisztráltnak!
Ha belépek és úgy kattintok kiírja belépve.Kérdésem az lenne, hogyan tudnék úgy megadni védett oldalt, hogy belépés nélkül elérjék?
Mert ahol kiírja, hogy csak regisztráltnak, abban a php-ban print értékkel írja, de ha beleírok a php-fájlba, megjelenik belépés nélkül is.Hálás lennék, ha valaki tudna segíteni.
Előre is köszönöm!
-
Frenky89
addikt
Kösz nektek!
Igazából abban bíztam, hogy valaki felismeri, hogy melyik drupal modul a konfigurátor.
Mostmár egyéni megoldás lesz, szóval lényegtelen... és még1x köszi!
Új hozzászólás Aktív témák
Hirdetés
- Eladó konfig! Ryzen 7 7800X3D 2TB SSD 64GB DDR5 RX9070XT 16GB!
- Új, makulátlan állapotú Samsung Galaxy Buds FE, fehér, fél év garancia
- Új, makulátlan állapotú Samsung Galaxy Watch7 44mm ezüst, 2 év garancia
- Új, makulátlan állapotú Samsung Z Fold 6 256GB Tengerészkék, független, 2 év garancia
- Használt TP-Link Deco M4 - AC1200 Router (Mesh-ként is használható)
- AKCIÓ! Intel Core i7 7700K 4 mag 8 szál processzor garanciával hibátlan működéssel
- DELL PowerEdge R730xd 26SFF rack szerver - 2xE5-2680v3 (24c/48t, 2.5/3.3GHz), 64GB RAM, 10G, H730p
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5800X 32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 10600KF 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Lenovo Thinkpad T14 üzleti i5-10310u 10th gen. 8-32Gb RAM 256GB-1TB SSD gar.
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest