Pereiti prie turinio

PHP funkcijos taisymas (pagalba)


Rekomenduojami pranešimai

Sveiki, esu susiduręs su tokiu dalyku: sakykime, registruojantis narys savo slapyvardyje gali naudoti didžiąsias ir mažąsias raides bei skaičius. Užsiregistravęs, į duomenų bazę įrašomas slapyvardis: (pavyzdys: Žaidėjas).

Turiu problemą su slapyvardžio tikrinimu.

Jeigu administratorius siunčiant asmeninę žinutę, įveda žaidėjo slapyvardį (kuriam siunčia) : žaidėjas. Tai į duomenų bazės naują lentelę `pm` yra įrašomas gavėjas: "žaidėjas", nors iš tikrųjų norėta siųsti: Žaidėjas.

Vartotojas (Žaidėjas) atsidaręs puslapį mato, jog yra gavęs žinutę, tačiau negali jos peržiūrėti, nes if funkcija tikrina, ar jam priklauso ši žinutė. Tačiau, kadangi `users` lentelėje yra paimamas slapyvardis Žaidėjas ir lyginamas su `pm` lentelės gavėju žaidėjas, išmeta klaidą, jog jis nėra tas pats asmuo.

$ID = $klase->sk($_GET['ID']);
  $pm = mysql_fetch_assoc(mysql_query("SELECT * FROM pm WHERE id='$ID' "));
  if($pm['gavejas'] != $nick){
     echo 'Tokios žinutės tu negavai!';
}

Šią klaidą meta, nes `pm` lentelėje gavėjas įrašytas: žaidėjas, o `users` lentelėje jo slapyvardis: Žaidėjas

Ko noriu? Noriu paprašyti pagalbos, kaip parašyti funkciją, kad žaidėjas negalėtų išsiųsti asmeninės žinutės žaidėjui, jeigu tinkamai neparašė jo slapyvardžio (su visomis didžiosiomis raidėmis ir kt., nes kiti vartotojai turi didžiąsias raides žodžio viduryje: žAiDėjas)

Dabartinė tikrinama funkcija:

if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE nick='$kam'")) == 0){
         echo 'Tokio žaidėjo nėra!';

PRIMENU! Su šiuo tikrinimu, žaidėjas yra lygus Žaidėjas slapyvardis, nors iš tikrųjų skiriasi pirmosios raidės.

Redagavo Scarletas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tokius dalykus reikia daryti pagal žaidėjų ID numerius, o ne pagal nikus.

Turi omenyje siunčiant žinutę, gavėjas turi būti, jo ID, o ne slapyvardis. Teisingai supratau?

.. Apie tai galvojau, tačiau ar kiekvienas vartotojas bėgs į profilį ir žiūrės, koks gi vartotojo ID, jei paprasčiau atsiminti slapyvardį?

Taip pat įdomu, ar tai įmanoma padaryti, ko prašau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Reikia pradėti nuo duomenų bazės struktūros. Prie pm turi būti laukas user_id o ne gavejas, ir toliau ten kur pas tave if($pm['gavejas'] != $nick){ turėtų būti if($pm['user_id'] != $user_id){ kur $user_id dabartinio prisijungusio vartotojo ID. Nikai reikalingi tik atvaizdavimui žinučių, bet kai patikrinimai vyksta - viskas turi būti pagal ID.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Reikia pradėti nuo duomenų bazės struktūros. Prie pm turi būti laukas user_id o ne gavejas, ir toliau ten kur pas tave if($pm['gavejas'] != $nick){ turėtų būti if($pm['user_id'] != $user_id){ kur $user_id dabartinio prisijungusio vartotojo ID. Nikai reikalingi tik atvaizdavimui žinučių, bet kai patikrinimai vyksta - viskas turi būti pagal ID.

Duomenų bazės lentelėje `pm` ID yra nustatomas pats (eiliškumo tvarka AUTO_INCREMENT).

Struktūra:

id 	what 	  pranesimas 	time 	        gavejas 	        nauj
3451 	admin     Testas	1414930397 	Žaidėjas                -

what - siuntėjas, nauj - ar nauja žinutė.

Todėl, ten dariau tikrinimą pagal gavėją.

Siūlai pagal ID, tai galiu nebent padaryti, kad vietoj gavėjo, atsirastų gavėjo ID, kuris yra `users` duomenų lentelėje.

Tačiau siunčiant žinutę, reikėtų nurodyti vartotojo ID, o ne slapyvardį.

Ar ne taip galvoju pagal tavo parašytą kodą?

P.S Jeigu tik taip darant, tada būtų šaunu, jog lyginimas vyktų pagal ID, kuris būtų įrašytas laukelyje gavėjas. Tačiau prieš siunčiant žinutę, reiktų įrašyti ne vartotojo ID, bet slapyvardį. Ar įmanoma?

 

pabandyk taip:

if(strtolower($pm['gavejas']) != strtolower($nick)){

Ačiū už idėja, tai veikia. Tačiau, jeigu atvaizduočiau iš duomenų bazės įrašytą gavėjo slapyvardį, atvaizduotų: žaidėjas, nors iš tikrūjų jis būtų: Žaidėjas.

Taip pat, dabar įdomu, kaip dar būtų galima padaryti (kalbu apie ReikiaPuslapio siūlymą).

Redagavo Scarletas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesiog daryk taip: kai įrašai vardą, siunti užklausą į mysql, sutikrini ar toks vardas egzistuoja, ir jei atsakymas teigiamas gauni vartotojo ID ir į what įterpi žaidėjo ID, ne vardą. Tada susikuri funkciją tarkim getID(), ją iškvietus būtų gaunamas esamo vartotojo ID. Ir sutikrini ar esamas vartotojo ID atitinka gavėjo (what) id.

Kaip išgauti vartotojo id?

if(mysql_num_row(mysql_query("select * from users where name='$name'")) == 0)
echo "Vartotojo vardas nerastas";
else{
$data = mysql_fetch_array(mysql_query("select * from users where name='$name'"));

$id = $data['id'];
echo "Vartotojas $name buvo rastas, jo ID yra $id";
}

Redagavo donce16
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesiog daryk taip: kai įrašai vardą, siunti užklausą į mysql, sutikrini ar toks vardas egzistuoja, ir jei atsakymas teigiamas gauni vartotojo ID ir į what įterpi žaidėjo ID, ne vardą. Tada susikuri funkciją tarkim getID(), ją iškvietus būtų gaunamas esamo vartotojo ID. Ir sutikrini ar esamas vartotojo ID atitinka gavėjo (what) id.

Kaip išgauti vartotojo id?

if(mysql_num_row(mysql_query("select * from users where name='$name'")) == 0)
echo "Vartotojo vardas nerastas";
else{
$data = mysql_fetch_array(mysql_query("select * from users where name='$name'"));

$id = $data['id'];
echo "Vartotojas $name buvo rastas, jo ID yra $id";
}

Ačiū.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...