Update pomoću hiperlinka

Želio bih omogućiti svojim primateljima newslettera ocjenjivanje pa molim pomoć.

Imam u bazi tablicu koja ima 4 kolumne (id, datum, ocjena, e-mail).

U “index.php” u kojoj se nalaze linkovi za ocjene izgleda ovako:

1
2

E, sad ne znam koju funkciju koristiti u file-u “update.php” i kako izvesti kada se klikne na jedan od gore dva linkova da se u bazi tj. tablici zapiše da je određena e-mail adresa dala jednu od ponuđenih ocjena. Da li bi bila dobra koristiti UPDATE?

Samo koristis INSERT.

Ima li kakva skripta sa primjerom ili neki tutorijal sa primjerom. Hvala.

Najjednostavnije:

[php]<?php

// update.php

function is_valid_email($email)
{
// nades na netu
}

/*$ocjene = array();

for ($n = 1; $n <= 5; $n++)
{
$ocjene[] = $n;
}*/

if (array_key_exists(‘ocjena’, $_GET) and is_numeric($_GET[‘ocjena’]) /and in_array($_GET[‘ocjena’], $ocjene)/)
{
if (array_key_exists(‘email’, $_GET) and is_valid_email($_GET[‘email’]))
{
$datum = time(); // ili drukciji format datuma, kako god zelis

    mysql_query('INSERT INTO tablica (ocjena, datum, email) VALUES ("' . $_GET['ocjena'] . '", "' . $datum . '", "' . $_GET['email'] . '"') or die(mysql_error());
}

}

[/php]

Pokušavam ali nikako da se išta zapiše u tablicu.

Tablica u bazi mi izgleda ovako:

index.php izgleda ovako:

update.php izgleda ovako:

Nema nikakvog errora pa ne znam gdje griješim. Hvala na pomoći.

Ne može ti email biti int :smiley: Pogledaj šta sam napisao u funkciji is_valid_email :wink: Možeš to i obrisati da nepregledava je li valjani e-mail. :slight_smile:

A ne valja vam skripta stavi ocjena=25 i ocijeni te sa ocjenom 25 :frowning:

To mi se ne sviđa.

Bez konekcije na bazu:

Sadržaj index.php mi izgleda ovako:

Početak update.php datoteke:

tvoj (eke777) prijedlog koda sa izmjenjenim nazivom tablice

i kraj update.php datoteke:

Kada kliknem na jedan od linkova iz index.php dobijem poruku:
No database selected

p.s. više puta sam provjerio naziv baze i tablice te password

Ne moraš koristiti mysql_close($con) , jer se konekcija automatski zatvara.

Dio za spajanej na mysql nije potpun. Pogledaj kako se to radi na :
http://hr.php.net/manual/en/function.mysql-select-db.php

a di je mysql_select_database??? radi sasvim i moj kod, ali nisi se spojio na bazu, nego samo na server

Nema potrebe za deset upitnika, očito je da je čovjek početnik. I tvoj kod pati od ozbiljnih propusta:

  1. Potrebna je provjera ocjene (int, 1-5)
  2. Nikad, nikad, pa ni tada nemoj u sql stavljati direktno $_POST, $_GET, itd… varijable

Kod razvoja aplikacija uvjek na umu moraš imati dvije pretpostavke:
a) Korisnik je smotan i priglup: upisati će krivi tip podataka, kliknuti će gdje ne bi trebao i raditi će cijeli niz nelogičnih radnji - u tome ga moramo spriječiti, implementirati sigurni fallback i pristojnom porukom ga upozoriti.
b) Korisnik je zapravo haker (ili mu je oteta sesija, svejedno) - čak i kada je riječ o registriranim i provjerenim korisnicima treba se držati sigurnosnih standarda.

Zahvalio bih se svima na pomoći. Skriptica super radi.

Da li postoji kakva javascript ili Ajax skripta koja bi mi nakon klika na jedna od linkova sa index.php
npr. 5 ispisala tekst “Hvala na glasovanju!” i nakon 2 sekunde poruka nestane.

Hvala sve super radi.

Ako se više puta klikne na link, npr: 1

U bazi se zapiše onoliko zapisa koliko je puta kliknuto, svaki zapis sa svojim vremenom i datumom. Da li je moguće koristiti neku naredbu da se za određenu mail adresu zapisuje samo zadnja ocjena?


Taj kod će proveriti da li email adresa već postoji. Ako postoji, izbrisaće sve prethodne unose sa tim emailom i upisati novi.

Taj kod će proveriti da li email adresa već postoji. Ako postoji, izbrisaće sve prethodne unose sa tim emailom i upisati novi.

Neloše.

a) Ipak još treba provjeriti da li je ocjena integer jer kroz ovaj kod prolazi i float (npr. 0.2e1), ali i stringovi (npr. “2abcd”, php je weakly typed jezik). Još jedan hint: uvjek je bolje provjeriti što se nalazi u varijabli umjesto što se ne nalazi.

b) NOW() dođe bez navodnika

Super. Hvala punooo!

[quote=“eke777”]Neloše.

a) Ipak još treba provjeriti da li je ocjena integer jer kroz ovaj kod prolazi i float (npr. 0.2e1), ali i stringovi (npr. “2abcd”, php je weakly typed jezik). Još jedan hint: uvjek je bolje provjeriti što se nalazi u varijabli umjesto što se ne nalazi.

b) NOW() dođe bez navodnika[/quote]

a) pošto polje ima oznaku “int”, upisaće samo 2, bez ostalih znakova.
Isto važi i za float, s tim da ako upišeš 2.5 ili više, upisaće se 3, a ako upišeš manje upisaće 2. To ionako nije veliki problem, ali nisam baš mislio na to jer sam na brzinu napisao kod :slight_smile:

b) obično datum upisujem kao timestamp jer mi daje mogućnost da ga kasnije ispišem u bilo kom formatu, tako da nisam imao potrebe da koristim ništa drugo. NOW() funkciju sam video u nečijem kodu u ovoj temi.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja