View Full Version : Afisare date din MySQL


delikvent
07-06-2007, 03:42 AM
Am tot cautat vreo ora pe google si tot nu pot gasi raspunsul, asa k voi posta mesajul meu aici in speranta ca imi va raspunde cineva. Va rog mult:

Deci am o baza de date, cu continutul ceva de genul:

+------+-------+---------------+
| id | name | email |
+------+-------+---------------+
| 1 | Vivek | xuz@abc.com |
| 2 | Priya | p@gmail.com |
| 3 | Tom | tom@yahoo.com |
+------+-------+---------------+

Mie imi trebuie ca la afisarea in browser a paginii test.php?id=1 sa fie afisat numele si adresa de email de la id-ul 1, sau test.php?id=2 sa-mi arate info de la id-ul 2 samd.

Acum am gasit un script dar care e cam rudimentar.
<?php
require 'dbconfig.php';

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");

//select a database to work with
$selected = mysql_select_db("bd_a_mea",$dbhandle)
or die("Could not select database");

//execute the SQL query and return records
$result = mysql_query("SELECT name, email FROM tabelul_meu WHERE id=1");


//fetch tha data from the database
while ($row = mysql_fetch_array($result)) {
echo "Nume:".$row{'name'}." Email:".$row{'email'}."<br>";
}
//close the connection
mysql_close($dbhandle);
?>Deci, primesc cam ce doresc eu, dar doar daca schimb de fiecare data variabila la WHERE id=.... cu cifra care imi trebuie.
cum sa fac ca scriptul automat sa schimbe WHERE id=cifra_mea atunci cand linkul e de forma test.php?id=cifra_mea?

presupun ca e vorba de functia while ($row = mysql_fetch_array($result)) {} dar mai departe cunostintele mele de php se termina :)

Va multumesc anticipat.

khama
07-06-2007, 10:48 AM
nea... tu trebuie sa citeshti variabila ce merge dupa "?"
demult nu m-am jucat cu asta, am uitat cum se face asta, sant functii ce citesc variabilele din url, shi apoi o bagi ca caracter in sql shi tat ibatz...

gr8dude
07-06-2007, 05:03 PM
Problema e urmatoarea: interogarea ta returneaza un singur tuplu, deoarece indici WHERE id=1

Poti face SELECT name, email FROM tabelul_meu, si atunci interogarea va returna un set de tupluri.

Dupa aceea vei trece prin fiecare tuplu cu while ($row = mysql_fetch_array($result))


while se va opri atunci cind row=NULL, adica dupa ce ai trecut prin toate tuplurile din tabelul returnat dupa efectuarea interogarii.


Cu alte cuvinte, trebuie sa schimbi:
$result = mysql_query("SELECT name, email FROM tabelul_meu");

khama
07-06-2007, 06:45 PM
lui ii tre pentru fiecare pagina rezultate diferite

gr8dude
07-06-2007, 09:37 PM
Aa, da... iata daca nu RTFQ...

Trebuie sa folosesti $_GET sau $_POST (http://www.php.net/variables.predefined), in dependenta de modul in care este transmisa cererea.

Pentru ca sa lucreze asta test.php?id=1, adica sa poti primi valoarea variabilei id, foloseste $_GET['id'], sau atribuie valoarea aceasta unei alte $id_variable=$_GET['id'];


Cu alte cuvinte, interogarea trebuie sa fie asa:
SELECT name, email FROM tabelul_meu WHERE $_GET['id']=1 (desigur ca aici trebuie sa nu uiti ca "$_GET['id']" trebuie de convertat in string, nu stiu cum se face asta in PHP)

groparu
07-06-2007, 10:13 PM
Cu alte cuvinte, interogarea trebuie sa fie asa:
SELECT name, email FROM tabelul_meu WHERE $_GET['id']=1 (desigur ca aici trebuie sa nu uiti ca "$_GET['id']" trebuie de convertat in string, nu stiu cum se face asta in PHP)

cine te-a invatzat asa cod sa scrii ;)?

delikvent
07-07-2007, 12:53 AM
bine guys, merci pentru interventie si efort,

deci, am inteles k tre de modificat variabila WHERE cu ceva care sa fie identica cu pagina mea id=... dar cu ce anume... nu prea inteleg.... :(
imi poate spune cineva pls care ar fi codul final pentru acest lucru?
thx!

khama
07-07-2007, 01:39 AM
delikvent, nu tzi-ar strica sa citeshti capitolul de introducere la vre-un manual de php, acolo explica pe scurt cum lucreaza un web server, cum se transmit variabilele shi alte lucruri folositoare

dorincea
07-07-2007, 02:49 AM
pa hodu asha trebu sa shie, daca ceea ce spune gr8dude e corect
$result = mysql_query("SELECT name, email FROM tabelul_meu WHERE id=".$_GET['id']);

P.S. Prima data vad php in fatsa okilor

gr8dude
07-07-2007, 11:45 AM
cine te-a invatzat asa cod sa scrii ?
Cred ca nu ai inteles; am explicat in paranteze ca acea chestie trebuie sa fie convertata in string, dar nu stiu cum se face asta in PHP; si mi se pare straniu ca se foloseste punctul ca operator de concatenare.

Adica ar trebui sa fie facut asta in PHP:
"SELECT name, email FROM tabelul_meu WHERE id="+str($_GET['id'])



delikvent, ar trebui sa fie asa cum a scris dorincea. :b44,gogogo:

delikvent
07-07-2007, 03:52 PM
thx baieitzi, totul e ok, acum merge!
gr8dude: u r a great dude :)
dorincea: merci mult!
khama: neaparat! am s citesc si thx pt simtul umorului.

numai bine. back 2 work!

groparu
07-08-2007, 12:49 PM
Cred ca nu ai inteles; am explicat in paranteze ca acea chestie trebuie sa fie convertata in string, dar nu stiu cum se face asta in PHP; si mi se pare straniu ca se foloseste punctul ca operator de concatenare.

Adica ar trebui sa fie facut asta in PHP:
"SELECT name, email FROM tabelul_meu WHERE id="+str($_GET['id'])



delikvent, ar trebui sa fie asa cum a scris dorincea. :b44,gogogo:

ma refeream la SQL Injection ;)

gr8dude
07-08-2007, 01:32 PM
ma refeream la SQL Injection
Oo! Asta chiar e un risc de care nu am tinut cont.

dorincea, trebuie sa te asiguri ca $_GET['id'] este un numar, si nu un string care poate contine o alta interogare, sau alte instructiuni care vor fi evaluate TRUE chiar daca id'ul nu exista.

Ar trebui sa fie vre-o functie ca atoi, care converteaza un string intr-un numar. Daca functia returneaza o eroare, inseamna ca al tau id nu este un numar, deci cineva incearca sa compromita sistemul tau.

delikvent
07-08-2007, 04:14 PM
eu tot m intrebam ce se primeste atunci cand id=numar_inexistent

am incercat sa bag un if { } dupa variabila while
gen
if(!is_numeric($_GET[id]))
{
exit("HAcker attack");
}
dar nu stiu dak e solutia potrivita.

adik merge numai dak scriu id=malicious_script sau tot ce nu este numeric, dar dak scriu id=56 care nu exista in baza de date nu se intampla nimic.
voi ce ati face?