Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Repetition problem

[es] :: PHP :: Repetition problem

[ Pregleda: 5324 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

t3chX
Srđan Rajčević
Thessaloniki

Član broj: 2509
Poruke: 101
*.access.acn.gr

Jabber: techx@elitesecurity.org


Profil

icon Repetition problem07.06.2002. u 18:33 - pre 235 meseci
Da li postoji php funkcija koja ce skenirati citavu tabelu i kao rezultat vratiti zadnji rekord ? (U pitanju je mySQL baza)

Problem je sledeci: Imam tabelu novosti sa sledecim poljima: br (primary_key, auto_increment, not null), poslao (varchar(13), tekst (blob) i jos neka polja (uglavnom varchar).

E sad pazite ovaj kod:

$brojac = 1;
do
{
$upit = mysql_query("select * from novosti where br='$brojac'");
$finbrojac = mysql_result($upit,0,"br");
$brojac++;
}
while(mysql_fetch_row($upit));



for ($i = $finbrojac; $i >= 1; $i--)
{
$upit2 = mysql_query("select * from novosti where br='$i'");
$posiljalac = mysql_result($upit2,0,"poslao");
$tekst = mysql_result($upit2,0,"tekst");
$slika = mysql_result($upit2,0,"slika");
$datum = mysql_result($upit2,0,"datum");

.. itd itd

Ono sto me zabrinjava je do..while petlja iz koje proizilazi da $finbrojac uvek dobija vrednost 1 i jednostavno IZLAZI iz petlje ?

Ako neko ima resenje bio bih mu zahvalan.
If you want to get anywhere in your life, don't break the rules - make them !
 
Odgovor na temu

RAZZLEDAZZLER
Tora Bora

Član broj: 27
Poruke: 543
*.ppp-bg.sezampro.yu



Profil

icon Re: Repetition problem07.06.2002. u 19:49 - pre 235 meseci
Brate mili shta si ti ovde radio...
Ajde kao redom

Citat:

Da li postoji php funkcija koja ce skenirati citavu tabelu i kao rezultat vratiti zadnji rekord ? (U pitanju je mySQL baza)


ako te dobro shvatam, za to ti treba mysql funkcija MAX .. npr
select MAX(br) from novosti


Citat:

$brojac = 1;
do
{
$upit = mysql_query("select * from novosti where br='$brojac'");
$finbrojac = mysql_result($upit,0,"br");
$brojac++;
}
while(mysql_fetch_row($upit));


... shta si ti uopshte hteo ovim delom koda da uradish?

Citat:

for ($i = $finbrojac; $i >= 1; $i--)
{
$upit2 = mysql_query("select * from novosti where br='$i'");
$posiljalac = mysql_result($upit2,0,"poslao");
$tekst = mysql_result($upit2,0,"tekst");
$slika = mysql_result($upit2,0,"slika");
$datum = mysql_result($upit2,0,"datum");


...a ni ovo nije bash neshto preterano jasno. Shtampash kao te novosti ili shta vec. Pa ne mozesh choveche ovako da shtampash. Mislim, mozesh ti, hoce to ponekada i da radi, ali imash previshe query-a mysql bazi.

Ne znam odakle si uchio php/mysql [knjige, tutoriali, ludi drugovi ili neshto chetvrto], ali bez nekih loshih namera bih ti preporuchio da to sve odradish ispochetka.
Za pochetak, poshto se sada igrash sa tim novostima, nadji na netu neki tutorial vezan za php news scripte [npr http://www.google.com > u search se ukuca php tutorial news]

Verovatno josh nisi svestan koliko ti je ovaj kod losh i nefunkcionalan, ali shvaticesh nadam se uskoro.

Za pochetak jedan savet. Kada imash vishe od jednog podatka da izvlachish iz baze [kao shto izvlacish poslao, text, slika datum] ... nemoj da koristish vishe puta mysql_result, nego iskoristi jednom mysql_fetch_array funkciju [pogledaj u PHP manualu]

Potrazi sem tih tutoriala o newsu i neke osnovne tutoriale vezane za povezivanje php/mysql
 
Odgovor na temu

t3chX
Srđan Rajčević
Thessaloniki

Član broj: 2509
Poruke: 101
*.access.acn.gr

Jabber: techx@elitesecurity.org


Profil

icon Re: Repetition problem07.06.2002. u 20:44 - pre 235 meseci
Ok, hvala na nicemu. Nisam pitao za coding style pitao sam zasto to ne radi ? Nije bitno kakav je kod. Ovo bi trebalo da radi ali NE RADI razumes ?
Ako ne razumes kod onda ne znam da li razumes php uopste jel sve je uocljivo i vrlo jasno.

Za one koje interesuje do...while problem poput ovoga samo da kazem da kod sa potpuno istim funkcijama koje su koristene ali sa while() petljom radi. Problem je dakle do do..while strukture.

If you want to get anywhere in your life, don't break the rules - make them !
 
Odgovor na temu

dwarf
Beograd, Srbija

Član broj: 1328
Poruke: 336
*.yubc.net



Profil

icon Re: Repetition problem07.06.2002. u 20:55 - pre 235 meseci
Ako zelis da vratis poslednji slog u tabeli (pazi, kaze se "slog" ne "rekord" jer to nije po pravilima PMF-a :)) to radis preko SQL upita ne iz PHP-a. Dakle:

Code:

SELECT nesto FROM tabela ORDER BY primarniKljuc DESC LIMIT 1


I to ti slaze slogove od najveceg ka najmanjem i vraca samo jedan, dakle poslednji. Nadam se da je to ono sto si zeleo...
 
Odgovor na temu

t3chX
Srđan Rajčević
Thessaloniki

Član broj: 2509
Poruke: 101
*.access.acn.gr

Jabber: techx@elitesecurity.org


Profil

icon Re: Repetition problem07.06.2002. u 21:03 - pre 235 meseci
Ljudi,
ok ZNAM za to ali pitanje je ZASTO gorenavedeni kod NE RADI iako bi po nekim pravilima logike trebao da radi. Neka neko uoci gresku pa neka je kaze.
If you want to get anywhere in your life, don't break the rules - make them !
 
Odgovor na temu

RAZZLEDAZZLER
Tora Bora

Član broj: 27
Poruke: 543
*.ppp-bg.sezampro.yu



Profil

icon Re: Repetition problem08.06.2002. u 02:23 - pre 235 meseci
Citat:
t3chX:
Ok, hvala na nicemu. Nisam pitao za coding style pitao sam zasto to ne radi ? Nije bitno kakav je kod. Ovo bi trebalo da radi ali NE RADI razumes ?
Ako ne razumes kod onda ne znam da li razumes php uopste jel sve je uocljivo i vrlo jasno.


Nije uopshte u pitanju samo style.
1. Radish na pochetku select * from novosti .... iako ti je potrebna samo br kolona. Nisi ni svestan koliko to shto si uradio usporava sve, chak i na malim scriptama.
2. Pisao si ceo onaj prvi deo koda, sa sve petljom i mysql upitom u svakom "krugu" petlje... umesto da si uradio jedan mysql upit i rezultat toga ubacio u jednu varijablu
$q = mysql_query("select max(br) from novosti");
$max_br = mysql_result($q, 0);

Medjutim i tako ti je cela koncepcija pogreshna, jer nije poslednji record onaj koji ima najveci id, jer kada se obrishe neki red, novi id popunjavaju prazna mesta [dobijaju nize vrednosti od najveceg id-a]

Drugi deo koda necu ni da komentarishem.


A ne radi ti do..while petlja najverovatnije zato shto ona prvo odradi shta treba pa tek onda proverava uslov, pa se tu javlja greshka

Nemam nameru vishe da ti "kenjam", samo molim te sachuvaj negde ovaj topic i pogledaj ga za nekih 5-6 meseci. Shvaticesh valjda.
 
Odgovor na temu

RAZZLEDAZZLER
Tora Bora

Član broj: 27
Poruke: 543
*.ppp-bg.sezampro.yu



Profil

icon Re: Repetition problem08.06.2002. u 02:38 - pre 235 meseci
evo samo da se ne cimash ... prepravljen deo tog tvog koda ... mada ne znam koliko ce to da znachi ako je cela scripta pisana na ovaj nachin.
Koliko sam shvatio hocesh da izlistash novosti pochevshi od najnovije

$upit = mysql_query("select * from novosti order by datum desc")
while ($print = mysql_fetch_array($upit)) {
echo "Poslao " . $print['poslao'] . " - " . $print['datum'] . "<br><hr>" . $print['tekst'] . "<br><img src=\"" . $print['slika'] . "\"><p>";
}

Ovo ti je najgrublje moguce sa podacima koje znam.
Na pochetku stoji select * zato shto ne znam sva imena kolona, ali bi tu bilo bolje da stoje imena kolona, ako ubuduce budesh menjao scriptu, dodavao kolone, oduzimao ..itd itd
Za sliku sam pretpostavio da drzish samo putanju u tabeli... zato onako ispisuje sliku.
Sve u svemu nadam se da ti je jasno.
 
Odgovor na temu

Ćoba
Novi Sad

Član broj: 2510
Poruke: 108
*.ptt.yu



Profil

icon Re: Repetition problem09.06.2002. u 01:25 - pre 235 meseci
Citat:
t3chX:
Ako ne razumes kod onda ne znam da li razumes php uopste jel sve je uocljivo i vrlo jasno.


Ako je sve jasno i ako razumeš php, u čemu je problem. Čovek je lepo pokušao da ti objasni i nema potrebe za cinizmom. U zadnjem postu ti je rekao kako kod treba da izgleda, a ja ću ti reći gde si pogrešio. do_while petlja radi tačno ono što si i napisao: uradi jedan query i izađe. Iz php manuala za mysql_fetch_row:
Returns an array that corresponds to the fetched row, or FALSE if there are no more rows.

Pošto ima samo jedan record gde je br=1, query u while uslovu vraća False, jer je već fetchovan jedini record u result setu pozivom mysql_result unutar petlje. Inače, čitav kod je totalan nonsens. Savet za ubuduće: staviš query u promenljivu npr:
$q = "select * from novosti where br='$brojac'";
$upit = mysql_query($q);
i onda posle izprintaš query u kodu da vidiš gde grešiš, npr:
echo "$brojac $q<br>";
i naravno koristi strukturu koji ti je čovek već predložio.
 
Odgovor na temu

t3chX
Srđan Rajčević
Thessaloniki

Član broj: 2509
Poruke: 101
*.access.acn.gr

Jabber: techx@elitesecurity.org


Profil

icon Re: Repetition problem10.06.2002. u 04:14 - pre 234 meseci
Citat:
Ćoba:
Citat:
t3chX:
Ako ne razumes kod onda ne znam da li razumes php uopste jel sve je uocljivo i vrlo jasno.


Ako je sve jasno i ako razumeš php, u čemu je problem. Čovek je lepo pokušao da ti objasni i nema potrebe za cinizmom. U zadnjem postu ti je rekao kako kod treba da izgleda, a ja ću ti reći gde si pogrešio. do_while petlja radi tačno ono što si i napisao: uradi jedan query i izađe. Iz php manuala za mysql_fetch_row:
Returns an array that corresponds to the fetched row, or FALSE if there are no more rows.

Pošto ima samo jedan record gde je br=1, query u while uslovu vraća False, jer je već fetchovan jedini record u result setu pozivom mysql_result unutar petlje. Inače, čitav kod je totalan nonsens. Savet za ubuduće: staviš query u promenljivu npr:
$q = "select * from novosti where br='$brojac'";
$upit = mysql_query($q);
i onda posle izprintaš query u kodu da vidiš gde grešiš, npr:
echo "$brojac $q<br>";
i naravno koristi strukturu koji ti je čovek već predložio.


Postoje TRI recorda u tabeli znaci br=1, br=2, br=3. Ako fetch_row vraca true jer POSTOJI sledeci red sa br=2 onda bi trebao raditi sve dok je br=4 (koji ne postoji). Nisam bio cinican, samo me interesuje zasto petlja ne radi kako treba, a niko mi ne daje odgovor.
If you want to get anywhere in your life, don't break the rules - make them !
 
Odgovor na temu

Ćoba
Novi Sad

Član broj: 2510
Poruke: 108
*.ptt.yu



Profil

icon Re: Repetition problem10.06.2002. u 11:18 - pre 234 meseci
Postoji u TABELI ali ne postoji u RESULT SETU. Tvoj upit izgleda ovako:

$brojac = 1;
do
{
$upit = mysql_query("select * from novosti where br='$brojac'");
.....

ili:
SELECT * FROM novosti WHERE br=1 !

znači u result setu dobijaš samo jedan record gde je "br" jednak 1 !

Debugging je ona stvar što nas muči u php-u ;)
Zato sam ti rekao da staviš upit u promenljivu i ispišeš promenljivu. Cut & paste u MySql front i vidiš rezultat svog upita.

regs


 
Odgovor na temu

t3chX
Srđan Rajčević
Thessaloniki

Član broj: 2509
Poruke: 101
*.access.acn.gr

Jabber: techx@elitesecurity.org


Profil

icon Re: Repetition problem10.06.2002. u 20:14 - pre 234 meseci
Printao sam upit i on uredno vraca rezultat. Medjutim nejasan mi je upit mysql_fetch_row, jer do-while bi trebao da radi sve dok ne vrati false. Posto prvi put nakon izvrsavanja petlje vraca TRUE (postoji rekord) trebao bi da poveca $brojac i da opet izvrsi petlju ? Ili propustam nesto ?

If you want to get anywhere in your life, don't break the rules - make them !
 
Odgovor na temu

RAZZLEDAZZLER
Tora Bora

Član broj: 27
Poruke: 543
*.ppp-bg.sezampro.yu



Profil

icon Re: Repetition problem10.06.2002. u 23:25 - pre 234 meseci
izbaci red
$finbrojac = mysql_result($upit,0,"br");

...i bice ti jasnije zashto ne radi
Ali opet ti sa najboljim namerama kazem da ti je kod totalno pogreshno napisan i da bi trebalo sve da se radi ispochetka na totalno drugi nachin.
Gubish vreme na totalno nebitne stvari kao shto je ova, dok bitnije stvari zanemarujesh zbog ovih prvih

 
Odgovor na temu

[es] :: PHP :: Repetition problem

[ Pregleda: 5324 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.