Autor | Zpráva | ||
---|---|---|---|
Samo Profil * |
#1 · Zasláno: 22. 1. 2011, 20:58:38
Dobrý deň,
potreboval by som nejako doriešiť, aby po odoslaní hodnotenia, a prípadnom zaznamenaní do databázy alebo nezaznamenaní kvôli ip_adrese vypísalo chybu na stránke kde bude formulár na odoslanie hodnotenie a nie na stránke na ktorej prebehne script, prosím o radu ako takýto problém vyrišešiť, prípadne script s ktorým by sa to dalo upraviť... Ideálne by bolo že by na mieste toh formulára s hodnotením len zmenilo formulár na text, čo sa s tým stalo ;) ĎAKUJEM, nižšie prikladám zdrojové kódy aktuálneho znenia, áno, viem že mi to nič nevypíše keď prebehne ten script ale samotné overenie funguje :) pridaj_hodnotenie.php echo '<form action="./hodnotenie.php" method="post"><select name="znamka">'; for ($i=1;$i<=10;$i++){ echo '<option>'.$i.'</option>'; } echo '<input name="id_clanku" type="hidden" value="'.mysql_real_escape_string($_GET["id_knihy"]).'">'; echo '<input name="ip_adresa" type="hidden" value="'.$_SERVER['REMOTE_ADDR'].'">'; echo '<input type="submit" value="Odoslať">'; echo '</select></form>'; hodnotenie.php <?php require_once('xxx.php); $id_clanku = htmlspecialchars($_POST['id_clanku']); $znamka = htmlspecialchars($_POST['znamka']); $ip_adresa = htmlspecialchars($_POST['ip_adresa']); require_once(xyz); $p=1; $sql = (mysql_query("SELECT id_clanku,ip_adresa FROM hodnotenie WHERE id_clanku='" . mysql_real_escape_string($_GET["id_knihy"]) . "'")); while ($data = mysql_fetch_array($sql, MYSQL_BOTH)){ $ip_adresa2[$p]=$data['ip_adresa']; $p++; if ($_SERVER['REMOTE_ADDR']==$ip_adresa2[$p]){ echo 'Prepáčte, ale už ste hodnotili!'; } else { require_once(xyz); $sql = (mysql_query("INSERT INTO hodnotenie(id_clanku,znamka,ip_adresa) VALUES('$id_clanku','$znamka','$ip_adresa')")); if($sql){ echo 'Hodnotenie bolo odoslané!'; } else { echo 'Prepáčte, nastala chyba!'; } mysql_close(); } } ?> |
||
pcmanik Profil |
#2 · Zasláno: 22. 1. 2011, 21:04:01 · Upravil/a: pcmanik
Na zistenie ip adresy pouzi tuto funkciu:
function ip_adresa(){ if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP']; elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; else $ip = $_SERVER['REMOTE_ADDR']; return $ip; } htmlspecialchars(); mysql_real_escape_string($_GET["id_knihy"]) intval($_GET["id_knihy"]); Nieje mi jasne, co sa snazis dosiahnut dvojnasobnim volanim tohoto require_once(xyz); sql staci zapisat takto $sql = mysql_query("SELECT id_clanku,ip_adresa FROM hodnotenie WHERE id_clanku='" . mysql_real_escape_string($_GET["id_knihy"]) . "'"); Mas tu chybu - require_once('xxx.php') na konci ti chybalo ' vypísalo chybu na stránke kde bude formulár na odoslanie hodnotenie a nie na stránke na ktorej prebehne script Staci ked na tej istej stranke kde mas formular vlozis ten script, nemusis ho davat do samostatneho suboru. Pri pouziti tejto metody zmaz echo '<input name="id_clanku" type="hidden" value="'.mysql_real_escape_string($_GET["id_knihy"]).'">'; echo '<input name="ip_adresa" type="hidden" value="'.$_SERVER['REMOTE_ADDR'].'">'; A aj tak pouzivat hidden nieje spravne, moze ti to hocikto zmenit, co by si urcite nechcel..... Poviem ti to asi takto, cely ten tvoj script je zle. Odporucam ho cely prepisat... |
||
Samo Profil * |
#3 · Zasláno: 22. 1. 2011, 21:12:34
toto máš pravdu, ale ja som potreboval aby mi výsledok scriptu vyhodilo na stránku kde bude ten formulár, čiže aby action prebehol ako keby na rovnakej stránke ako formulár ;)
|
||
Samo Profil * |
#4 · Zasláno: 22. 1. 2011, 21:15:51
a čo je lepšie ako hidden? :)
lebo ja sa takýmto srandám moc nevenujem, tak si nechám poradiť.. ;) |
||
pcmanik Profil |
#5 · Zasláno: 22. 1. 2011, 21:16:17
Este raz si pozri cely moj prispevok, omylom som ho zaslal, a som ho musel upravit, teraz uz je tu cely.
|
||
Samo Profil * |
#6 · Zasláno: 22. 1. 2011, 21:16:20
to sa neboj, na konci ho cely urcite prepisem zostane mi polovica veci z webu to len teraz pocas vyvoja potrebujem do detailov :D
|
||
pcmanik Profil |
#7 · Zasláno: 22. 1. 2011, 21:18:30 · Upravil/a: pcmanik
Ked bude action na tej istej stranke, hidden na ip nepotrebujes.
Hidden na id_clanku ti moze byt v podstate jedno, aj ked ho niekto zmeni nic tym v podstate neovplyvni, len bude hlasovat na inom clanku, ale s ip by si problem mal... |
||
Samo Profil * |
#8 · Zasláno: 22. 1. 2011, 21:21:00
ešte k tej chybe, ja som to teraz upravoval tak viem :D som si to druhý krát všimol keď som ho čítal či som sa nesekol..
|
||
Samo Profil * |
#9 · Zasláno: 22. 1. 2011, 21:55:15
ešte mám otázku, prosím ako to dám do jednej stránky tie dve veci? tak aby to bolo aj nejako ochránené proti hacku :)
ak máš čas hoď mi to sem ako to má vyzerať, díky... |
||
pcmanik Profil |
#10 · Zasláno: 22. 1. 2011, 21:58:09 · Upravil/a: pcmanik
<?php if (isset($_POST['hodnotenie'])){ to co sa ma urobit..... } ?> <form action="" method="post"> input, input atd <input type="submit" value="Odoslať" name="hodnotenie"> Takto nejak, mal by si to z toho dokazat vycitat |
||
PecanCZ Profil |
#11 · Zasláno: 22. 1. 2011, 22:10:55 · Upravil/a: PecanCZ
Samo:
„require_once('xxx.php);“ chybí ti tam ' require_once('xxx.php'); |
||
Samo Profil * |
#12 · Zasláno: 22. 1. 2011, 23:05:22
if ($hodnotenie_on_off==1){
2. echo '<br />'; 3. echo '<br />'; 4. echo '<font>Hodnotenie užívateľov</font>'; 5. require_once(DB); 6. $p=1; 7. $sql = (mysql_query("SELECT id_clanku,ip_adresa FROM hodnotenie WHERE id_clanku='" . intval($_GET["id_knihy"]) . "'")); 8. while ($data = mysql_fetch_array($sql, MYSQL_BOTH)){ 9. $ip_adresa2[$p]=$data['ip_adresa']; 10. $p++; 11. if ($_SERVER['REMOTE_ADDR']==$ip_adresa2[$p]){ 12. echo 'Prepáčte, ale už ste hodnotili!'; 13. } 14. else { 15. if (isset($_POST['znamka'])){ 16. $id_clanku = htmlspecialchars(intval($_GET["id_knihy"])); 17. $znamka = htmlspecialchars($_POST['znamka']); 18. $ip_adresa = ($_SERVER['REMOTE_ADDR']); 19. $sql = (mysql_query("INSERT INTO hodnotenie(id_clanku,znamka,ip_adresa) VALUES('$id_clanku','$znamka','$ip_adresa')")); 20. if($sql){ 21. echo 'Hodnotenie bolo odoslané!'; 22. } 23. else { 24. echo 'Prepáčte, nastala chyba!'; 25. } 26. } 27. echo '<form action="" method="post"><select name="znamka">'; 28. for ($i=1;$i<=10;$i++){ 29. echo '<option>'.$i.'</option>'; 30. } 31. echo '<input type="submit" value="Odoslať">'; 32. echo '</select></form>'; 33. } 34. } 35. echo '<br />'; 36. DB_hodnotenie(); 37. } 38. else { 39. return false; 40. } |
||
Samo Profil * |
#13 · Zasláno: 22. 1. 2011, 23:07:05
stále to nefuguje tak ako by malo, opakuje mi form podľa počtu záznamov v DB, potom ak dám odoslať vypíše že
"Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Extra\xampp\htdocs\hodnotenieknih2-1\kniha.php on line 66" neviete kde môže byť chyba? v tom require_once() určite nie lebo inde to funguje, ten riadok 66 je tuto osmy, ten s tým while... ďakujem |
||
AM_ Profil |
#14 · Zasláno: 23. 1. 2011, 11:37:50
[#13] Samo
ta chyba znamená, že mysql_fetch_array dostal jako parametr resource místo boolean. A to nejpravděpodobněji znamená, že poslední volání dotazu přes mysql_query selhalo - chyba jde vypsat pomocí funkce mysql_error. Dokumentace ke všem funkcím je dostupná na http://php.net |
||
Samo Profil |
#15 · Zasláno: 23. 1. 2011, 13:49:09 · Upravil/a: Samo
A v tom opakovaní tých formov je chyba kde?...
//tú chybu vypíše až po odoslaní do DB, ale k tomu dopytu patrí ten od ktorého pýta dáta... :/ |
||
Samo Profil |
#16 · Zasláno: 23. 1. 2011, 16:38:09
if ($hodnotenie_on_off==1){ echo '<br />'; echo '<br />'; echo '<font>Hodnotenie užívateľov</font>'; echo '<br />'; require_once(DB); $p=1; $sql = (mysql_query("SELECT id_clanku,ip_adresa FROM hodnotenie WHERE id_clanku='" . intval($_GET["id_knihy"]) . "'")); while ($data = mysql_fetch_array($sql, MYSQL_BOTH)){ $ip_adresa2[$p]=$data['ip_adresa']; $p++; if ($_SERVER['REMOTE_ADDR']==$ip_adresa2[$i]){ echo 'Prepáčte, ale už ste hodnotili!'; } } if ($_SERVER['REMOTE_ADDR']!==$ip_adresa2[$i]) { if (isset($_POST['znamka'])){ $id_clanku = htmlspecialchars(intval($_GET["id_knihy"])); $znamka = htmlspecialchars($_POST['znamka']); $ip_adresa = ($_SERVER['REMOTE_ADDR']); $sql = (mysql_query("INSERT INTO hodnotenie(id_clanku,znamka,ip_adresa) VALUES('$id_clanku','$znamka','$ip_adresa')")); if($sql){ echo 'Hodnotenie bolo odoslané!'; } else { echo 'Prepáčte, nastala chyba!'; } } echo '<form action="" method="post"><select name="znamka">'; for ($i=1;$i<=10;$i++){ echo '<option>'.$i.'</option>'; } echo '<input type="submit" value="Odoslať">'; echo '</select></form>'; } echo '<br />'; DB_hodnotenie(); } else { return false; } |
||
Samo Profil |
#17 · Zasláno: 23. 1. 2011, 16:39:32 · Upravil/a: Samo
takto to vyzerá teraz, už nevypisuje počet formulárov podľa počtu záznamov v DB, ale teraz pre zmenu nefuguje to overovanie IPčky...
//EDIT: Ešte budem potrebovať aby mi zmizol ten formulár ak hodnotil a zobrazilo mu len primerné hodnotenie a nformáciu že už hlasoval... |
||
Časová prodleva: 13 let
|
0