|
[ Iwan87 @ 19.12.2009. 19:21 ] @
| Pozdrav svima,
imam problem sa upisom u bazu...
Naime, napravio sam skiriptu za komentarisanje, kad kliknem na upis, on te podatke upise i izbaci poruku da su podaci uspesno poslati, ali kad odem na refresh, on mi te podatke ponovo posalje u bazu... Tako da se u bazi pojavljuju 2x isti text... Moze pomoc kako da resim ovaj problem? |
[ Nikola Poša @ 19.12.2009. 20:31 ] @
Misliš na refresh, pa onda na OK, u onom confirm box-u?  To nije do PHP-a, već do same logike rada te tvoje stranice za upis... Ako hoćeš da izbegneš tu situaciju sa refresh-om, jedno od rešenja je da nakon upisa izvršiš redirekciju na tu istu stranicu.
[ Miroslav Ćurčić @ 19.12.2009. 21:27 ] @
U formi ubaci i jedno <input type="hidden"> polje gde staviš slučajan velik broj, i prilikom unosa komentara u bazu ubaci i taj broj.
Pre ubacivanja prvo proveriš dali postoji zapis s tim istim brojem pa ako ima onda preskočiš upisivanje.
[ milorad87 @ 19.12.2009. 21:58 ] @
Mislim da imam resenje za tebe ,na kraj php skripte stavi sl. kod :
Code: echo "<meta http-equiv=Refresh content=4;url=mojastrana.php>";
}
On te automatsk redirektuje, na stranu koju navede, za 4 sekunde.
Pozdrav
[ Iwan87 @ 19.12.2009. 23:14 ] @
Hvala Milorade, probacu sad to. Hvala i svima ostalima na pomoci...
Sad cu probati ovo sa refreshom...
Hteo sam da uradim nesto sa naredbom if, ali mi se ne uklapa u kod...
Skripa od komentara se sastoji od upisa 3 polja, ime, email i komentar, ako nesto od navedenog nije ok, on izbaci upozorenje, u suprotnom izbaci da je poruka uspesno poslata, ali da mora da prodje proveru administratora...
Stranica komentari.php sadrzi izmedju ostalog ovo:
<?
//////// komentar /////////////
$id_stanice="$id"; // Unique file name of the page.
require "komentari/prikaz.php"; // Prikaz komentara
require "komentari/provera.php"; // Provera podataka i upis
///////kraj komentar //////////////
?>
Onda skripta provera.php
<?
@$todo=$_POST['todo'];
if(isset($todo) and $todo=="upisi_komentar"){
$ime=$_POST['ime'];
$ime=mysql_real_escape_string($ime);
$email=$_POST['email'];
$email=mysql_real_escape_string($email);
$komentar=$_POST['komentar'];
$komentar=mysql_real_escape_string($komentar);
$status = "OK";
$msg="";
// ako polja sadrze manje od 3 karaktera
if( strlen($ime) <3 or strlen($ime) > 30){
$msg=$msg."<br>Vaše ime ne sme imati manje od 2, a više od 30 karaktera.<br>";
$status= "NOTOK";}
if( strlen($komentar) <3 ){
$msg=$msg."Vaš komentar mora imati više od 3 karaktera.<br>";
$status= "NOTOK";}
if($status<>"OK"){
echo "<font face='Verdana' size='2' color=red>$msg</font>";
}else{ //ako su svi uslovi ispunjeni, idemo dalje
$datum=date("Y-m-d");
$status='nije_odobreno'; // Upisivanje statusa, da li treba da se odobrava ili ne
$query=mysql_query("insert into komentari(id_stanice,datum,ime,email,komentar,status) values('$id_stanice','$datum','$ime','$email','$komentar','$status')");
echo mysql_error();
echo "<font face='Verdana' size='2' color=green><br>Vaš komentar je upisan ali mora da prodje proveru Administratora!<br></font>";
}
}// Provera
?>
[ milorad87 @ 20.12.2009. 10:02 ] @
Nadam se da sam ti pomogao. 
Pozdrav
[ vatri @ 20.12.2009. 12:42 ] @
Ja bi to uradio sa "session" odnosno sa "cookies". Na taj nacin onemogucujes i spamovanje. Namjestis fino vremenski interval i rjesio si 2 problema :)
[ Iwan87 @ 20.12.2009. 14:47 ] @
Poruke nece biti vidljive dok ih ja ne odobrim iz admin panela, taj sam problem resio... Samo me ovo muci...
[ batika @ 21.12.2009. 07:19 ] @
Pozdrav,
mozes ovo da resis i preko IP adrese - nemoj da dozvoljavas istoj IP adresi upisu u roku od npr. 2 minuta
Ili sto se tice redirekta, ja bi to uradio sa header funkcijom, ali najbolje ti je da u php radis neku proveru. To ti je najsigurnije resenje (mozda captcha).
Mozes da stavis hidden polje i da nakon upisa u bazu to hidden polje popunis - i proveravas da li je vrednost == ''
Pozdrav
[ Man-Wolf @ 21.12.2009. 13:15 ] @
@Iwan87 - A sta tebe konkretno sad muci u onom kodu ? :-) Btw, stavljaj sav kod u "code" tagove, citljivije je dosta :-)
[ Iwan87 @ 21.12.2009. 13:27 ] @
Svaka stranica na sajtu ima ovaj kod za komentarisanje koji kad se upise kupi ID stranice i tako smesta komentar.
Kada neko upise komentar, izlazi mu poruka da je uspesno upisao komentar, ali da mora admin da ga odobri... Kada ode na refresh (dok jos ta poruka stoji) browser izbaci upozorenje (To display this page, Firefox must send information that will repeat any action.....)... Verovatno bih morao nesto preko ajaxa da odradim...
[ Man-Wolf @ 21.12.2009. 13:39 ] @
Kao sto ti pomenuse mnogi, uradi redirekt na tu stranu (najjednostavnije). Odnosno, ono sto ti je @Nikola Posa rekao, prevedeno u kod:
Code:
header("Location: // Stranica gde se nalazi forma");
A sto se tice gresaka, sacuvaj ih u sesiju, pa ih prikazi nakon redirekta :-)
[ milorad87 @ 21.12.2009. 13:42 ] @
Ne znam dal' si probao ono sto sam ti posalo za automatsku redirekciju. No ajde da pojasnim gde da stavis onaj deo koda koji sam ti dao:
Code:
<?
//////// komentar /////////////
$id_stanice="$id"; // Unique file name of the page.
require "komentari/prikaz.php"; // Prikaz komentara
require "komentari/provera.php"; // Provera podataka i upis
///////kraj komentar //////////////
?>
Onda skripta provera.php
<?
@$todo=$_POST['todo'];
if(isset($todo) and $todo=="upisi_komentar"){
$ime=$_POST['ime'];
$ime=mysql_real_escape_string($ime);
$email=$_POST['email'];
$email=mysql_real_escape_string($email);
$komentar=$_POST['komentar'];
$komentar=mysql_real_escape_string($komentar);
$status = "OK";
$msg="";
// ako polja sadrze manje od 3 karaktera
if( strlen($ime) <3 or strlen($ime) > 30){
$msg=$msg."<br>Vaše ime ne sme imati manje od 2, a više od 30 karaktera.<br>";
$status= "NOTOK";}
if( strlen($komentar) <3 ){
$msg=$msg."Vaš komentar mora imati više od 3 karaktera.<br>";
$status= "NOTOK";}
if($status<>"OK"){
echo "<font face='Verdana' size='2' color=red>$msg</font>";
}else{ //ako su svi uslovi ispunjeni, idemo dalje
$datum=date("Y-m-d");
$status='nije_odobreno'; // Upisivanje statusa, da li treba da se odobrava ili ne
$query=mysql_query("insert into komentari(id_stanice,datum,ime,email,komentar,status) values('$id_stanice','$datum','$ime','$email','$komentar','$status')");
echo mysql_error();
echo "<font face='Verdana' size='2' color=green><br>Vaš komentar je upisan ali mora da prodje proveru Administratora!<br></font>";
echo "<meta http-equiv=Refresh content=4;url=index.php>";
}
}// Provera
?>
Dakle kad se prosledi komentar ovaj kode koji je dodat ce automatski ( nakon sto se ispise da je komentar prosledjen ) redirektovani na pocetnu stranu.
Pozdrav :)
[ Iwan87 @ 21.12.2009. 13:51 ] @
Da, Milorade, nisam ti napisao... Radi ovako sa automatskim refreshom... Ali se i dalje javlja problem kad "korisnik" ide na manuelni refresh ,opet izbacuje tu opciju...
I imam jos neki problemcic koji sam sad primetio....
Kada se upisuje kometar u bazu i kada se recimo napise "Da vidimo da l' radi ovako" ili " Ne moz' ", onda pre apostrofa dodaje kosu crtu \, pa ispadne "Da vidimo da \' radi ovako", "Ne mo\' "...
Poludeo sam vise... Kad radim drugima sve ok, a kad radim meni nesto, moraju neke gluposti da 'ebu....
Izvinite na smaranju... 
[ milorad87 @ 21.12.2009. 13:56 ] @
Hah,drago mi je sto sam ti pomogao. 
Znas kako, napisi na strani da je zabranjeno raditi refresh  Salim se naravno, Pa onda stavi da redirektuje za 1 sekund, da ne moze da stigne da ide na refresh 
[ milorad87 @ 21.12.2009. 14:22 ] @
Jel si podesio stranu da bude charset=utf-8"?
Po mom misljenju moze da bude problem oko toga, pa da umesto apostrofa ' stavlja kosu crtu.
P.S. Obicno kad se radi za druge ispadne sve kako treba, a sebi ne mozes da napravis da radi, tako nemoj da se brines desava se . Pozdrav
[ Pocev-od-mene @ 30.03.2010. 18:33 ] @
Neko gore je dao riješenje preko captcha slicica onih i to ti je najbolje riješenje 100% jer za mjesec dana ce ti se pojaviti nekakvi botovi po stranici koji ce komentarisat sve i svasta zato po meni najbolje riješenje je to.
Evo našao sam nešto što ti može pomoći, usput i malo viježbe neće biti za baciti.
http://www.webcheatsheet.com/php/create_captcha_protection.php
ili gotov
http://www.captchacreator.com/
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|