Inside07 Posted November 24, 2004 Report 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
Venom Posted November 24, 2004 Report 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
Inside07 Posted November 24, 2004 Author Report Posted November 24, 2004 Venom mega paldies shitas straadaa
azpage Posted November 25, 2004 Report 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 ?
azpage Posted November 25, 2004 Report Posted November 25, 2004 Jaa, ko dod tieshi "(int)", kas atrodas pirms skaitlja
Venom Posted November 25, 2004 Report 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()
azpage Posted November 25, 2004 Report 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
рпр Posted November 25, 2004 Report 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 рпр
bubu Posted November 25, 2004 Report 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
Venom Posted November 25, 2004 Report 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>';
рпр Posted November 25, 2004 Report 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.
azpage Posted November 25, 2004 Report 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.
bubu Posted November 26, 2004 Report 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.
Recommended Posts