DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   PHP pomoć (http://www.devprotalk.com/showthread.php?t=8058)

Latino Discovery 06. 11. 2009. 12:42

PHP pomoć
 
Kao prvo, pozdrav svima! Ovo je moj prvi post, a nadam se ne i poslednji.. :)

Počeo sam da radim neki sajt sa SMS porukicama i došao na ideju da se na sajtu može videti samo jedna, nasumično izabrana SMS poruka.
E sad, instalirao sam xampp i uspeo da napravim bazu sa porukama, uradio sam i .html "kostur" za sajt, ali ne mogu nikako da napišem PHP kod koji bi generisao nasumično izabranu poruku i prikazao je na ekranu.

Ako neko može da mi pomogne, biću mu veoma zahvalan.

Pozdrav!

Nemanja Avramović 06. 11. 2009. 13:05

Nisi rekao šta te konkretno muči?

Nadam se da te ne muči povezivanje sa bazom i slanje upita jer je to nešto najosnovnije i uputstva za tako nešto se mogu naći za 5 minuta (hint: http://www.google.com/search?q=php+mysql+tutorial)

A ako te zanima kako iz baze izvući nasumično jednu poruku, ovo bi moglo da odradi taj posao (SQL upit):

Kôd:

SELECT * FROM sms_tabela ORDER BY RAND() LIMIT 1

Latino Discovery 06. 11. 2009. 15:13

Konkretno me muči php :)

Hvala ti, pomogao si mi, našao sam na tom sajtu kako da se povežem sa bazom i taj upit je to što mi treba.
Kod koji sam otkucao radi.. :1090:

PHP kôd:

<?php
    mysql_connect
("localhost""root""") or die(mysql_error());
    
    
mysql_select_db("baza") or die(mysql_error());
    

    
$rezultat mysql_query("SELECT * FROM fraze ORDER BY RAND() LIMIT 1");
    
$red mysql_fetch_assoc($rezultat);    
    echo 
$red[tekst];

?>

Imam sad još jedno pitanje od kojeg će me verovatno zaboleti glava :)

Ja ustvari želim da korisnik kada ode na sajt dobije slučajno izabranu sms poruku (i to mi je jasno), ali veleo bih i da na sajtu postoji URL do te poruke kao i link pomoću koga će dobiti novu (slučajno izabranu) poruku. Samim tim će se i URL promeniti.. Takoreći svaka poruka bi trebala da ima svoju adresu odnosno onaj dodatak ?id=nekibroj..

Nadam se da sam razumljivo postavio pitanje tj. da znate šta me muči :1041:

eraser 06. 11. 2009. 15:33

Id trenutno prikazane poruke ti se nalazi u $red[id]. Da bi prikazao tekst odredjene poruke moras da kreiras novu stranicu koja ce da primi parametar id od poruke koja treba da se prikaze.
Na stranici koju si ti napravio imas poziv nove stranice:
HTML kôd:

<a href="prikazi_poruku.php?id="<?php $red['id']?>Prikazi sms</a>
Dok je prikazi_poruku.php:

PHP kôd:

$id $_GET['id'];
$rezultat mysql_query("SELECT * FROM fraze WHERE id=$id"); 

Da bi prikazao novu random poruku samo pozoves stranicu koju si ti kreirao.

Latino Discovery 06. 11. 2009. 17:18

Hvala, namučih se, al evo šljaka :)

Jedino što mi u adresi ne pokazuje id, znači adresa mi je uvek
http://localhost/proba/index.php?id=
a mislim da bi trebalo..
http://localhost/proba/index.php?id=17 ili http://localhost/proba/index.php?id=4..

I još nešto..
ponavljaju mi se poruke uzastopno.. jel mogu ja tu nešto da ukucam pa da on ne prikazuje poruku koju je već prikazao :1007:

japan 06. 11. 2009. 18:01

Citat:

Originalno napisao Latino Discovery (Napišite 75543)
Hvala, namučih se, al evo šljaka :)

super :)

sad kad ti to radi, evo malo dopunskog štiva:

http://www.google.com/search?q=php+sanitize+input

eraser 06. 11. 2009. 18:28

Bio je syntax error. Probaj ovako:
HTML kôd:

<a href="prikazi_poruku.php?id=<?php echo $red['id']?>">Prikazi sms</a>

Latino Discovery 06. 11. 2009. 19:15

Citat:

Originalno napisao japan (Napišite 75545)
super :)

sad kad ti to radi, evo malo dopunskog štiva:

http://www.google.com/search?q=php+sanitize+input

jel to znači da treba ovo negde da ubacim.. :1087:
Kôd:

sanitize($_GET, array( 'id'=>'int') );


@еraser
Sad radi baš kako treba :1090:
Ali ja imam još pitanja :1045:

Jel moguće sad za svaki SMS da se odradi "rejting"? Ono kao na youtube za klipove što ima, tako nešto i za ove moje poruke?

eraser 06. 11. 2009. 20:34

Citat:

Originalno napisao Latino Discovery (Napišite 75550)
@еraser
Sad radi baš kako treba :1090:
Ali ja imam još pitanja :1045:

Jel moguće sad za svaki SMS da se odradi "rejting"? Ono kao na youtube za klipove što ima, tako nešto i za ove moje poruke?

Pa za to ti treba ili dodatno polje u tabeli koje ce da bude counter za broj glasova ili dodatna tabela npr.tbl_sms_votes koja ce da ima sledeca polja (id, sms_id, votes). Pored prikaza svakog sms-a mogao bi da stavis link ka stranici koja ce da radi update tog sms-a, ulazni parametar ce da bude id sms-a.
Ovo je jedan od nacina, vremenom kada malo 'udjes u stos' videces da sve ovo nije toliko tesko i da za resenje svakog 'problema' postoji vise nacina.

japan 06. 11. 2009. 21:33

Citat:

Originalno napisao Latino Discovery (Napišite 75550)
jel to znači da treba ovo negde da ubacim.. :1087:
Kôd:

sanitize($_GET, array( 'id'=>'int') );

Ako koristis klasu sa prvog linka, sto mozda i nije losa ideja, onda da.

Ako neces da koristis tu klasu, onda proveri tip promenljive koji pustas u upit, i obavezno se zastiti od nezeljenih inputa. Npr, pogledaj http://php.net/manual/en/function.my...ape-string.php, a procitaj i ovu temu: http://www.devprotalk.com/showthread.php?t=7875

AnonymousCoward 07. 11. 2009. 20:35

MySQL-ov rand() ni najgorem neprijatelju ne bih preporučio. Pogotovo ako ćeš da imaš >1000 tih SMS poruka.

Što se tiče potencijalne SQL injekcije, smor su te klase. Možda je bolje... $var = (int)$_GET['id']; ili
$var = (is_numeric($_GET['id'])) ? $_GET['id'] : $default; ili sl.

Latino Discovery 09. 11. 2009. 12:44

Citat:

Originalno napisao eraser (Napišite 75551)
Pa za to ti treba ili dodatno polje u tabeli koje ce da bude counter za broj glasova ili dodatna tabela npr.tbl_sms_votes koja ce da ima sledeca polja (id, sms_id, votes). Pored prikaza svakog sms-a mogao bi da stavis link ka stranici koja ce da radi update tog sms-a, ulazni parametar ce da bude id sms-a.
Ovo je jedan od nacina, vremenom kada malo 'udjes u stos' videces da sve ovo nije toliko tesko i da za resenje svakog 'problema' postoji vise nacina.

eraser, sviđa mi se više ta prva ideja (deluje jednostavnije). Dakle, hteo bih da korisnik ocenjuje sms ocenama od 1 do 5 i da može da vidi trenutnu ocenu npr. 3,8. Takođe bih hteo kada oceni jedan sms da ga odmah baci na drugi kako bih izbegao to da 15 puta ocenjuje jedno (to ću ja mislim lako sa onim tvojim kodom za generisanje sms-a). Znači ako korisnik oceni neki sms sa četvorkom, php skripta uzima id od tog sms-a koji je ocenio i u taj red dodaje četvorku, odnosno sabira je sa prethodnim zbirom ocena i deli sa brojem glasova huh :1003: Jel postoji neka php skripta ili tip polja u samoj bazi da se to radi automacki? Da ne moram sad da imam polje za broj glasova, polje za ocenu, polje za zbir ocena i polje za rezultat.


@japan
vidim da je korisno to što si mi dao da čitam, međutim ja bih morao mnogo više da čitam jer ne znam ni šta su klase :) U svakom slučaju ću sve to pogledati i posle verovatno imati pitanje koje se tiče bezbednosti samo da se rešim ovih glavnih muka.


@AnonymousCoward
imaću manje od 500 poruka, a predpostavljam da MySQL-ov rand() ne valja jer se dešava da ponovi id ili tako nešto? U svakom slučaju ću za sad ostaviti ovako pa kad budem ono glavno završio, posvetiću se detaljima funkcionalnosti i perfekcije :)


ps. sajt samo što nije gotov :1076:, moram još da odradim taj rejting i odmah ga "puštam u promet" :1034:

bluesman 09. 11. 2009. 12:54

Off Topic: Ovo počinje da liči na PHP manual :)

eraser 09. 11. 2009. 16:18

Ako zelis da imas i srednju ocenu onda moras da imas i polje koje ce da broji ukupan broj glasova pored polja koje ce da pamti zbir ocena. Srednju vrednost mozes da dobijes kao 'calculated value' tj. ukupan zbir ocena/ukupan broj glasova

robi-bobi 09. 11. 2009. 16:49

Off Topic: preporucujem da kupis i neku knjigu za pocetnike. bilo je tema o dobrim knjigama ovde na forumu, potrazi

Latino Discovery 10. 11. 2009. 15:20

Evo, znači celo jutro pokušavam da napravim to ocenjivanje ali mi ne ide nikako. Našao sam i kako bi trebalo da izgleda kod, što ću vam pokazati.
Pokazuje mi slučajno izabrani SMS, trenutni rejting i kada kliknem na ocenu prebaci me na sledeći SMS. Ali ne beleži u bazu zbir ocena niti broj glasova.
Evo kako mi izgleda kod, pa ako može neko da mi kaže gde je greška, šta sam propustio?

PHP kôd:

<?php
//Konekshn
include "db.php";

//ispisuje slučajno odabrani SMS
$rezultat mysql_query("SELECT * FROM fraze ORDER BY RAND() LIMIT 1");
$red mysql_fetch_assoc($rezultat);
echo 
$red[tekst] . "<br><br>";


//Računa trenutni rejting i pokazuje rezultat zaokružen na jednu decimalu
$current $red[total] / $red[votes];
Echo 
"Trenutni rejting: " round($current1) . "<br>";

//Linkovi za glasanje
Echo "Oceni me: ";
Echo 
"<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=1&id=".$red[id].">Vote 1</a> | ";
Echo 
"<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=2&id=".$red[id].">Vote 2</a> | ";
Echo 
"<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=3&id=".$red[id].">Vote 3</a> | ";
Echo 
"<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=4&id=".$red[id].">Vote 4</a> | ";
Echo 
"<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=5&id=".$red[id].">Vote 5</a><p>";

//Ovo treba da dodaje 1 u polje za broj glasova i ocenu u polje za zbir ocena
mysql_query ("UPDATE fraze SET total = total+$voted, votes = votes+1 WHERE id = $id");

?>

baza mi se zove baza, tabela fraze i ima polja id, tekst, total i votes

JovanT 10. 11. 2009. 15:56

Променљива $voted ти нигде није постављена. Требало би да користиш $_GET['voted'].

Надам се и да ти је јасно да ово овако неће радити како ти мислиш. Ова задња линија, која ти ажурира оцене, би требало да се позива само ако је $_GET['mode'] == 'vote' а не при сваком покретању странице.

holodoc 10. 11. 2009. 17:58

Usputna napomena... Preporučljivo je da umesto da na toliko mesta koristiš
PHP kôd:

$_SERVER['PHP_SELF'

dodeliš njenu vrednost jednoj promenjljivoj i iskoristiš je na mestima gde je potrebna. Naravno nakon što se uradi escape-ovanje serverske promenjljive.

PHP kôd:

$script htmlentities($_SESSION['PHP_SELF'], ENT_QUOTES'utf-8');
echo 
"<a href=".$script."?mode=vote&voted=1&id=".$red[id].">Vote 1</a> | "


Latino Discovery 10. 11. 2009. 22:38

Odustajem od svega..
izvalio sam da ne umem da uradim taj rejting, a pritom mi ni onaj random generator ne radi kako treba..
Kad ukucam u adresu http://localhost/proba/index.php?id=3 ne izbaci mi treći sms, već peti ili pedeseti ili prvi..

Mislio sam da je mnogo lakše da se odradi ovo što sam zamislio, ali izgleda da nije tako i smorio sam se ko plovak :(

Hvala svima na odgovorima, ali nema smisla više da zamajavam ni vas a ni sebe.

robi-bobi 11. 11. 2009. 09:50

ode mas' u propas' :D
(nisam hteo da gnjavim ranije)

epa ne moze :)
ljudi se ubise da ti pomazu, a ti sad: nema smisla da vas zamajavam

moj savet je da pocnes od pocetka i da citas ;)
nije problem sto si uzeo nesta da na njemu ucis (sms random + rating)
problem je sto nisi naucio kako se snaci

jedan nacin je da sednes, procitas knjigu, dve i programiras (probas/eksperimentises) usput pomalo
drugi nacin je blizi tvom: pocnes da radis nesta, vidis da ne ide, nadjesh neki clanak o tome (dovde sve isto). e sad, kad uzmes da citas taj clanak, i naidjes na nesta sto ne razumes - a ti opet potrazi info za to sto ne razumes.

koliko vidim, nisi shvatio sta su ti ljudi ovde napisali
u tome je problem
ti bi samo da copy-paste (ne da u tome ima nesta lose, ali je lose ukoliko hoces da programiras )

ukoliko ti programiranje nije interesantno (t.j. hteo si sajt sa sms-ima, a ne da programiras) - onda pogledaj neki gotov CMS koji vec ima te i takve mogucnosti

poz

Latino Discovery 12. 11. 2009. 08:53

Ipak ne odustajem, ono je bio samo trenutak moje slabosti :1016:

kodi 12. 11. 2009. 11:00

Off Topic:
da se nadovezem na ono sto je robi rekao

Moja teorija je da postoje 3 grupe ljudi:
a) oni koji vole programiranje
b) oni koji mrze programiranje
c) oni koji ni ne znaju da vole programiranje

super je kad na forumu naleti neko iz c grupe, ali nista gore kad je b :)

Latino Discovery 16. 11. 2009. 13:38

Evo mene opet, blago meni, opet ja :)

Konačno imam kod koji radi.
Poslušao sam ovo što su rekli holodoc i JovanT. I video sam zašto AnonymousCoward kaže da MySQL-ov rand() ni najgorem neprijatelju ne bi preporučio (reason), ali ću to da isprobavam drugi put.

sada imam fajl bapro.php koji izgleda ovako..
PHP kôd:

<?php

    
//Konekshn
    
include "db.php";

    
$rezultat mysql_query("SELECT * FROM fraze ORDER BY RAND() LIMIT 1");
    
$red mysql_fetch_assoc($rezultat);
    
$id $_GET['id']; 
    
    if( empty(
$id)) {
    
srand(time());
    
$id=rand(1mysql_result(mysql_query("SELECT COUNT('id') FROM fraze"), 0));
                    }
                    
    
$rezultat2 mysql_query("SELECT * FROM fraze WHERE id=$id"); 
    
$red2 mysql_fetch_assoc($rezultat2);
    
    
// Broj fraza u bazi
    
$brojac mysql_query("SELECT * FROM fraze");
    
$broj_u_bazi mysql_num_rows($brojac);

    
//Računa trenutni rejting
    
$current $red2[total] / $red2[votes];

    
    
    
//Ispisuje jednu, nasumično izabranu SMS poruku
    
echo "SMS dana: ";
    echo 
$red2['tekst'] ."<br />";

    
//Ispisuje trenutni broj SMS-ova u bazi
    
echo "Broj SMS-ova u bazi je:"
    echo 
$broj_u_bazi ."<br />";

    
//Ispisuje trenutni rejting poruke, zaokruzen na jednu decimalu
    
echo "Trenutni rejting ovog SMS-a je:";
    echo 
round($current1) ."<br />";
    
    
//Link za generisanje slučajno odabranog sms-a iz baze
    
echo "<a href='?id=" $red['id'] . "'>Prikaži sledeći SMS</a>" "<br>";
    
        
    
    
//Linkovi za glasanje
    
$script htmlentities($_SESSION['PHP_SELF'], ENT_QUOTES'utf-8');
    
    echo 
"Oceni me: ";
    echo 
"<a href=".$script."?mode=vote&voted=1&id=".$red2['id']."> 1</a> | "
    echo 
"<a href=".$script."?mode=vote&voted=2&id=".$red2['id']."> 2</a> | "
    echo 
"<a href=".$script."?mode=vote&voted=3&id=".$red2['id']."> 3</a> | "
    echo 
"<a href=".$script."?mode=vote&voted=4&id=".$red2['id']."> 4</a> | "
    echo 
"<a href=".$script."?mode=vote&voted=5&id=".$red2['id']."> 5</a> | "
    
    
    
$mode $_GET['mode'];
    
$voted intval($_GET['voted']);
    
    
//bodovanje ocenama isključivo od 1 do 5
    
if(($voted 1)||($voted>5)) die;
    if (
$mode=="vote")
    {
    
//ubacuje ocene i broj glasova u bazu
    
mysql_query ("UPDATE fraze SET total = total+$voted, votes = votes+1 WHERE id = $id");
    echo 
"<meta http-equiv='refresh' content='0;URL=bapro.php'>"
    }
                    
    
?>

i db.php fajl koji izgleda ovako..

PHP kôd:

<?php
    $hostname 
"localhost";
    
$user "root";
    
$password "";
    
$base "baza";



    
$db mysql_connect($hostname$user$password) or die(mysql_error());
    
    
mysql_select_db($base$db) or die(mysql_error());

    
mysql_query("SET NAMES utf8");
    
mysql_query("SET CHARACTER SET utf8");
    
mysql_query("SET COLLATION_CONNECTION='utf8_unicode_ci'");
    
?>

(koliko sam se samo namučio da pokazuje č,ć,ž,š i đ :) )

a preview u pretraživaču izgleda 'vako..


Sve funkcioniše kako treba..
Kada kliknem na "Prikaži sledeći SMS", on prikaže nasumično izabrani SMS.
Kad kliknem na ocenu, on oceni SMS koji treba i prikaže sledeći nasumično izabrani SMS.

E sad.. ono što mene zanima je sigurnost..
Ja sam samo ubacio ono što je AnonymousCoward rekao (intval() komandu)..
Da li postoji neka elementarna stvar koju sam propustio?
Nešto što bih morao da dodam, a nisam?
Treba li da stoji mysql_close( ) na kraju bapro.php fajla?
Jel sigurno da upload-ujem ovakav sajt i bazu? :1087:

Hvala unapred na odgovorima.

Ivan 16. 11. 2009. 14:08

$id = $_GET['id']; => $id = (int)$_GET['id'];


Vreme je GMT +2. Trenutno vreme je 01:40.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.