Inside07 Posted November 24, 2004 Report Share Posted November 24, 2004 Ieksh php esmu diezgan zaljsh un probleema ir sekojosha ir lapa, kur tiek nolasiiti dati no db, bet ne pilniibaa visi shajaa lapaa attieciigi katram db ieraksta ID ir links, kas atver jaunu logu, kura tiek ielasiiti visi attieciiga ID dati no db. Taatad jautaajums, kaa panaakt to, lai tas jaunais logs saprot to, kura ID datus vinjam vajag nolasiit. Jav ieprieksh paldies Link to comment Share on other sites More sharing options...
Venom Posted November 24, 2004 Report Share Posted November 24, 2004 izejošā: echo '<a target="_blank" href="some.php?ID='.$mysql_result['id'].'>link</a>'; saņēmošā: if (!empty($_GET['ID'])) $_GET['ID']=(int)$_GET['ID']; mysql_query("SELECT * FROM table WHERE id='".$_GET['ID']."'"); etc Link to comment Share on other sites More sharing options...
Inside07 Posted November 24, 2004 Author Report Share Posted November 24, 2004 Venom mega paldies shitas straadaa Link to comment Share on other sites More sharing options...
azpage Posted November 25, 2004 Report Share Posted November 25, 2004 Esmu jau vairakas reizes ieverojis ka priekshaa skaitlim liek (int). Tachu nezinu, kaadeel tas nepiecieshams, pareizi straadaas arii bez taa, vai ne ? Varbuut notiek aatraak darbiibas ar mainiigiem ? Link to comment Share on other sites More sharing options...
рпр Posted November 25, 2004 Report Share Posted November 25, 2004 tu domaaji int(34)? Link to comment Share on other sites More sharing options...
azpage Posted November 25, 2004 Report Share Posted November 25, 2004 Jaa, ko dod tieshi "(int)", kas atrodas pirms skaitlja Link to comment Share on other sites More sharing options...
Venom Posted November 25, 2004 Report Share Posted November 25, 2004 Esmu jau vairakas reizes ieverojis ka priekshaa skaitlim liek (int). Tachu nezinu, kaadeel tas nepiecieshams, pareizi straadaas arii bez taa, vai ne ? Varbuut notiek aatraak darbiibas ar mainiigiem ? (int) (float) un (string) priekšā mainīgajam ir vienlīdzīgi attiecīgi $x=intval($x); $x=floatval($x); $x=strval($x); resp. nomaina mainīgā tipu uz attiecīgi veselskaitli, daļskaitli, zīmjrindu (o kādu vārdu izdomāju!) augstākminētā piemērā izmantoju, lai izvairītos no t.s. SQL injekcijām un nepareizo datu nodošanu jo ja kāds iedomājas adreses laukā ierakstīt ?ID=2.3 - nekas netiks atrasts ?ID=teikums - tas pats ?ID=>0 pieprasījums nomainīsies par "SELECT * FROM table WHERE id=>0" un tiks atgriesti visi ieraksti ?ID=0 OR other_column LIKE '%' - izvēlēties kādus citus ierakstus ar (int) zīmjrinda (string, text) pārtop par 0 un kvērijs godīgi atbild, ka neko tādu nav atradis un tās vēl ir puķītes ieteicams vispār arī izmantot mysql string kontekstu, ja vien neesi pilnībā drošs par to, kas ienāks, resp. likt "... WHERE id='".$_GET['ID']."'" t.i. mysql saņems, piem WHERE id='2', 'pats pārbaudīs, ka id ir jābūt INTEGER, pārkonvertēs '2' par 2 un izvēlēsies, un otrādi, ja tiks arī mysql pusē saņemts id='text', 'text' pārtaps par 0 2pnp- int(34) - kur tu tādu i redzējis? saprotu, ja būtu chr() Link to comment Share on other sites More sharing options...
azpage Posted November 25, 2004 Report Share Posted November 25, 2004 Liels paldies Venom. Visu sapratu iznjemot sho rindu: ar (int) zīmjrinda (string, text) pārtop par 0 un kvērijs godīgi atbild, ka neko tādu nav atradis Nesapratu kaa partop par 0, par citu vertiibu nevar paartapt ? Vai to 0 nodod tam mainiigam ? Godiigi sakot nesapratu Link to comment Share on other sites More sharing options...
рпр Posted November 25, 2004 Report Share Posted November 25, 2004 (edited) 2pnp- int(34) - kur tu tādu i redzējis? saprotu, ja būtu chr() nu es uz aatru roku rakstiiju, lai paarliecinaatos vai vinjsh domaa funkciju vai kautkaadus mainiiigaa prefiksus, galvenais, ka visu noskaidrojaam, ko veeleejaamies. azpage: ja sql kolonas tips ir piemeeram int, tad ievadot insert kolone="teksts", kolone tomeer buus 0 nevis "teksts", jo kolonas tips tomeer ir integer nevis text vai varchar utt. ja tu liec tos nosaukumus peedinjaas, tad sqk arii var paarbaudiit vai tu esi ievadiijis pareizi parametrus, bet ja neliec peedinjas un tev $_GET['id'] nav aizpildiits, tad visticamaak buus sql kljuuda, "where id=" buu noraadiits nepareizi. nu visaadi gadaas. iisaak sakot lieto peedinjas! Edited November 25, 2004 by рпр Link to comment Share on other sites More sharing options...
bubu Posted November 25, 2004 Report Share Posted November 25, 2004 (edited) php tu nepareizi saprati. azpage: ja lietotājs ņems un sačakarēs url tā, ka lapai pados: lapa.php?id=blabla tad loģiski, ka nav jēga salīdzināt (un vispār nedrīkst to atļaut!) meklēto id ar tekstu. To arī nodrošina šī rinda: $_GET['ID']=(int)$_GET['ID']; Jo (int) mēģina pārviedot mainīgo par integer tipu, bet tā kā blabla nav integers, tad tā pārveidos to par skaitli 0. Un datubāzes parasti nav ieraksta ar id=0, jo mysql laikam savu auto_increment sāk no 1. Pēdiņas protams arī der SQL teikumos lietot, tad tik vēl jāpieliek klāt addslashes() un būs pavisam ok :) Edited November 25, 2004 by bubu Link to comment Share on other sites More sharing options...
Venom Posted November 25, 2004 Report Share Posted November 25, 2004 Liels paldies Venom. Visu sapratu iznjemot sho rindu: ar (int) zīmjrinda (string, text) pārtop par 0 un kvērijs godīgi atbild, ka neko tādu nav atradis Nesapratu kaa partop par 0, par citu vertiibu nevar paartapt ? Vai to 0 nodod tam mainiigam ? Godiigi sakot nesapratu vajadzēja tev no sākuma pasēdēt kādā Turbo Pascalī, lai pamācītos kas ir mainīgo tipi, un kā tie pielietojami. Here is a little something to blow ya mind: $x=1; $expression=array ( 1+1, 1+1.0, 1+'text', 'text'+1, $x.'text', 'text'.$x, 1*2, 1*2.0, 2*'text', (0), (1), (0.0), (null), ('text'), (!'text'), (1).'text', (1.2).'text', (int)'text', (float)'text', (string)1, (string)1.2, (int)1.2, (int)'1.2 in text', (float)'1.2 in text', (int)'text and then 1', 'text'*0, '23'*1, '45'*7.8, trim(' text '), trim(''), (trim('')), (!false), (false && trim('')), ++$x, $x++, --$x, $x--, 1+ ++$x, 1+$x++, 4- --$x, 4-$x--, floor(4.2), floor(4.49), ceil(4.2), ceil(4.98), 0.1+0.7, 0.8*10, floor((0.1+0.7)*10), $tmp=array(), $x=3, $x=($x+4), $ary[1][2]=2, $x=$y=$z=1, $y, $x+=4, $x*=4, $x/=5, $x.='text', $x>>1, $x<<2, $ary[2][1]=$ary[1]=$ary=array(1), ); ob_start(); foreach($expression as $result) var_dump($result); echo nl2br(ob_get_clean()); print '<pre>'.print_r($ary,1).'</pre>'; Link to comment Share on other sites More sharing options...
рпр Posted November 25, 2004 Report Share Posted November 25, 2004 php tu nepareizi saprati.azpage: ja lietotājs ņems un sačakarēs url tā, ka lapai pados: lapa.php?id=blabla tad loģiski, ka nav jēga salīdzināt (un vispār nedrīkst to atļaut!) meklēto id ar tekstu. To arī nodrošina šī rinda: $_GET['ID']=(int)$_GET['ID']; Jo (int) mēģina pārviedot mainīgo par integer tipu, bet tā kā blabla nav integers, tad tā pārveidos to par skaitli 0. Un datubāzes parasti nav ieraksta ar id=0, jo mysql laikam savu auto_increment sāk no 1. Pēdiņas protams arī der SQL teikumos lietot, tad tik vēl jāpieliek klāt addslashes() un būs pavisam ok :) es sapratu pareizi, pameegjini pats sql konsolee ievadiit integer vietaa stringu, galaa buus nulles nevis errors. Link to comment Share on other sites More sharing options...
bubu Posted November 25, 2004 Report Share Posted November 25, 2004 njā, Venom pacenties ;) Link to comment Share on other sites More sharing options...
azpage Posted November 25, 2004 Report Share Posted November 25, 2004 Venom, super lielas paldies par paskaidrojumu ar piemeeru. Nju Pascal esmu seedeejis daudz un to parzinu pec manam domaam perfekti. Skaidrs ka int ir integers, tachu nebija ipashas skaidriibas kada jeega no tas funkcijas ir php, ja php pats automaatiski nosaka datu tipu. Link to comment Share on other sites More sharing options...
bubu Posted November 26, 2004 Report Share Posted November 26, 2004 ...ja php pats automaatiski nosaka datu tipu. Tur jau tā nelaime. Visi jaunie php-isti tagad domā, ka vajag uzspļaut datu tipiem, un rakstīt kā pagadās, gan jau php pats 'pareizi' noteiks datu tipu. Bet redz, ne vienmēr tas ir labi un tā vajag. Link to comment Share on other sites More sharing options...
Recommended Posts