Jump to content
php.lv forumi

atvert linku jaunaa logaa un nolasiit datus


Inside07

Recommended Posts

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

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

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

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 by рпр
Link to comment
Share on other sites

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 by bubu
Link to comment
Share on other sites

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

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

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

...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

×
×
  • Create New...