jQuery topic - Szoftverfejlesztés fórum

üzenetek

hozzászólások


biker
(nagyúr)
Blog

focusout tökéletesen működik :)


Randomized
(csendes tag)

Sziasztok!
Egy kis segítségre lenne szükségem jQuery-AJAX-PHP kombinációban, remélem jó helyen járok. :D
Szóval fejlesztek egy weboldalt, minden okénak tűnt. Windows-on tesztelem XAMPP programcsomaggal, localhost-on szoktam tesztelni. Megpróbáltam havernak megmutatni, hogy tesztelje le a dolgokat, hátha talál benne hibát, de neki nem volt jó egy része (mindjárt írok részleteket is). Szóval megpróbáltam én is, nálam jó volt (megint csak localhoston próbáltam). Utána megpróbáltam én is úgy, hogy beírtam az IP-címemet, azzal nekem sem volt jó.

Egy olyan dolgot akartam megcsinálni, hogy például regisztrációkor a script elküldi a form tartalmát egy PHP-nak, ami feldolgozza az adatokat, és értesíti a felhasználót az oldal újratöltése nélkül az eredményről.
Bejelentkezésnél is hasonló a helyzet. Kiírja, hogy sikerült bejelentkezni, de mégsem működik a dolog.

$_SESSION-al oldanám meg, ha ez számít.

Tehát ha "localhost" címen próbálkozok, akkor jó, de ha bármilyen IP-címen próbálkozok (pl. 127.0.0.1, 192.168.1.109) akkor a PHP-tól megkapja a választ, a php temp mappájában látszik is, hogy létrehozza a session adatait tároló fájlt, megnyitom és valóban benne vannak, a dolgok, amiknek ott kell lenniük.

Remélem valaki tudja, hogy miért csak akkor működik, ha localhoston nyitom meg az oldalt. Előre is köszi a segítséget :)


martonx
(veterán)

Remélem érzed, hogy ezt a kérdést a PHP topikban kellene feltenned?


Randomized
(csendes tag)

Remélem tudsz olvasni, és észre vetted, hogy azzal kezdtem, hogy "emélem jó helyen járok." :)
Egyébként azért gondoltam, hogy ide tartozik, mert a PHP résszel nincs gondom, a jQuery-ben nem vagyok biztos. De a kedvedért átírom oda is. :)


Sk8erPeter
(nagyúr)

Az a baj, hogy a hibaleírásból még az sem derül ki egyértelműen, hogy melyik "szereplő" lehet a probléma okozója, mert konkrétabb kódrészletek vagy pontosabb körülírás nélkül nem lehet kitalálni. Némi kód előrébb vihet.


Randomized
(csendes tag)

Script:
$(document).ready(function(){
var alert = $('#alert');

$("form:not('#regis'):not('#ranglista')").submit(function(e){
e.preventDefault();
var triggeredform = $(this);
$.ajax({
type: 'POST',
url: pageurl+$(this).attr('action'),
data: $(this).serialize(),
dataType: 'json',
encode: true
})
.done(function(data){
console.log(data);

if(!data.success){
//Ha nem sikerül
var errormessage = '';
$.each(data.errors,function(index,value){
errormessage = errormessage + value + '<br/>';
})
alert.css("background","#990000").html(errormessage).fadeTo(500,0.8).delay(3000).fadeOut();
}
else
{
//Ha sikerül
alert.css("background","#00FF00").html(data.message).fadeIn().delay(2500).fadeOut();
console.log(this);
// triggeredform.fadeOut();
if(data.reload == true)
{
window.setTimeout(function(){
window.location.href = pageurl+data.tourl;
},data.timeout * 1000)
}
}



}).fail(function(data){
alert.css("background","#FF0000").html("Szerver oldali hiba").fadeTo(500,0.8).delay(5000).fadeOut();
});

});


});

Feldolgozó PHP:
<?php

error_reporting(0);

require("config.php");
require("functions.php");
session_name("MyHomePage");
session_start();
$conn = mysqli_connect($conf_host, $conf_user, $conf_password);
$errors = array();
$data = array();

if(empty($_POST['userid']))
{
$errors['user'] = 'Nem adtál meg felhasználó nevet!';
}

if(empty($_POST['userpass']))
{
$errors['pass'] = 'Nem adtál meg jelszót!';
}

if(!isset($errors['user']) && !isset($errors['userpass']))
{
$user = mysqli_real_escape_string($conn,$_POST['userid']);
$pass = mysqli_real_escape_string($conn,$_POST['userpass']);
$query = mysqli_query($conn,"SELECT * FROM hp.users WHERE name LIKE '$user' AND password=PASSWORD('$pass') LIMIT 1");
if(mysqli_num_rows($query) != 1)
{
$errors['login'] = 'Hibás felhasználó név vagy jelszó!';
}
}

if(!empty($errors))
{
$data['success'] = false;
$data['errors'] = $errors;
}
else
{
$userinfo = mysqli_fetch_object($query);
$_SESSION['user_id'] = $userinfo->id;
$_SESSION['user_name'] = $userinfo->name;
$_SESSION['user_rank'] = $userinfo->rank;
$data['success'] = true;
$data['message'] = "Sikeres bejelentkezés!";
$data['reload'] = true;
$data['tourl'] = "/?oldal=felhasznalo";
$data['timeout'] = 0.5;

}

echo json_encode($data);
?>


martonx
(veterán)

Nos ez esetben nincs más dolgod, mint debugolva megnézned, hogy mi történik / nem történik meg. PHP-t xdebug-al tudod debugolni, javascriptet meg a kedvenc böngésződdel.


Sk8erPeter
(nagyúr)

Ha jól értettem, valójában szerveroldalon az látszik, hogy tényleg sikeres a belépés - vagy mégsem? -, csak kliensoldalon nem gömbölyű valami, de ezt nem fejtetted ki - igazából a lényeget -, hogy mi is nem működik egész pontosan. Maga az oldal újratöltése nem történik meg? Vagy újratöltés után mégsincs bejelentkezve már a felhasználó, pedig korábban úgy tűnt, hogy be van jelentkezve - tehát mégis szerveroldali a para? Vagy kliensoldalon nem látszik valami úgy, ahogy látszania kellene? Vagy mi (nem) történik?

Ezt az alábbit még azelőtt írtam, hogy visszaolvastam volna, és láttam volna, hogy elméletileg be van jelentkezve a júzer (de lehet, hogy csak úgy tűnik, pedig igazából nem), végül is a benne írtak állnak továbbra is, de mivel itt OFF, meg valószínűleg nem is itt lesz a megoldás, ezért OFF-ba is raktam:
A PHP-kódnál sokat segít hibafelderítés esetén, ha nem nyomod el a hibakijelzést az error_reporting 0-ra állításával (persze kizárólag fejlesztői, nem production környezetben).
Egyébként a potenciális hibák lekezelése finoman szólva nem túl alapos, pl. csatlakozás után egyáltalán nem ellenőrzöd, hogy minden rendben ment-e az adatbázissal való kapcsolat létrehozása során. A mysqli_query visszatérési értékét is érdemes lenne leellenőrizni, mielőtt ráhívsz a visszaadott eredményre egy mysqli_num_rows-t - igaz, ennek elméletileg nullát kellene visszaadnia, ha már eleve előtte a query sem futott le helyesen.
A mysqli_real_escape_string-es bohóckodás nagyon rossz és rég elavult gyakorlat, helyette parametrizálni kell a query-t (lásd itt), és a nyelvi eszközök pedig elintézik, hogy az átpasszolt paraméterek le legyenek kezelve (rosszindulatúság és egyéb szempontokkal kapcsolatban).
Másik hiba: beállítod az $errors['pass']-t, és aztán később ellenőrzöd, hogy !isset($errors['userpass'])-t. :) (másik kulcs, pass vs. userpass... :) ) Egyébként sem sok értelmét látom, hogy más kulcsot használsz fel az $errors tömbödben, mint az eredetileg klienstől (a formban az adott mező name attribútuma formájában) kapott kulcsoknál.
Egyébként mysqli-nél szerintem nagyon csúnya a procedurális formula, az objektumorientált API nem véletlenül áll rendelkezésre, de persze ízlések és pofonok.


trisztan94
(őstag)
Blog

Hali,

Van egy <span> elemem aminek a tartalma nagyon sok külböző helyről tud módosulni. Ahelyett, hogy mindre kötnék egy eseménykezelőt, magát a <span> tartalmát akarom folyamatosan nézni, és amennyiben módosul a szöveg benne, lefuttatni egy függvényt.

Próbáltam:

$('span').on('change', fn(e){});
$('span').on('contentchanged', fn(e){});
$('span').on('DOMCharacterDataModified', fn(e){});
$('span').on('DOMSubtreeModified', fn(e){});

Egyik sem jó.

Valakinek ötlet?

:R

[ Szerkesztve ]


trisztan94
(őstag)
Blog

Pont ez kellett, koszi! :R


PowerBuldog
(veterán)
Blog

Sziasztok!

Írtam egy rövid kódot:

jQuery(document).ready(function($){
$('input[name="addon-1131-csomagolasszallitas-1[]"]').prop('checked', true).attr("disabled", true);;
});

Szépen működik, kipipálja a szállítási díjat. Azonban az a gondom, hogy amikor a terméket a kosárba rakom nem számolja fel a kötelező szállítási díjat. Azonban ha ugyan ezt a checkboxot kézzel pipálom ki akkor jó.
Mi lehet a baja?


DNReNTi
(őstag)

Tippem:
A checkbox kattintásra van event listener, ami beállít egy változót, hogy számolja vagy ne a szállítási ktg-et, de ez nem fut le, ha te prop()-al beállítod a checkbox állapotát. Megoldás ha a prop() mellett, beállítod ezt a változót ilyenkor is, vagy a másik: triggert() használsz. Remélem beletrafáltam.


PowerBuldog
(veterán)
Blog

Sajnos úgy tűnik se a trigger('change') se a trigger('click') nem hoz változást, nem adódik hozzá a végösszeghez ebben a formában


disy68
(aktív tag)

Szerintem az, hogy disabled-re állítod. Ha később a form a .serialize() -zal lesz kiértékelve, az kihagyja a disabled inputokat.


PowerBuldog
(veterán)
Blog

azzal semmi baj nem volt, kellett bele egy ilyen sor
$('.cart').trigger('woocommerce-product-addons-update');

és már megy is :)


PowerBuldog
(veterán)
Blog

üdv

adott lenne 2 legördülő menü.
mindkettőben ugyan azok az értékek vannak
lehetséges-e, hogy ha beállítom az elsőt, akkor a második értéke is ugyan azt felveszi?


martonx
(veterán)

persze :)


PowerBuldog
(veterán)
Blog

és esetleg tudsz ebben segíteni is? :)


martonx
(veterán)

Ha csinálsz egy konkrét jsfiddle példát (mondjuk a hülye kérdésre hülye választ ezzel alapból megspórolhattad volna), akkor én vagy bárki más szívesen segít ebben.

üzenetek