Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  mysql php päring, mis ei prindiks tühjasid välju. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele 1, 2  järgmine
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
marco
Kreisi kasutaja
marco

liitunud: 18.04.2006




sõnum 25.10.2009 17:44:34 mysql php päring, mis ei prindiks tühjasid välju. vasta tsitaadiga

On tabel kus on sissekanded kujul:

nimi, vanus
peeter, 22
toomas


ja php kood:

while($row = mysql_fetch_array($result ))
{
   echo "Nimi: ";
   echo $row['nimi'];
   echo "<br>";
   echo "Vanus: ";
   echo $row['vanus'];
   echo "<br>";
}


mis kuvab kõik tabelis oleva info järgnevalt:

Nimi: peeter
Vanus: 22

Nimi: Toomas
Vanus:

kuidas php'ga nii teha, et tühja sissekande puhul jätaks selle vahele. Selle näite puhul siis jätaks Toomase vanuse lahtri trükkimata.

Nimi: peeter
Vanus: 22

Nimi: Toomas

_________________
Does "genuine" mean "with the real bugs"?
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 25.10.2009 17:52:23 vasta tsitaadiga

http://php.net/manual/en/control-structures.if.php
http://ee.php.net/manual/en/function.empty.php
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
wk
HV vaatleja

liitunud: 22.05.2007




sõnum 25.10.2009 19:54:32 vasta tsitaadiga

Mõistlik oleks juba mysqlile päring nii esitada, et vastuseks ei saagi ilma vanuseta ridu.
_________________
Kõike hääd,
WK
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 25.10.2009 20:05:00 vasta tsitaadiga

wk, aga kuidas sa selle näite puhul seda teeksid? iga kord ju trükitakse Vanus: jne....
ikka peab seal while sees ütlema, millal kuvada ja millal mitte!

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
limp
HV Guru
limp

liitunud: 11.08.2003




sõnum 25.10.2009 20:06:50 vasta tsitaadiga

noo võiks teha juba "where nimi not null or vanus not null"
või kuidas iganes see not syntaks oli

_________________
Ärgake lapsed, maailm on hädaohus

Windows keskkond on nagu li*s - kõik teda ke*ivad aga keegi teda ei armasta!
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 52
tagasi üles
vaata kasutaja infot saada privaatsõnum
wk
HV vaatleja

liitunud: 22.05.2007




sõnum 25.10.2009 20:11:55 vasta tsitaadiga

SELECT nimi, vanus FROM tabel WHERE vanus > 0

_________________
Kõike hääd,
WK
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 25.10.2009 20:18:35 vasta tsitaadiga

wk, printida on vaja kõigi isikute nimed, mitte ainult nende omad kel vanus olemas.
_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
limp
HV Guru
limp

liitunud: 11.08.2003




sõnum 25.10.2009 20:25:09 vasta tsitaadiga

siis:

if($row['vanus']>0) {
  echo "Vanus: ";
  echo $row['vanus'];
  echo "<br>";
}

_________________
Ärgake lapsed, maailm on hädaohus

Windows keskkond on nagu li*s - kõik teda ke*ivad aga keegi teda ei armasta!
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 52
tagasi üles
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 25.10.2009 20:25:42 vasta tsitaadiga


if($row['vanus'] > 0){
     echo 'vanus: '.$row['vanus'];
}


Midagi sellist võibolla?
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
wk
HV vaatleja

liitunud: 22.05.2007




sõnum 25.10.2009 20:31:31 vasta tsitaadiga

nene kirjutas:
wk, printida on vaja kõigi isikute nimed, mitte ainult nende omad kel vanus olemas.
Nojah, seda ma imestasin, kus see probleem siin on. Aga sedagi saaks lahendada päringu tasemel, iseasi on optimaalsus.
_________________
Kõike hääd,
WK
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
marco
Kreisi kasutaja
marco

liitunud: 18.04.2006




sõnum 25.10.2009 20:31:59 vasta tsitaadiga

mikk36'e lingitud manuaalid aitasid mind niikaugele, et sain töötava koodijupi:

while($row = mysql_fetch_array($result ))
   echo "Nimi: ";
   echo $row['nimi'];
   echo "<br>";
   if(empty($row['vanus']))
      {
         echo "";
      }
         else
      {
         echo "Vanus: ";
         echo $row['vanus'];
         echo "<br>";
}


pole kindel kas see nüüd kõige targem lahendus on, aga vähemalt töötab.

_________________
Does "genuine" mean "with the real bugs"?
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
wk
HV vaatleja

liitunud: 22.05.2007




sõnum 25.10.2009 20:35:26 vasta tsitaadiga

Üks lõpetav kapsaraud on puudu ja teistpidi oleks mõistlikum:
   if($row['vanus'] > 0)
      {
         echo "Vanus: ";
         echo $row['vanus'];
         echo "<br>";
      }

_________________
Kõike hääd,
WK
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 25.10.2009 20:38:57 vasta tsitaadiga

Nüüd oleneb kas tahad, et see Vanus ka puuduks või sobiks ka selline väljund
Peeter Vanus 22
Ants Vanus

Sellisel juhul pole üldse mõtet midagi ifida siin, kuna $row['vanus'] ongi tühi ning visuaalselt ei ole midagi näha.
Sinu pakutu peaks ka selliselt toimima.
echo""; pole mõtet teha vist nagu.

if($row['vanus'])
      {
         echo "Vanus: ";
         echo $row['vanus'];
         echo "<br>";
}

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
marco
Kreisi kasutaja
marco

liitunud: 18.04.2006




sõnum 25.10.2009 20:46:46 vasta tsitaadiga

limp, Bluebull, wk, thumbs_up.gif
andrusny, "Vanus" peaks ka puuduma.

_________________
Does "genuine" mean "with the real bugs"?
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 25.10.2009 21:08:28 vasta tsitaadiga

IF pole siinkohal ainus võimalus. Päris loetava koodi saab ka ?: operaatori abil:

while ($row = mysql_fetch_array($result)) {
   echo "Nimi: $row[nimi]<br>";
   echo $row["vanus"] ? "Vanus: $row[vanus]<br>" : "";
}


&& operaatori abil saab minna veel lühemaks, aga siis tuleb echo asemel kasutada print-i, sest echo pole funktsioon:

while ($row = mysql_fetch_array($result)) {
   print("Nimi: $row[nimi]<br>");
   $row["vanus"] && print("Vanus: $row[vanus]<br>");
}


marcol soovitaks jääda siiski IF-ide juurde icon_smile.gif

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 25.10.2009 21:16:39 vasta tsitaadiga

nene, viitsiksid seda seletada? mis seal tehakse...

$row["vanus"] && print("Vanus: $row[vanus]<br>");

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 25.10.2009 21:59:56 vasta tsitaadiga

keevitaja kirjutas:
nene, viitsiksid seda seletada? mis seal tehakse...

$row["vanus"] && print("Vanus: $row[vanus]<br>");

See on selline mõneti advanced kasutus võrdlusoperaatoritele. Point on siin selles, et php arvestab $row[vanus] väärtuseks false juhul, kui see on null, kui ei ole null loeb selle true väärtust omavaks. Nüüd, kuna && operaator kokku tagastab true ainult juhul, kui mõlemad pooled on true, siis kui esimene pool on null, ehk false, siis teistpoolt ei ole mõtet üldse vaadata ja php jätab selle lause teise poole käivitamata ja väljundi välja trükkimata.

Märksõna mille alt infot peaks netist leidma on "logical operator short circuiting", kui on huvi rohkem teada saada.

PHP gurud võivad nüüd paremini seletada, PHP pole mu igapäevaleib siiski icon_smile.gif

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 25.10.2009 23:17:55 vasta tsitaadiga

class PR
{
   function output()
   {
      echo 'ahaa';
   }
}
$pr = new PR;

$kala = '';
$kala && $pr->output();


kas selliselt on siis selle && kasutamine ok ja mõttekas? selle asemel et teha if(!empty($kala))
ja pärast && saab ainult panne ühe funktsiooni?

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 25.10.2009 23:53:27 vasta tsitaadiga

Ma isiklikult ei soovitaks sellist stiili väga kasutada. Põhimõtteliselt on see täpselt sama mis:

if ($kala) $pr->output();


Ja see on mu meelest märksa loeatavam ja kergemini mõistetav.

See &&-stiil on rohkem mu meelest nagu kompenseerimaks seda, et PHP ei võimalda selliseid konstruktsioone nagu Perl:

$pr->output() if $kala;


Või nagu Ruby:

pr.output if kala


Samas maitse asi. Kui kõik meeskonnas on nõus, et see &&-värk on arusaadav, siis miks mitte. Eks ta ole rohkem harjumise värk.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 25.10.2009 23:56:33 vasta tsitaadiga

mul siin hetkel meeskond suht väike. koos minuga 1 liige meeskonnas icon_lol.gif icon_lol.gif icon_lol.gif

kas seda siis üldiselt ei kasutata?

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 26.10.2009 00:03:36 vasta tsitaadiga

keevitaja kirjutas:
mul siin hetkel meeskond suht väike. koos minuga 1 liige meeskonnas icon_lol.gif icon_lol.gif icon_lol.gif

kas seda siis üldiselt ei kasutata?

Kõige suurem miinus minuarust on sel asjal see, et see ei ole nii intuitiivselt mõistetav ehk koodi loetavus kannatab. Samas on ta ka ilmselgelt piiratum siiski, kui if lause, sest reaalselt saad sa kontrollida ainult väärtuse null olemist. Kui on kokkupuuteid paralleelselt erinevate keeltega, siis võivad olla ka keelte vahel erinevused. Kasvõi sama näite puhul tekib küsimus, kas tühi string on true või false. Pole küll katsetanud, aga intuitiivselt ma arvan, et java näiteks võtab tühja stringi väärtuseks true ning false on ainult null, samas siinsest diskussioonist jääb mulje, et php tõlgendab false'ks nii null kui tühja stringi.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 26.10.2009 00:18:13 vasta tsitaadiga

keevitaja kirjutas:
kas seda siis üldiselt ei kasutata?


Ma pole näinud, et eriti kasutataks.

Tavaliselt kui ma sellist asja näen, siis hetkeks peatun ja mõtlen, et kas ma saan ikka õigesti aru, mis toimub. Lihtsalt mu aju parsib IF-i kiiremini läbi kui &&-i. Pealegi on kirjutamisvaeva vähenemine seeläbi õite napp, seega minu jaoks ei kaalu plussid miinuseid üle.

Küll on aga teisi sarnaseid konstruktsioone, mida ma kasutan. Näiteks JavaScriptis parameetritele vaikimisi väärtuste andmine, mis if-idega käiks nõnda:

function sum(a, b) {
  if (!a) a = 0;
  if (!b) b = 0;
  return a + b;
}


Aga || abil saab kirja panna nii:

function sum(a, b) {
  a = a || 0;
  b = b || 0;
  return a + b;
}


Või veelgi lühemalt:

function sum(a, b) {
  return (a||0) + (b||0);
}


Antud stiil on vähemasti JavaScriptis üpris levinud.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 27.10.2009 01:00:31 vasta tsitaadiga

ma nüüd küll teemas mööda, aga veel sellest kuidas oleks mõttekas kirjutada. kui ma tahan $dir_id anda $_REQUEST['dir_id'] väärtust aga ainult siis kui tegemist on numriga. juhul kui väärtus puudub või on tühi või string vms, siis annan väärtuseks 0 kas nii on mõttekas kirjutada?

@$dir_id = (int) $_REQUEST['dir_id'];

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
limp
HV Guru
limp

liitunud: 11.08.2003




sõnum 27.10.2009 10:24:44 vasta tsitaadiga

ise olen samuti kasutanud seda (int)$minginevar, seda just eesmärgiga, et keegi ei saaks mingeid injectioneid vms paska teha läbi posti või geti
_________________
Ärgake lapsed, maailm on hädaohus

Windows keskkond on nagu li*s - kõik teda ke*ivad aga keegi teda ei armasta!
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 52
tagasi üles
vaata kasutaja infot saada privaatsõnum
gloom
Kreisi kasutaja
gloom

liitunud: 15.07.2002




sõnum 27.10.2009 18:22:57 vasta tsitaadiga

while ($row = mysql_fetch_array($result)) {
   echo "Nimi: $row[nimi]<br>";
   echo ($row['vanus']=="") ? "" : "Vanus: {$row['vanus']} <br>";
}
Kommentaarid: 29 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  mysql php päring, mis ei prindiks tühjasid välju. mine lehele 1, 2  järgmine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.