Hirdetés
- Bitcoin topic
- DIGI kábel TV
- Ubiquiti hálózati eszközök
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Alulértékelt az NVIDIA, 2035-re elkészülhet a mesterséges szuperintelligencia
- Információbiztonság, kiberbiztonság, adatvédelem
- Windows 11
- DIGI internet
- WLAN, WiFi, vezeték nélküli hálózat
- C# programozás
Új hozzászólás Aktív témák
-
Korcsii
őstag
-
Korcsii
őstag
Legegyszerűbben talán a $_SERVER['HTTP_REFERER'] vizsgálatával, bár az lehet nem mindig hozza azt, amit kéne (böngészőről is függ).
Mondjuk én az ilyen scripteket/gombokat nem szeretem, mert mi van, ha pl egy másik oldalról linkelik? Igaz pont a fenti változó vizsgálatával az is megoldható, de... ott a böngészőn a vissza gomb, szerintem manapság már mindenki tudja használni (lassan az egyetlen gomb lesz a böngészőkben).
-
Tele von Zsinór
őstag
history.length - The length property of the history object returns the number of elements in the history list.
An example to understand the length property of history object:
<script type="text/javascript">
var numberofvisited = history.length;
document.write("The number of pages visited
in this window is" +numberofvisited+ " pages.");
</script> -
Sk8erPeter
nagyúr
Az se rossz, de hogy az URL elmenthető és elküldhető legyen úgy, hogy azt megnyitva eleve növekvő sorrendben jelenjenek meg a dolgok, lehet, hogy ésszerűbb lenne azt is inkább GET metódussal átadni. De nehogy ez alapján tegyél bármit is közvetlenül a lekérdezésbe.
Inkább pl. így nézhet ki egy URL vége:
keres.php?page=2&asc=truePHP-ban pedig:
if( !empty($_GET['asc']) ){
// akkor növekvő sorrendben mutatja a találatokat
}Az empty függvény itt ellenőrzi a változó meglétét is (isset - tehát nem kapsz notice-t, ha a csekkolás után felhasználod a változót), meg azt, hogy az nem üres vagy hamis értékű-e.
Sk8erPeter
-
Sk8erPeter
nagyúr
Pl. úgy megoldható, ha kiegészíted a jelenlegi keresőformodat így:
<form ........>
<div class="form-elements-wrapper">
...................
<label for="price_asc">Rendezés:
<select id="price_asc" name="price_asc">
<option value="true"<?php if(isset($_GET['price_asc']) && $_GET['price_asc'] == 'true'){echo ' selected="selected"';}?>>Növekvő</option>
<option value="false"<?php if(!isset($_GET['price_asc']) || $_GET['price_asc'] == 'false'){echo ' selected="selected"';}?>>Csökkenő</option>
</select>
</label>
....................
</div>
</form>A pontok helyére nyilván helyettesítsd be a saját attribútumaidat, illetve mezőidet.
Sk8erPeter
-
Sk8erPeter
nagyúr
Én is erről a formról beszéltem, amit kitöltenek... Akkor az index.php-n lévő formodat (ahova beírják a keresendő kulcsszót) egészítsd ki azzal, amit mutattam. Aztán a keres.php oldalon elhelyezhetsz még egy linket, ami a $_GET['price_asc'] értékét módosítja, tehát van egy link, ami a jelenlegi keresendő érték+'&price_asc=false' vagy épp true.
Sk8erPeter
-
Sk8erPeter
nagyúr
Ja, már minden világos.
Akkor ez egy jó megoldás lehet (kipróbáltam, műxik):<?php
$_GET_array = $_GET;
$_GET_array['price_asc'] = 'true';
$path_ascending_for_markup = $_SERVER['SCRIPT_NAME'].'?'.http_build_query($_GET_array, '', '&');
$_GET_array['price_asc'] = 'false';
$path_descending_for_markup = $_SERVER['SCRIPT_NAME'].'?'.http_build_query($_GET_array, '', '&');
?>
<div>
<a href="<?php echo $path_ascending_for_markup;?>">Növekvő ↑</a> |
<a href="<?php echo $path_descending_for_markup;?>">Csökkenő ↓</a>
</div>(A $_GET tömböt szándékosan adtam át egy másik változónak, mert közvetlenül módosítani szerintem nem szép (ahogy a $_POST tömböt sem szoktam közvetlenül módosítani).)
Sk8erPeter
-
Sk8erPeter
nagyúr
"Index.php-ben is nyilván van ilyen ciklus"
Szerintem ez a kódod alapján nem annyira nyilvánvaló."Így működik ahogy akarom, felveszi a listába és onnan el lehet küldeni e-mail-ben."
Honnan fogod tudni, MELYIKET kell felvenni a listába?
Hadd "idézzek" a kódodból:if ( $_SESSION['fav_' . $row['id']] == 'false' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='add' value='add' />
</form>";
}
elseif ( $_SESSION['fav_' . $row['id']] == 'true' )
{
echo "<form action='index.php' method='post'>
<input type='submit' name='del' value='del' />
</form>";
}Itt kiraksz egy formot, de magában a formban egy darab azonosítót nem rejtesz el (mondjuk egy hidden inputtal, vagy másképp), így nem tudom, honnan szeded, hogy mondjuk épp az 5-ös azonosítójút szeretném eltárolni a kedvencek közé.
Egyébként itt az if-elseif vizsgálat nem túl ésszerű - inkább azt kéne vizsgálnod, hogy mondjuk true értéke van-e, ha igen, kirakod a törlőformot, KÜLÖNBEN (simán else) a hozzáadó formot.Amúgy ha mutatsz egy hasonló kódot, akkor nem ártana a teljeset, hogy el tudjuk dönteni, valamilyen kód indokolt-e egyáltalán.
Az például nem túl szép megoldás, hogy az ismeretlen eredetű $sum_items mennyiségig végigmész az elemeken, és egyesével, cikluslépésenként kéred le adatbázisból a különböző azonosítójú elemeket.További tipp: ha azt szeretnéd, hogy egy form ugyanoda legyen elküldve, ahol ki is van írva, akkor érdemes az action attribútumot inkább üresen hagyni a formnál (action=""), ez egy valid megoldás, és könnyebben "költöztethető" - tehát ha az index.php helyett megváltoztatod a fájl nevét asdasdasd.php-re, akkor is működni fog.
[ Szerkesztve ]
Sk8erPeter
-
modder
aktív tag
Itt kiraksz egy formot, de magában a formban egy darab azonosítót nem rejtesz el (mondjuk egy hidden inputtal, vagy másképp), így nem tudom, honnan szeded, hogy mondjuk épp az 5-ös azonosítójút szeretném eltárolni a kedvencek közé.
De ebből még mindig nem tudod szerver oldalon, hogy melyik form lett elküldve, melyik azonosítójú elemet akarod betenni favoritba. Az eddigi kódrészletek alapján így néz ki
//pszeudo
for( $row in $rows){
if( $_POST['add'])
$_SESSION['fav_' . $row['id']] = 'true';
}mivel nincsen semmilyen más favorit azonosító, amit elküldesz a formból a szervernek, nem tudom, honnan kéne tudni szerver oldalon, hogy arra az egy bizonyos favorit elemre vonatkozik a hozzáadás
-
cAby
tag
Ez a teljes kód, ami ide tartozik:
index.php
<?php
session_start();
?>
<?php
$sql = "SELECT * FROM items WHERE sitelink = '" . $site_link . "'"; /* $site_link = lekérem az oldal címét, majd olyan formában ahogy nekem kell átadom ennek a változónak*/
$sql_v = mysql_query($sql);
while($row = mysql_fetch_assoc($sql_v))
{
if ( $_SESSION['fav' . $row['id']] == '' )
{
$_SESSION['fav' . $row['id']] = 'false';
}
if ( $_POST['add'] )
{
$_SESSION['fav' . $row['id']] = 'true';
}
if ( $_POST['del'] )
{
$_SESSION['fav' . $row['id']] = 'false';
}
if ( $_SESSION['fav' . $row['id']] == 'false' )
{
echo "<form action='' method='post'>
<input class='fav_false' type='submit' name='add' value=' ' />" . " " . $row['item_name'] . "
</form>";
}
elseif ( $_SESSION['fav' . $row['id']] == 'true' )
{
echo "<form action='' method='post'>
<input class='fav_true' type='submit' name='del' value=' ' />" . " " . $row['item_name'] . "
</form>";
}
}
?>fav.php
<?php
session_start();
?>
<?php
include('sql_connect.php');
$sql_count = "SELECT count(id) FROM items";
$sql_count_result = mysql_query($sql_count);
$row_count_items = mysql_fetch_row($sql_count_result);
$sum_items = $row_count_items[0];
for ($i = 1; $i <= $osszes_szallas; $i++)
{
if ( $_SESSION['fav_' . $i] == 'true' )
{
$sql = "SELECT * FROM items WHERE id='" . $i . "'";
$sql_v = mysql_query($sql);
while($row = mysql_fetch_assoc($sql_v))
{
echo $row['item_name'];
}
}
}
?>Nekem ezzel működik. De már kezdem azt hinni, hogy csak vmi csoda miatt...
-
Sk8erPeter
nagyúr
Basszus, adj már egy értelmezhető nevet is a kedvenceidnek... Pl. az adattábládban a különböző azonosítók mellé vegyél fel még egy mezőt, aminek az a neve, hogy mondjuk "fav_name", vagy hasonló, és aztán lekéréskor pedig írasd ki, hogy melyik azonosítót is adtad hozzá a kedvencekhez. Akkor meglátod, hogy valóban jól működik-e.
Nézd is meg, mit csinálsz, ne csak azt csekkold, hogy egy azonosító a sok közül kedvencek közé lett mentve.
Pl. ha a hozzáadható kedvencek a következők: alma, béka, cékla, dió, eke, és én épp a békát szeretném kedvencek közé menteni, akkor nem szeretném, ha helyette ekét kapnék az arcomba.Az index.php-det egyébként így kezded:
<?php
session_start();
?>
<?php
$sql = ......
ahelyett, hogy a tökéletesen felesleges záró- és nyitótaget kiszednéd:
<?php
session_start();
$sql = ......Sk8erPeter
-
modder
aktív tag
Lehet, hogy én vagyok a figyelmetlen, és nem veszek észre valamit a kódban, amiből kiderülhetne az, amire kíváncsi vagyok.
menjünk sorba:index.php:
1) végigiterálsz az adatbázisból szedett favoritokon, mindegyikhez tartozik egy session változó, aminek az értéke true vagy false OK
1.1) kiíratod mindegyik favorithoz, hogy
"<form action='' method='post'>
<input class='fav_false' type='submit' name='add' value=' ' />" . " " . $row['item_name'] . "
</form>
...illetve a del párjátattól függően, hogy a sessionváltozóban true vagy false van-e OK
1.2) mindegyik favoritnál megnézed, hogy $_POST['add'] vagy $_POST['del'] kérés jött-e a fönti formból. NEM OK --> Honnan látod szerver oldalon, hogy az add vagy a del melyik favorit elemre vonatkozik? Hogy jobban megértsd, és nekem is választ tudj adni a kérdésemre, elmondom, hogy szerintem a következőképpen működik az index.php: add vagy del változó megjelenése esetén az összes favorit elemre beállítja a true-t vagy false-t. -
Sk8erPeter
nagyúr
Na, akkor most kezdd elölről, egy másik sessionnel. Küldj rá egy session_destroy-t, majd kezdd elölről a folyamatot.
Nagyon nagy csoda lenne valóban, ha a PHP csak úgy magától kitalálná, hogy te melyik azonosítójú elemet is szeretted volna kedvencek közé menteni, mivel szerveroldalon a form elküldése után csak annyi látszik, hogy létezik mondjuk a $_POST['add'], vagy épp a $_POST['del'], tehát megnyomtad a hozzáadó gombot, vagy megnyomtad a törlő gombot, de annak SEMMI nyoma nincs, hogy te most melyik azonosítóhoz tartozó hozzáadó-törlő gombot nyomtad meg. Mégis honnan a büdös francból kellene látnia a szerveroldalnak, hogy mi a szándékod?A CIKLUSON BELÜL van egy ilyen részed:
if ( $_POST['add'] )
{
$_SESSION['fav' . $row['id']] = 'true';
}
if ( $_POST['del'] )
{
$_SESSION['fav' . $row['id']] = 'false';
}Ergo az $sql = "SELECT * FROM items WHERE sitelink = '" . $site_link . "'"; query-d összes eredményén végigrohangászol, majd ha épp létezik szerveroldalon a $_POST['add'] vagy a $_POST['del'], akkor az aktuális cikluslépés sorazonosítójához tartozó sessionváltozóba eltárolod a "true" értéket.
Így ha egyszer megnyomtad azt a szaros gombot, akkor elméletben mindegyik adatbázisban megtalált azonosítóhoz tartozó session-változónál true lesz az érték.De lassan kifogyunk a magyarázat-kombinációkból.
Szerk.:
... és ahogy látom, modder nagyjából ugyanazt írta le közel egyidőben, mint én, más szavakkal.Egyébként könnyebb lenne látnod az egész eredményét, ha mondjuk adott felhasználóhoz nemcsak sessionbe mentenéd a kedvenceit, hanem úgy, ahogy van is értelme, adatbázisba. Mert így csak a munkamenet erejéig fognak élni a kedvencek.
[ Szerkesztve ]
Sk8erPeter
-
modder
aktív tag
Hála a jó istennek
Annyit kell csinálnod, hgoy a formba teszel egy hidden mezőt aminek a neve pl. fav_id, értéke értelemszerűen a favoritod id-ja.
Amikor pedig megnézed, hogy van-e del vagy add, akkor azt is megvizsgálod a ciklusban, hogy a fav_id megegyezik-e az aktuális iterációban vizsgált favoritoddal.Egyébként nem is értem, hogy ez a hiba nálad miért nem jelentkezett. Gondolom volt egyetlen favoritod, és örültél, hogy arra megy
-
Sk8erPeter
nagyúr
Igen, AJAX-szal.
Persze lehet gányolni is, pl. úgy, hogy egyes bekezdéseknek id-t adsz, majd megoldod, hogy odaugorjon a feldolgozást követően a böngésző, ahogy itt ebben a példában ugrabugrál a linkekre kattintva: [link], formhoz úgy lehet megoldani, ha pl. ha a hash-sel kiegészített cím van az action attribútumban.
Pl. action="test_jump.php?#blabla"Sk8erPeter
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest