- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- Bemutatkozott a Poco X7 és X7 Pro
- Xiaomi 11 Lite 5G NE (lisa)
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Google Pixel topik
- Samsung Galaxy A55 - új év, régi stratégia
- Milyen okostelefont vegyek?
- Mobil flották
- Netfone
Új hozzászólás Aktív témák
-
fordfairlane
veterán
válasz
spammer #13830 üzenetére
Egyébként próbáld ki, küldj egy ékezetes subjectes emailt thunderbirdből, outlookból, vagy más levelező kliensből magadnak, és nézd meg a levél forráskódjában a subjectet. Az összes általam ismert levelező kliens quoted-printable-encodeolást használ ilyenkor. A PHP mail() függvény nem csinál semmit, csak plain fejléceket és üzenetet küld a megadott címre. Minden formátumkezelési probléma a PHP scriptre hárul.
-
fordfairlane
veterán
válasz
spammer #13827 üzenetére
Mailkliens függő. Thunderbird ezek szerint megeszi a nem szabvány szerinti subject-et. Gmail is megeszi, de pl. a freemail már nem, és mint láthatod, az a másik webes kliens sem.
Leírtam, mire kell figyelni. Vagy nem használsz ékezetet a subjectben, vagy megfelelően kódolod a mail() számára, mivel az nem csinálja meg magától, vagy valami mailer könyvtárt használsz. (Vagy tojsz az egészre
) A Headers-ben beállított content-type csak a message body-ra vonatkozik.
-
PowerBuldog
veterán
válasz
spammer #13751 üzenetére
szarul másoltam ki
Úgy másoltam egy oldalról, szóval nem értem mi a gondja
Ez a teljes:
<?php
if(isset($_POST['email'])) {
$to = 'valami@dsfgsdf.hu';
$subject = 'asadfasdf';
function died($error) {
// your error code can go here
echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.";
echo $error."";
echo "Please go back and fix these errors.";
die();
}
// validation expected data exists
if(!isset($_POST['first_name']) ||
!isset($_POST['last_name']) ||
!isset($_POST['email']) ||
!isset($_POST['comments'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}
$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$first_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.';
}
if(!preg_match($string_exp,$last_name)) {
$error_message .= 'The Last Name you entered does not appear to be valid.';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($to, $subject, $email_message, $headers);
?>
<!-- include your own success html here -->
Thank you for contacting us. We will be in touch with you very soon.
<?php
}
?> -
Tele von Zsinór
őstag
válasz
spammer #13717 üzenetére
Érdekes, nekem sosem működött a limit paramétere, de én nem bindelek, hanem az execute-nak adok át egy tömböt.
biker: van néhány karakterkódolással kapcsolatos sebezhetőség, de általánosan az mondható, hogy tényleg nem kell ellenőrzigetni és kézzel escape-elni. Annyi történik, hogy átküldesz egy parancsot a szervernek azzal, hogy itt és itt lesz benne paraméter, így a későbbiekben ha oda érvényes sql-t tesznek, akkor sem fogja parancsként értelmezni.
-
Petyyyyy
addikt
válasz
spammer #13697 üzenetére
<?php
$forint = $_POST['forint'];
$osszeg = $forint / $arfolyam; //kipróbáláshoz $forint2 = tetszőleges értékkel helyettesíthető
settype($osszeg, int);while ($osszeg >=500)
{
$osszeg-=500;
$otszazas++;
}
while ($osszeg<500 and $osszeg>=200)
{
$osszeg-=200;
$ketszazas++;
}
while ($osszeg<200 and $osszeg>=100)
{
$osszeg-=100;
$szazas++;
}
while ($osszeg<100 and $osszeg>=50)
{
$osszeg-=50;
$otvenes++;
}
while ($osszeg<50 and $osszeg>=20)
{
$osszeg-=20;
$huszas++;
}
while ($osszeg<20 and $osszeg>=10)
{
$osszeg-=10;
$tizes++;
}
while ($osszeg<10 and $osszeg>=5)
{
$osszeg-=5;
$otos++;
}
$vege=$osszeg; //nem átválthatóprint "<form name='urlap1' acton='' method='POST'>
<h3>Pénzváltó</h3>
A jelenlegi árfolyamon 1 Euro $arfolyam Forintot ér.
<br><br><br>
Átváltani kívánt összeg:
<input type='text' name='forint'> Ft
<br><br>
<input type='submit' value='Átváltás'>
<br><br><br>
<input type='text' name='5e' value='<?php echo $otos; ?>'> db 5 euro-s<br>
<input type='text' name='10e' value='<?php echo $tizes;?>'> db 10 euro-s<br>
<input type='text' name='20e' value='<?php echo $huszas; ?>'> db 20 euro-s<br>
<input type='text' name='50e' value='<?php echo $otvenes; ?>'> db 50 euro-s<br>
<input type='text' name='100e' value='<?php echo $szazas; ?>'> db 100 euro-s<br>
<input type='text' name='200e' value='<?php echo $ketszazas; ?>'> db 200 euro-s<br>
<input type='text' name='500e' value='<?php echo $otszazas; ?>'> db 500 euro-s <br>
<input type='text' name='maradt' value='<?php echo $vege; ?>'> euro-t nem tudunk kiadni az automatánál. Kérem fáradjon a kasszához!</form>
<br>";
?> -
fordfairlane
veterán
válasz
spammer #13660 üzenetére
Amúgy user előtt nem lesz semmi "kritikus" ajaxos dolog, ami okot adhatna, de jobb félni, mint megijedni alapon akarom védeni a dolgokat
Azért ne becsüld le őket. Felrak egy live http headers addont, és máris látja az összes requestet, az ajaxosokat is. Ha nem POST metódust használsz, csak bemásolja az url-be, és máris közvetlenül tesztelheti az ajax metódushívásokat. Ha ezt a fejlécellenőrzést berakod, akkor sem nyersz vele sokat. Átlag felhasználók nem szoktak ajax hívásokat nézegetni, profikat meg nem lehet ezzel a módszerrel távol tartani.
-
fordfairlane
veterán
válasz
spammer #13656 üzenetére
Ez nem arra való, hogy védd ezeket a fájlokat a közvetlen végrehajtástól. Lehet, hogy kezdőket át lehet verni, de nem olyan nehéz emulálni az HTTP_X_REQUESTED_WITH fejlécet.
Arra szokták használni, hogyha valaki fallback mechanizmust akar beépíteni arra az esetre, ha a felhasználó böngészője nem támogatja valamiért az ajaxot, akkor sima requestként kezeli a parancsot, és a teljes oldalt küldi a webszerver, míg ajax-lekérésnél, ha a requestben szerepel ez a HTTP_X_REQUESTED_WITH fejléc, csak az adott page - fragmentet küldi vissza.
Az ajax hívásokat ugyanúgy az a böngésző végzi, mint a nem aszinkron requesteket. Rendesen átgondolt és megírt felhasználói autentikációt és session kezelést kell használni, ha az ajax hívások direkt meghívása bajt okozhat.
-
-
fordfairlane
veterán
válasz
spammer #13512 üzenetére
Sosem láttam még ilyet, hogy unchecked-re lett volna állítva ez az attribútum, és a példában az if-ben el van rontva a feltételvizsgálat ( == helyett =, tipikus hiba)
Én ilyen esetekben az alternatív szintaktikát ( if: endif; ) szoktam használni:
<input type="checkbox" name="nev" value="val"<?php if($nev) : ?> checked="checked"<?php endif; ?>>
-
DNReNTi
őstag
válasz
spammer #13459 üzenetére
Megteszteltem oda-vissza, nem találtam benne hibát, ha esetleg mégis bakizik, dobj egy privátot és kijavítom, el is mentettem a saját kis függvénytáramba. Hátha egyszer nekem is kell.
Még annyit lehet célszerű módosítani hogy a $difference is felkerülne paraméternek, így az is megadható a függvény meghívásakor.. részletkérdés.
Használd egészséggel -
DNReNTi
őstag
válasz
spammer #13456 üzenetére
Sajnos már nem tudom szerkeszteni amit írtam... megcsináltam függvénynek és kicsit tuningoltam rajta, így még jobb és könnyebb használni:
function cutText($text, $needle) {
$result = '';
$difference = 100;
$needle_length = strlen($needle);
$needle_position = stripos($text, $needle);
if ($needle_position){
$text_tmp = substr($text, 0, $needle_position);
if (strlen($text_tmp) > $difference) {
$text_tmp = substr($text_tmp, -$difference);
$space_position = strpos($text_tmp, ' ');
$text_tmp = '...' . substr($text_tmp, $space_position+1);
}
$result = $text_tmp;
$text_tmp = substr($text, $needle_position, ($needle_position+$needle_length+$difference));
if (strlen($text_tmp) > $difference) {
$space_position = strpos($text_tmp, ' ', $difference);
$text_tmp = substr($text_tmp, 0, $space_position) . '...';
}
$result = $result . $text_tmp;
} else {
$result = 'A keresés nem hozott eredményt!';
}
return $result;
}Használata egyszerűen csak:
echo cutText($text, $needle); -
DNReNTi
őstag
válasz
spammer #13456 üzenetére
Hali,
Ezt most gyorsan összedobtam, lehet kókány és egyszerűbben is menne, de az első találatra kitűnően működik:
$text = 'az összes szöveg.';
$needle = 'keresőszó';
$result = '';
$difference = 100;
$needle_length = strlen($needle);
$needle_position = stripos($text, $needle);
$text_tmp = substr($text, 0, $needle_position);
$text_tmp = substr($text_tmp, -$difference);
$space_position = strpos($text_tmp, ' ');
$text_tmp = substr($text_tmp, $space_position+1);
$result = $text_tmp;
$text_tmp = substr($text, $needle_position, ($needle_position+$needle_length+$difference));
$space_position = strpos($text_tmp, ' ', $difference);
$text_tmp = substr($text_tmp, 0, $space_position);
$result = '...' . $result . $text_tmp . '...';
echo $result;update:
a keresőszó helyének meghatározásakor az stripos($text, $needle); megoldjá jobb mert így nem case-sensitive. -
Peter Kiss
őstag
válasz
spammer #13446 üzenetére
1. Értelmetlen. Használj prepared statement-eket!
2. htmlentities -
DNReNTi
őstag
válasz
spammer #13444 üzenetére
Persze hogy van értelme. Az űrlapon bevitt adatokat mindenképp célszerű az escape_string() metóduson átengedni mielőtt betolod az adatbázisba, elkerülendő a mysql injection-t.
A másik dolog is teljesen normális. Sőt ilyenkor célszerű közös css-t használni az editorban (TinyMCE) és a megjelenítéskor, hiszen nem csak tartalomra hanem kinézetre is pontosan ugyan azt kapja majd vissza az user amit megszerkesztett. -
DeltaPower
addikt
válasz
spammer #13388 üzenetére
Ilyesmi lesz:
$itemlist[] = $item;
usort($itemlist, 'datum_rendez');
function datum_rendez($elso, $masodik)
{
// ellenőrzések (tömb-e, kulcs létezik-e, stb)
if(
(!is_array($elso) || !is_array($masodik)) ||
(!array_key_exists('date', $elso) || !array_key_exists('date', $masodik))
) return 0;
// ez a rész attól függően változik, hogy milyen formában van a dátum
$elsodatum=strtotime($elso['date']);
$masodikdatum=strtotime($masodik['date']);
// sort fgv lényegi rész
if($elsodatum == $masodikdatum) return 0;
else return $elsodatum > $masodikdatum ? 1 : -1;
}
Fejből írtam, lehet benne hiba. -
Sk8erPeter
nagyúr
válasz
spammer #13383 üzenetére
Jaja, jól teszed, az úgy a legjobb.
Most látom, már én is megzavarodtam, és szintén RewriteEngine-t írtam RewriteRule helyett
Mindjárt szerkesztetem egy modival az előzőt, hogy ne ez maradjon benne.
www.example.com/articles/110/ez-egy-nagyon-erdekes-cikk
erre meg valami ilyesmi illeszkedik:
RewriteRule ^(\w+)/(\d+)/(.+)$ index.php?page=$1&id=$2 [QSA,L]
(itt a 3. részt, tehát az "ez-egy-nagyon-erdekes-cikk" stringet nem vettem figyelembe, mert a struktúrád szerint az most nem is kell)
-
Sk8erPeter
nagyúr
válasz
spammer #13381 üzenetére
Úgy, hogy olyan regexpet használsz a RewriteRule-nál, ami a számokra illeszkedik, a "view" szócskát meg "beledrótozod".
Pl. ilyesmi:
RewriteRule ^(\d+)$ index.php?page=view&id=$1 [QSA,L]Ez illeszkedik arra, amit írtál. A \d minden numerikus karakterre illeszkedik. A +-szal pedig azt várod el, hogy egy vagy több ilyen minta legyen a stringben (tehát szerepelhet benne simán 9 vagy 6432 is). A ^ a string kezdetét jelöli, a $ pedig a legvégét, azért jó jelen esetben így korlátozni, mert pl. nem illeszkedik arra a mintára, hogy "a321b" vagy "a321" vagy "321b".
De egyébként érdemesebb beszédes neveket használni az URL-nél, pl. ilyesmi:
www.example.com/articles/110/ez-egy-nagyon-erdekes-cikkRegExp tesztelésére tudom ajánlani többek közt ezeket:
http://regexpal.com/
http://gskinner.com/RegExr/
utóbbi Flash-alapú, de nagyon beszédes segédlet van hozzá. Mindkettő ajánlott.[ Módosította: BomiBoogie ]
-
ztajti
csendes tag
válasz
spammer #13379 üzenetére
valóban elírtam, a paraméter sor elejére rewriteRule kell
Köszi DeltaPower, hogy észrevetted.
Ez azért lehetséges, mert rossz lekérést küldesz a feldolgozó szkriptnek, illetve, ha nincs .html végződés próbálj egy "/" jelet a link végére beszúrni, valamint az index.php header állományát így kialakítani:
<head>
<base href="http://www.valami.com/" />
...{SAJÁT HEAD RÉSZED} ...
</head>sorral kiegészíteni. Illetve csak a base href kell neked.
-
Sk8erPeter
nagyúr
válasz
spammer #13373 üzenetére
Igazából mi a nem szimpatikus rajta?
Hogy nem olyan egyszerű, mint a lepkefing?
Amúgy sokszor CMS-eknél/frameworköknél azt csinálják, hogy minden URL-t ráfuttatnak az index.php-re, fix query stringként (pl. index.php?q=adsasd/123/asd), aztán az adatbázisban az URL aliasok táblájában keresik meg a kapott query stringet, és ez van leképezve az alkalmazás működésének megfelelő "valós" címekre.
De az általad linkelt módszer is teljesen jó. -
ztajti
csendes tag
válasz
spammer #13373 üzenetére
Hy!
A Te esetedben ez legyen a .htaccess file tartalma:
DirectoryIndex index.php
RewriteEngine on
RewriteBase /
RewriteEngine ^([a-zA-Z0-9-*]+)/([a-zA-Z0-9-*]+).html$ index.php?page=$1&id=$2 [QSA]A rewriteEngine soirt annyiszor ismételed a megfelelő paraméterekkel, amíg le nem fedi a teljes oldalt.
A linkkeket pedigvalami.com/index.php?page=ertek&id=ertek
valami.com/index.php?page=news&id=104411sorról erre cseréld le:
valami.com/ertek/ertek.html
valami.com/news/104411.html
[/M]Remélem ez alapján már meg tudod csinálni.
By.
-
Sk8erPeter
nagyúr
válasz
spammer #13345 üzenetére
"Azzal működött, nem az volt a probléma, hanem hogy simán beírva a $dest vagy $dest2 nem ment."
Pedig de, az probléma, amit írtam.
Nézd meg még egyszer ezt a stringet:
'origins=04429&destinations=$dest&mode=driving&units=imperial&sensor=false'
mint látható, sima aposztrófot használsz, így a $dest nem fog behelyettesítődni, még jó, hogy rossz eredményt kapsz, mert így küldi el a szervernek: destinations=$dest, ahogy van (szóval a szerver a $dest-et kapja értékül).
Amúgy Te magad mondtad, hogy nem működött úgy.<form id="destCalc" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
itt ez az echo-zás tökéletesen felesleges.
Ezt nyugodtan cseréld le így:
<form id="destCalc" action="" method="post">
az üres action pont azt csinálja, hogy önmagára küldi el a formot.
Mondjuk gondolom azt vágod, hogy ennek megvan az a hátránya, hogy a böngésző cs×szeget F5 nyomkodásakor, hogy biztos el akarod-e küldeni még egyszer a POST-adatokat.Amit viszont most nem értek, hogy miért POST-metódussal küldöd el az adatokat, amikor korábban GET-et használtál. Így nem is merülne fel az a probléma, amit az előbb említettem.
"oldalfrissítés nélkül betöltse a php kódot (hogy lássam az eredményt)"
Ezt most nem egészen értettem. Mit is szeretnél?Ha jQuery+AJAX témáról van szó, akkor javaslom a jQuery topicot. A PHP-része persze jöhet ide, mindenesetre hint: json_encode()-dal küldd vissza a kliensnek az adatokat, úgy lesz a legkönnyebb kezelni.
-
spammer
veterán
válasz
spammer #13345 üzenetére
Haladás:
$('#destCalc').submit(function(){
var action = $(this).attr("action")
$.ajax({
url: action,
type:'POST',
data: $(this).serialize(),
success: function(data){
$('#message').html(data);
}
})
return false
})Ezzel már beleírja a #message div-be, csak az a baj, hogy ha nem adok meg a divnek fix magasságot, akkor nem látszik a szöveg, mert a tartalomhoz nem igazodik a magassága, hanem marad olyan, mint volt.
-
fordfairlane
veterán
válasz
spammer #13340 üzenetére
Akkor már inkább így:
$url = 'http://maps.googleapis.com/maps/api/distancematrix/json';
$params = array(
'origins' => '04429',
'destinations' => $_GET['dest'],
'mode' => 'driving',
'units' => 'imperial',
'sensor' => 'false'
);
$sResponse = curl_request($url, http_build_query($params)); -
Tele von Zsinór
őstag
válasz
spammer #13283 üzenetére
A win filerendszere nem utf8 kódolást használ, innen a bajod. Azt hiszem, hogy ucs2, de ez csak ilyen halványan felsejlő emlék.
A legjobban azzal jársz, ha elfelejted a speciális karaktereket a filenevekben, és az angol abc karaktereire, valamint az kötőjelre és az underscore-ra korlátozod őket.
-
Peter Kiss
őstag
válasz
spammer #13285 üzenetére
PHP telepítése Windows 7, 8-ra (Vista-ra is szerintem) - csak röviden.
-
Peter Kiss
őstag
válasz
spammer #13283 üzenetére
Nem fog menni. PHP Windows-on 8859-1-gyel (vagy hasonló single byte coding-gal) dolgozik, ha fájlnevekről van szó. De ettől függetlenül sosem szerencsés ilyen jellegű fájlneveket adni.
Windows-on miért kell EasyPHP? Ott az IIS (neked ráadásul 8-as), amire fel lehet pattintani a legújabb PHP verziót is, és megy, mint a szél.
-
fordfairlane
veterán
válasz
spammer #13255 üzenetére
És még annyi, hogy ha sikerül minden értéket beleíratni a fájlba, akkor megoldható, hogy ezek külön sorokba legyenek és a sorok végén legyen egy | jel. Mert eredetileg is így vannak elválasztva a sorok a txt-ben, mert a másik php array-ként olvassa be a tartalmat és így választja el a sorokat.
$content = "";
for($i=1;$i<=4;$i++) {
$content .= $_POST['line'.$i] . "|\r\n";
}
$handle = fopen("teszt.txt", 'w');
fwrite($handle, $content);
fclose($handle);
echo "Sikeres módosítás."; -
Sk8erPeter
nagyúr
válasz
spammer #12545 üzenetére
Akkor lassú, amikor adatbázis-kapcsolatot is használsz, vagy ha egy tök egyszerű, csupán néhány PHP-s függvényhívást tartalmazó oldalt megnyitsz, akkor is?
Kipróbálhatnád esetleg IIS-sel is, Web Platform Installer segítségével gyorsan, kattintgatósan összehozható, ha mondjuk itt a WPI-ben rámész, hogy mondjuk telepíteni szeretnéd a Drupalt, akkor egyből behúzza a MySQL-t, PHP-t, meg a többi dolgot, amit fontosnak tart (pl. cache-elést elősegítő dolgok), meg a végén megkérdezi, mi legyen az admin-jelszó a MySQL-hez. Persze előtte szedd le az EasyPHP-t.
-
Sk8erPeter
nagyúr
válasz
spammer #9390 üzenetére
"Meg akkor alapból mindegyiket egyesével be kell töltögetnie a php-nek, hogy a főoldalon mindegyik egymás alatt megjelenjen."
Így viszont minden egyes különálló cikk miatt végig kell bogarásznia a teljes cikkek.html-t, azt beparse-olni, keresgélni a megfelelő id-val ellátott elemet, stb., tehát amiket már korábban írtam. Az meg ezerszer erőforrás-igényesebb, mint egy ciklussal egyszerűen kiíratni mondjuk 8 különálló HTML-fájl tartalmát. -
Sk8erPeter
nagyúr
válasz
spammer #9387 üzenetére
Kicsit összeesett a kódod.
Önmagában ez a parser elég jónak és könnyen használhatónak tűnik, a Te feladatodhoz azonban szerintem ennek a használata erős túlzás - igazából feleslegesen erőforrásigényes, hogy egy viszonylag hosszú fájlból (cikkek.html) kotorja ki a megfelelő id-vel rendelkező div-et.
Ezért írtam a példát, amit mutattam - ott széjjel vannak bontva külön fájlokra a cikkek, tehát ha egyetlen cikket akarsz megjeleníteni, akkor egyetlen fájl tartalmát csak egy az egyben behúzza, és készen is van. Ez pedig végigkotorja a cikkek.html-t, beparse-olja, jó nagy meló árán keresgél benne egy valid, adott id-vel ellátott DOM-elemet, majd végül azt jeleníti meg. Lehet, hogy ennyi cikknél még nem annyira vészes a futási ideje, sőt, 8 cikknél valószínűleg nem is olyan nagyon veszed észre a különbséget, mert alapvetően normális esetben gyorsan dolgozik a PHP, de gondolj bele, ez milyen durván erőforrásigényes lenne mondjuk 100 cikknél.Alapvetően nem ilyenekre való ez a parser. Inkább olyasmire lehet gondolni, ami a példában is van: pl. van egy külső oldal, ami itt épp a Google oldala, aminek a forráskódjából bizonyos részeket egy az egyben be akarsz húzni, és azt szerveroldalon megtenni, amire ilyen módon van lehetőség. A példában behúzza a google.com tartalmát, majd előkotorja belőle a képeket és a linkeket. Ilyet saját, "belső" oldalon megjátszani totálisan pazarlás, amikor külön-külön is lehetnének a fájljaid.
A másik az, hogy ha a felhasználó úgy nyitja meg az oldalt, hogy a $_GET['page'] nincs beállítva (tehát http://example.com/index.php?page=XYZ HELYETT http://example.com), akkor amennyiben a PHP hibajelzése magasabbra van állítva, kapsz egy notice-t, hogy felhasználsz olyan változót, ami nincs beállítva.
A switch blokk előtt ezért érdemes lenne legalább egy vizsgálatot elvégezned:$page_to_display = '';
if( isset($_GET['page']) ){
$page_to_display = $_GET['page'];
}
switch($page_to_display){
.............
} -
Sk8erPeter
nagyúr
válasz
spammer #9370 üzenetére
Feltételezem, a WordPress is támogat komolyabb szintű cache-elést, így szerintem érdemes lenne mégis megfontolnod az arra vagy más CMS-re való átállást, ha valami könnyen módosíthatót szeretnél - lehet, hogy később bővíteni szeretnéd tartalmakkal az oldaladat.
Persze ez csak lehetséges alternatíva, ha időt szeretnél magadnak megspórolni.Ha nem akarsz ilyet, és az egyszerű megoldások között keresel, létezik nagyon favágó módszer, ami nagyon nem a webfejlesztés gyöngye, de végül is működik, vegyük úgy, hogy mondjuk 10 darab cikked van, és ahogy említetted, ez 10 külön HTML-fájlba van szétdobva, és csakis ezeket szeretnéd megjeleníteni:
- mindegyik fájlnak legyen azonos a kiterjesztése (pl. .php, ha akarsz mondjuk belerakni valami PHP-kódot, legyen alkalmas rá), és lehetőleg a követhetőség miatt legyenek azonos könyvtárban
- van egy index.php fájlod, ahol az összes lényeges műveletet elvégzed; az ömlesztett kiíratást, valamint az egy darab megadott cikknek a kiíratását is
- berakod egy tömbbe ennek a 10 db fájlnak a nevét mondjuk kiterjesztés nélkül, figyelsz rá, hogy helyes nevet adj meg, és lehetőleg egyáltalán ne tartalmazzon ékezetes vagy más speciális karaktereket;
- egy foreach-csel végigmész ezen a tömbön, és szépen file_get_contents-szel beolvastatod és kiíratod ezeknek a fájloknak a tartalmát
- mindeközben figyelsz arra is, hogy a fájlokban a cikk címe és egy önhivatkozás is legyen benne - a hivatkozás meg mondjuk legyen ilyesmi: index.php?article=tokmindegy, ahol tokmindegy a fájl neve kiterjesztés nélkül, kiterjesztéssel meg tokmindegy.php
- ha valaki úgy nyitja meg az oldalt, hogy http://example.com/index.php VAGY http://example.com/index.php VAGY http://example.com/index.php?article=, akkor ömlesztve jeleníted meg az összes cikket
- ha valaki úgy nyitja meg az oldalt, hogy http://example.com/index.php?article=tokmindegy, akkor megvizsgálod, hogy létezik-e a tokmindegy.php az adott könyvtárban, ha igen, akkor kiíratod, és kész vagy; ha nem létezik, akkor pl. kiraksz egy hibaüzenetet, hogy nincs ilyen fájl, és megjeleníted ömlesztve a tartalmat. Ha valaki ilyen módon nyitja meg az oldalt, akkor a $_GET['article'] értéke egyenlő lesz tokmindegy sztringgel.Vegyük azt, hogy az "itt_tarolod_a_cikkeket" könyvtárban vannak a tartalmaid, ez pedig az index.php-vel azonos könyvtárban helyezkedik el.
Valahogy így néz ki akkor a könyvtárstruktúra (most azért tettem DIR-t az itt_tarolod_a_cikkeket mögé, hogy jelezzem, hogy az egy könyvtár):fejlec.php
lablec.php
index.php
itt_tarolod_a_cikkeket [DIR]
|-- tokmindegy.php
|-- masikcikk.php
|-- megegycikk.php
|-- ....Ez alapján NAGYON leegyszerűsített tákolmány fos példa, gyorsan összekotorva:
Pl.:
<?php
// .....................
$articles_directory = 'itt_tarolod_a_cikkeket';
$articles_array = array( 'tokmindegy', 'masikcikk', 'megegycikk', );
$page_to_show = '';
$errors_array = array();
if( !empty($_GET['article']) ){
if( in_array($_GET['article'], $articles_array) ){
if( file_exists($_GET['article']) ){
$page_to_show = $articles_directory.'/'.$_GET['article'].'.php';
}
else{
$errors_array[] = "File doesn't exist or is not available!";
}
}
else{
$errors_array[] = 'The following article is invalid: "'.$_GET['article'].'"';
}
}
?>
<html>
<head>
<title>Teszt</title>
.......
<style type="text/css">
.red {
color:red;
}
</style>
<head>
<body>
<div id="page">
<div>
<?php
require_once('fejlec.php');
?>
</div>
<div id="content">
<?php
if(!empty($errors_array)){
echo '<div class="red">', implode('<br />', $errors_array), '</div>';
}
if(empty($page_to_show)){
foreach($articles_array as $article){
$article_path = $articles_directory.'/'.$article.'.php';
if( file_exists($article_path) ){
echo file_get_contents($article_path);
}
else{
echo '<div class="red">"'.$article.'" doesn\'t exist!</div>';
}
}
}
else{
$article_path = $articles_directory.'/'.$page_to_show.'.php';
echo file_get_contents($article_path);
}
?>
</div>
<div>
<?php
require_once('lablec.php');
?>
</div>
</div>
</body>
</html>Mivel őszintén szólva még egy szövegszerkesztőbe sem dobáltam bele, csak itt a PH!-s textarea-ba pötyögtem be, ezért ne tépjétek le a tökömet, ha szintaktikai hibát tartalmaz, innen úgy tűnt, hogy nincs benne.
Meg hát ezzel nem akartam senkinek programozási tanácsot adni, sőt, mert ez nem egy szép módszer.
Csak a gyorscélnak megfelel, legalábbis ez a fenti ilyen ötperces módszer. -
Sk8erPeter
nagyúr
válasz
spammer #9364 üzenetére
Igazából szerintem egyikünk számára sem volt egyértelmű először, hogy mit is szeretnél, így mindketten félreértettük.
Most megint elolvastam, amiket írtál, és szerintem Te tényleg valami olyasmit szeretnél, mint ami a blogokon van: ömlesztve az összes cikk, de ha a címére kattintasz, akkor ugyanaz a cikk megjelenik egy külön oldalon, ergo külön URL-lel, esetleg bővebb tartalommal is.Pl. erről egy egyetemi tanárunk blogja jut eszembe, WordPress-es blogja van, és külön oldalon is megtekinthetők az itt ömlesztve, igaz, pagerrel látható cikkek.
Valami ilyesmit akarsz, nem?
Csak mert akkor a korábbi AJAX-ozás nem is feltétlenül kellene, sőt, az már inkább advanced dolog.
Szerintem amennyiben tök egyszerű struktúrájú oldalad van, hagyományos módon kellene felépítened az oldaladat, hagyományos módon beinclude-olni mindenhova azt a fájlt, ami tartalmazza a fejlécet, menüt, aztán alulra meg a láblécet, ahogy mindenki kábé el szokta kezdeni a honlapszerkesztést. Már ha nem akarod most bonyolítani. -
Sk8erPeter
nagyúr
válasz
spammer #9359 üzenetére
Ha arról beszélsz, hogy abban a bizonyos fájlban egy normálisan felépített HTML-tartalom van, és abból csak pl. egy adott id-vel rendelkező div-et szeretnél megjeleníteni, vagy hasonló, akkor példaként a jQuery hivatalos oldalán van AJAX-os kommunikációnál ugyanilyen:
Loading Page Fragments$('#result').load('ajax/test.html #container');
Egyébként még PHP-val is lenne mód ilyenre: DOMDocument-tel parse-olod, getElementById()-vel beolvasod a megfelelő részt.
Mondjuk ha már megoldási módszerekről beszélünk, ez sem túl szép, jobb lenne a tartalmakat adatbázisból kiolvasni, ha van erre mód.
===
(#9360) PazsitZ : nem akarok kötekedni, de azért ne szoktassuk arra az emberkéket, hogy minden cikket jelenítsenek csak meg nyugodtan ugyanazon az oldalon, aztán majd kliensoldalon szépen megjelenítgeti-eltünteti, nem kevés terhelést róhat adott esetben feleslegesen a szerverre.
Persze nagymértékben függ a feladattól, de általában inkább kerülendő, inkább aszinkron módon kellene betölteni. -
PazsitZ
addikt
válasz
spammer #9359 üzenetére
Egyszerű példa (vedd pszeudokódnak) :
CikkModule.php
{
static function getCikkHTML($cikkId) {
...
}
}CikkController.php:
{
public function cikkekAction(){
foreach($cikkek as $cikk){
echo CikkModule::getCikkHTML($cikk->cikk_id);
}
}
public function cikkAction($cikkId){
echo CikkModule::getCikkHTML($cikkId);
}
}vagy még egyszerűbben listaoldalon ajax hívás nélkül (persze a direkt linkhez kell az egy cikket megjelenítő action):
<div id="cikkek">
<div class="cikk_1"><a onclick="showCikk(1);"></a></div>
<div class="cikk_2"><a onclick="showCikk(2);"></a></div>
</div>
<div id="cikk" style="display:none;"> <a onclick="closeCikk();"></a></div>
<script>
function showCikk(id){
$('#cikk').html( $('#cikk_' + id).html() ).show();
$('#cikkek').hide();
}
function closeCikk(){
$('#cikkek').show();
$('#cikk').hide().html('');
}
</script>Bár megjegyzem pont Yii-ben van rá példa, hogy az egész page contentet lekéri az ajax és csak a megfelelő tartalmat illeszti be sima jQuery selectorral. pl.: $('.cikk_2', '#cikkek').html();
-
Sk8erPeter
nagyúr
válasz
spammer #9342 üzenetére
Ez mitől PHP kérdés?
Egyébként kicsit homályos a kérdésed.
Most a linkkel oldalon belül szeretnél ugrabugrálni, vagy épp, hogy külső linket szeretnél meghatározni?
Ide felraktam neked mindkettőről példát:
http://jsbin.com/iliwac/1/edit#html,live -
modder
aktív tag
válasz
spammer #8977 üzenetére
szerintem is, kukis az biztos működni fog, és viszonylag egyszerű is, ha csak cikkszámok listájáról van szó. esetleg megnézhetsz valami LocalStorage dolgot (keress rá). ez asszem ilyen HTML5-ös szabvány.
Ha nincs DB, még a cikkszámra kattintva akár egy AJAX-os megoldással (hogy ne töltődjön újra az oldal) session változóba is mentheted a cikkszámokat.
-
Speeedfire
félisten
válasz
spammer #8942 üzenetére
Van egy checkboxod, pl ez:
<input type="checkbox" name="hirlevel" value="igen" />Amikor feldobozod akkor meg:
isset($_POST['hirlevel']) ? $hirlevel = 'igen' : $hirlevel = 'nem';
//vagy
if(isset($_POST['hirlevel'])) { $hirlevel = 'igen';} else { $hirlevel='nem';}Majd a "nagyok" megmondják, hogy melyik a jobb.
-
sekli
addikt
válasz
spammer #8624 üzenetére
Értem én, nem kell módosítani a meglévő oldalt, kb annyi kell, hogy a html file-t átnevezed php-ra, az elejére írsz két sort, ami a CSV-t feldolgozza monjuk egy tömbbe ($termek[] )utána pedig mindenhol ahol valami ár van azt kicseréled:
tegyük fel, hogy ez van:
<tr><td>Kicsi piros játékautó</td><td>2000Ft + ÁFA</td></tr>
kicseréled erre:
<tr><td>Kicsi piros játékautó</td><td><?php echo $termek['22'];?></td></tr>
ennél egyszerűbbet nem tudok neked mondani.
-
sekli
addikt
válasz
spammer #8622 üzenetére
A CSV azért jóval egyszerűbb, mint az excel. Ha már ilyen elavult megoldást választasz, akkor írj egy php-szkriptet, ami generálja a statikus html-t a CSV-ből, amit soronként beolvasol és minden sorra mondjuk egy explode-ot csinálsz. Máris kiesnek a pontosvesszők...
Így minden árváltozással először felülírod a CSV-t, majd lefuttatod a generáló szkriptet.
-
Tele von Zsinór
őstag
válasz
spammer #8609 üzenetére
Egyszerűbb, ha csinálsz neki egy adminfelületet, terméklistázással és -szerkesztéssel. Az xls olvasása sem túl bonyolult, de jóval több benne a buktató.
Lacces: ez a kód, amit mutattál, működik. A hiba másutt van.
-
DeltaPower
addikt
válasz
spammer #5577 üzenetére
változót megfelelő szűrés nélkül fájlműveletre használni nagyon kockázatos.
a te példádban, megadom a mezőben hogy "../index.php" így szépen be fogja olvasni az index.php-dat.
az alkönyvtár és a txt kiterjesztés használata már egy fokkal jobb, de így is fontos lenne az említett fájlrendszer specifikus karaktereket kiszűrni a változóból. esetleg a lehetséges neveket letárolni egy külön txt-ben, és ha abban nem szerepel a név, akkor el se kezdeni a beolvasást.
Új hozzászólás Aktív témák
Hirdetés
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Dell Inspiron 5406 2-in-1i5-1135G7 16GB DDR4 3200 512GB NVME 14" FHD Érintőkijelző W11Pro
- Eladó MacBook Pro 14" M1 Pro (2021) 16/512 99% akku Makulátlan állapotban!
- Újszeru GIGABYTE G5 - 15.6" FullHD 144Hz - i7-13620H - 48GB - 1TB - RTX 4050 - Win11 - 1,5 év gari
- Bomba ár! Dell Latitude 7480 - i5-6GEN I 8GB I 256GB SSD I 14" FHD Touch I HDMI I Cam I W10 I Gari!
- Xiaomi Redmi Note 11 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! MSI B365M i5 8600 16GB DDR4 512GB SSD RX 5700XT 8GB CM MASTERBOX Q300L Zalman 600W
- BESZÁMÍTÁS! XFX MERC 310 RX 7900 XTX 24GB videokártya garanciával hibátlan működéssel
- 120 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged