Pereiti prie turinio

PHP paspaudus mygtuką gaunamas rezultatas


Rekomenduojami pranešimai

Taigi. Pradėjau mokytis PHP. Perskaičiau gidus W3School. Susikūriau login,reg sistemą. Viskas aišku, bet iškilo toks klausimas.

 

Tiesiog nesuprantu nuo ko pradėti, norint sukurti tokią funkciją: Paspaudus ant nuorodos duotu kokį rezultatą.

 

Plačiau: Yra nuorodą, tarkim "Gauti taškų". Paspaudus ją prisideda 1 taškas.

 

Suprantu, jog reikia sukurti naują lentelę duomenų bazėje. Sukuriau "taskai" int(11).

 

Kaip toliau man elgtis?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

<a href="index.php?veiksmas=prideti_taskus">Gauti 1 tašką</a>

 

//Patikrinam ar tikrai nuoroda yra veiksmas=prideti_taskus
if($_GET['veiksmas'] = 'prideti_taskus'){
//Parašom sql užklausą
$sqlu = "INSERT INTO lentele (taskai) VALUES ('1')";
//Įvykdom sql užklausą
mysql_query($sqlu);
//Parašom, kad taškai pridėti
echo 'Taškai pridėti';
}

 

Toliau gali pridėti patikrinimus, jei lentelėje nėra šio varotojo, tada darai inser into, jei vartotojas rastas, išsitrauki tašku row, ir prie jo pridedi +1, tuomet vygdai UPDATE, tokie paprasti dalykai tame w3 yra parašyti.

Redagavo EdvinasJ
Nuoroda į pranešimą
Dalintis kituose puslapiuose

<a href="index.php?veiksmas=prideti_taskus">Gauti 1 tašką</a>

 

//Patikrinam ar tikrai nuoroda yra veiksmas=prideti_taskus
if($_GET['veiksmas'] = 'prideti_taskus'){
//Parašom sql užklausą
$sqlu = "INSERT INTO lentele (taskai) VALUES ('1') WHERE vartotojas='vartotojas'";
//Įvykdom sql užklausą
mysql_query($sqlu);
//Parašom, kad taškai pridėti
echo 'Taškai pridėti';
}

 

Toliau gali pridėti patikrinimus, jei lentelėje nėra šio varotojo, tada darai inser into, jei vartotojas rastas, išsitrauki tašku row, ir prie jo pridedi +1, tuomet vygdai UPDATE, tokie paprasti dalykai tame w3 yra parašyti.

 

Insertas su where nesidaro ir == turi būt, o ne viena lygybė. Ir nereik tikrinimų

UPDATE lentele
SET taskai=taskai+1
WHERE vartotojas='vartotojas'

 

Tikrinimą nebent dėl saugumo reik daryt.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

//Patikrinam ar tikrai nuoroda yra veiksmas=prideti_taskus

if($_GET['veiksmas'] = 'prideti_taskus'){

 

 

//Parašom sql užklausą

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1') WHERE vartotojas='vartotojas'";

Vietoj 'lentele' įrašau savo 'users' kategorijos pavadinimą. Vietoj 'taskai' įrašau lentelės pavadinimą 'taskai', kuris yra 'users' kategorijoje. Toliau 'vartotojas='vartotojas'' keičiu į 'username='username'.

 

//Įvykdom sql užklausą

mysql_query($sqlu);

Įdedu savo include "db_connect.php";

 

//Parašom, kad taškai pridėti

echo 'Taškai pridėti';

}

O šitą meta ir meta vis ekrane.

 

Paspaudus ant "Gauti taškų" išmeta į index puslapį ir nieko neprideda. Turbūt kažką ne taip darau.

 

Nuotraukos:

SQL bazė

Kodas

 

UPDATE lentele
SET taskai=taskai+1
WHERE vartotojas='vartotojas'

Išbandžiau. Neveikia.

Redagavo Kerisimo
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Insertas su where nesidaro ir == turi būt, o ne viena lygybė. Ir nereik tikrinimų

UPDATE lentele
SET taskai=taskai+1
WHERE vartotojas='vartotojas'

 

Tikrinimą nebent dėl saugumo reik daryt.

 

Pamiršau nutrynti, update dariau, bet poto pamačiau kad ne tapati table kur vartotojai :)

 

O tikrinti reikia, nes vėliau nemokės net menkiausių apsaugų padayt

 

//Patikrinam ar tikrai nuoroda yra veiksmas=prideti_taskus

if($_GET['veiksmas'] = 'prideti_taskus'){

 

 

//Parašom sql užklausą

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1') WHERE vartotojas='vartotojas'";

Vietoj 'lentele' įrašau savo 'users' kategorijos pavadinimą. Vietoj 'taskai' įrašau lentelės pavadinimą 'taskai', kuris yra 'users' kategorijoje. Toliau 'vartotojas='vartotojas'' keičiu į 'username='username'.

 

//Įvykdom sql užklausą

mysql_query($sqlu);

Įdedu savo include "db_connect.php";

 

//Parašom, kad taškai pridėti

echo 'Taškai pridėti';

}

O šitą meta ir meta vis ekrane.

 

Paspaudus ant "Gauti taškų" išmeta į index puslapį ir nieko neprideda. Turbūt kažką ne taip darau.

 

Nuotraukos:

SQL bazė

Kodas

 

UPDATE lentele
SET taskai=taskai+1
WHERE vartotojas='vartotojas'

Išbandžiau. Neveikia.

 

Šita:

 

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1') WHERE vartotojas='vartotojas'";

 

pakeisk į:

 

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1')";

Redagavo EdvinasJ
Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

Šita:

 

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1') WHERE vartotojas='vartotojas'";

 

pakeisk į:

 

$sqlu = "INSERT INTO lentele (taskai) VALUES ('1')";

 

Turbūt nepastebėjai duomenų bazės struktūros:

http://www.part.lt/perziura/4efd9f3df7171fd70d84b36a44da3465869.png

 

Nereik insertint nieko. Reik nustatyt default value 0, o poto pridėjinėt.

 

Vartotojas jau būna insertintas, pagal defaultą jo taškų skaičius yra 0 (turėtų būt). Kai paspaudžia gauti taškų atsinaujina to vartotojo eilutės "taškai" stulpelis.

 

Dėl to būtent reikia naudot UPDATE, o ne INSERT.

 

Temos autoriui patarčiau peržiūrėt visą:

http://goo.gl/UQafr

 

Mokėsi daugiau nei pats perskaitęs ir nesupratęs ką perskaitęs.

Redagavo sanis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Reikėtų pradėti nuo to, jog W3 Schools yra blogiausias dalykas internete, todėl daugiau į jį nebeeik. Pilnas senos ir klaidingos informacijos.

 

Pirma klaida lyginime, jei tu lygini o ne priskiri reikšmes, reikia naudoti == arba === operatorių, o ne =.

if ($_GET['veiksmas'] == 'prideti_taskus') {
   ...
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasiskaičiau ir išsprendžiau.

 

<?php
$con=mysqli_connect("localhost","root","","qwe");
// Check connection
if (mysqli_connect_errno())
 {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
//Patikrinam ar tikrai nuoroda yra action=prideti_taska
if ($_GET['action'] == 'prideti_taska') 
{
//Parašom sql užklausą
mysqli_query($con,"UPDATE users 
SET taskai=taskai+1
WHERE username='veikejas'");
mysqli_close($con);
}
echo "<br/><a href=\"sql.php?action=prideti_taska\">Spausti</a>";
?>

 

Pagaliau prisidėjo tas nelemtas taškas. O norint, kad kai taškai būtų pridedami ne tik man, reikia žaisti su session?

 

Ir dar vienas klausimas. Kaip paslėpti tą nuorodą "Spausti", jeigu tarkim noriu, kad gautu po vieną tašką ir viskas?

Redagavo Kerisimo
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pagaliau prisidėjo tas nelemtas taškas. O norint, kad kai taškai būtų pridedami ne tik man, reikia žaisti su session?

 

Ir dar vienas klausimas. Kaip paslėpti tą nuorodą "Spausti", jeigu tarkim noriu, kad gautu po vieną tašką ir viskas?

 

Gali sesijom, gali cookiais, kaip tik nori. Vietoj 'veikejas' pakeisi į sesijos ar cookio reikšmę (nepamiršk saugumo, reik patikrinimų ar escapint, kad sql injectų nepadarytų taip).

 

Kad gautų po tašką, dar vieną stulpelį pridėk "duota" ir nustatyk default'ą į false. kai duodi tašką updatink lentelę ir tą lauką į true.

 

UPDATE users 
SET taskai=taskai+1, duota=true
WHERE username='veikejas'

 

O taškų davimo linką paslėpk nuskaitęs duomenis iš duombazės su SELECT, jei vatotojo laukelis "duota" yra lygus true.

 

TAČIAU. NEPAMIRŠK daryt daug patikrinimų: ar toks vartotojas pagal sesijas/cookius yra duomenų bazėj, ar jau duota ar ne ir panašiai. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdėjau kodą į login,reg tokią mažą sistemėlę. Ir paspaudus "Gauti tašką" meta šį errorą.

 

Warning: mysql_query() expects parameter 1 to be string, resource given in C:\xampp\htdocs\home.php on line 12

 

Kaip suprantu mysql pjaunasi su mysqli? Nes duomenų bazę jungiau su mysql, o čia rašau mysqli.

 

Kaip tai ištaisyti? Nes jeigu tiesiog ištaisau mysqli

mysqli_query($con,"UPDATE users 

į mysql vistiek tas pats erroras.

 

Home.php

<?php 

session_start();
include "db_connect.php";

//Patikrinam ar tikrai nuoroda yra action=prideti_taska
if ($_GET['action'] == 'prideti_taska') 
{
//Parašom sql užklausą
mysql_query($con,"UPDATE users 
SET taskai=taskai+1 , duota=true
WHERE username='".$_SESSION['username']."'");

echo" Taskas pridetas";
}

?>

 

 

 

db_connect.php

<?php
//db_connect.php
$con = mysql_connect(localhost,"root","") or die(mysql_error());
$db = mysql_select_db("qwe",$con);

function protect($string)
{
$string = mysql_real_escape_string($string);
return $string;
}
?>

Nuoroda į pranešimą
Dalintis kituose puslapiuose


  1.  
  2. Mokykis tvarkingai.
  3. Naudok mysqli ar PDO, nesimėtyk atgal prie ext/mysql
  4. Pirmas argumentas turi būti užklausa, ne connectionas.

Perrašiau prisijungimus į:

$con = new mysqli("localhost", "root", "", "qwe");
if ($con->connect_errno) {
   echo "Failed to connect to MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
}

 

ir nebemeta erroro. 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ą...