Jak sprytnie =?ISO-8859-2?Q?skleja=E6_zapytania=3F?=
Robert Niestroj - 11-05-2007 12:28
Jak sprytnie =?ISO-8859-2?Q?skleja=E6_zapytania=3F?=
Witam, jestem początkujący w PHP i bazach. Na projekt do szkoły muszę stworzyć aplikację kliencką w PHP kontaktującą się z Oracle. No i mam np. stronę, gdzie dodaję sobie jakieś dane do tabeli poprzez INSERT. Kod tutaj: http://rafb.net/p/KJm1in40.html Problem jest taki: NOT NULLe muszą być wypełnione, natomiast pozostałe pola nie są konieczne no i wiadomo, że tworzy to przy dużej ilości atrybutów niekoniecznych dużo przypadków. Napisałem sobie ten skrypt i działa tak jak ma. Może jednak mi ktoś doradzi, czy da się takie sklejanie zapytań napisać bardziej sprytnie, inteligentniej, lepiej, łatwiej. Jeśli tak, to proszę o wskazówki jak :-) Dzięki za pomoc :-)
PS. /Sorry jak post poszedł dwa razy, za pierwszym razem coś poszło nie tak chyba./
-- [ : Robert Niestroj ::::::: member of rally.pl te@m OPOLE :::::::::::: ] [ : [JID: rniestroj@jabberpl.org] : [GG: 1734202] : [ICQ: 162506105] : ] [ : ::::: [ http://firefox.pl ] :::::: [ http://rallyonline.pl ] ::::: ] [ : "W porównaniu z nami Formuła 1 to przedszkole", Colin McRae 2001 : ]
Kijan - 11-05-2007 12:28
A może warto pomyśleć o IMPLODE ? wrzucać wartośći do tablicy i potem "sprytnie połączyć implode ?
-- Pozdrawiam Kijan.
sprawdź na którym miejscu jest Twoja strona WWW http://google.kijan.com
adasiek - 11-05-2007 12:28
Robert Niestroj <ODPOWIADAJACUSUNTOrniestroj@go2.pl.invalid> wrote in news:f08khk.3cc.1@rallyonline.pl:
> http://rafb.net/p/KJm1in40.html [...] > sklejanie zapytań napisać bardziej sprytnie, inteligentniej, lepiej, > łatwiej. Jeśli tak, to proszę o wskazówki jak :-) Dzięki za pomoc :-)
poza tym, ze nie sprawdzasz w zaden sposob, co przychodzi od klienta ;-)
$mapa = array( array('nazwa_atrybutu_z_POST1', 'nazwa_atrybytu_z_SQL1'), array('nazwa_atrybutu_z_POST2', 'nazwa_atrybytu_z_SQL2'), array('nazwa_atrybutu_z_POST3', 'nazwa_atrybytu_z_SQL3') );
$wartosci=array() foreach ($mapa as $mapowanie) { if (isset($_POST[$mapowanie[0])) if ($_POST[$mapowanie[0]]!=='') { $przefilrowane=przefiltruj($_POST[$mapowanie[0]]); $wartosci[]=array($mapowanie[1],$przefiltowane); }; };
$sql='INSERT INTO nazwa tabeli ('; foreach ($kolumny as $wpis) $sql.=$wpis[0].','; // obcninam ostatni przecinek; $sql=substr($sql,0,strlen($sql)-1); $sql.=') VALUES ('; foreach ($kolumny as $wpis) { // tutaj wartoby do zmiennej $wpis dodac jeszcze info, czy wartosc // jest liczbowa czy numeryczna i ewentualnie dodawac lub nie >'<; $sql.='\''.$wpis[1].'\','; }; // obcninam ostatni przecinek; $sql=substr($sql,0,strlen($sql)-1); $sql.=')';
ZALETY: + fragmenty kodu (prawie) sie nie powtarzaja
WADY: - jest pelno klas do obslugi bazy danych, po co pisac wlasny kod?
pzdrv; adas;
Robert Niestroj - 11-05-2007 12:28
It was the 2007-04-19 21:20, when adasiek wrote : > poza tym, ze nie sprawdzasz w zaden sposob, co przychodzi od klienta ;-)
Rozumiem chodzi o sprawdzenie isset() i o tą linię: > if (isset($_POST[$mapowanie[0])) if ($_POST[$mapowanie[0]]!=='') ?
Pierwszy if sprawdza czy "coś przyszło od klienta" a drugi if czy coś tam sensownego jest? Dlaczego nie wystarcza sam drugi if?
> $wartosci=array() > foreach ($mapa as $mapowanie) { > if (isset($_POST[$mapowanie[0])) if ($_POST[$mapowanie[0]]!=='') { > $przefilrowane=przefiltruj($_POST[$mapowanie[0]]); > $wartosci[]=array($mapowanie[1],$przefiltowane); > }; > };
Co ma robić funkcja przefiltruj()? Co ma być w zmiennej mapowanie?
Resztę muszę dogłębniej przeanalizować ;-)
> WADY: > - jest pelno klas do obslugi bazy danych, po co pisac wlasny kod?
Nie rozumiem dlaczego to jest wada? Z jednej strony chciałbym wiedzieć jak co działa. Z drugiej strony możesz zapodać jakieś hasło, link do jakiejś takiej klasy dla beginnerów? ;)
-- [ : Robert Niestroj ::::::: member of rally.pl te@m OPOLE :::::::::::: ] [ : [JID: rniestroj@jabberpl.org] : [GG: 1734202] : [ICQ: 162506105] : ] [ : ::::: [ http://firefox.pl ] :::::: [ http://rallyonline.pl ] ::::: ] [ : "W porównaniu z nami Formuła 1 to przedszkole", Colin McRae 2001 : ]
Robert Niestroj - 11-05-2007 12:28
It was the 2007-04-19 21:08, when Kijan wrote : > A może warto pomyśleć o IMPLODE ? > wrzucać wartośći do tablicy i potem "sprytnie połączyć implode ?
OK, czaję, może się przydać :-)
-- [ : Robert Niestroj ::::::: member of rally.pl te@m OPOLE :::::::::::: ] [ : [JID: rniestroj@jabberpl.org] : [GG: 1734202] : [ICQ: 162506105] : ] [ : ::::: [ http://firefox.pl ] :::::: [ http://rallyonline.pl ] ::::: ] [ : "W porównaniu z nami Formuła 1 to przedszkole", Colin McRae 2001 : ]
adasiek - 11-05-2007 12:28
Robert Niestroj <ODPOWIADAJACUSUNTOrniestroj@go2.pl.invalid> wrote in news:f08o3s.20o.1@rallyonline.pl:
> It was the 2007-04-19 21:20, when adasiek wrote : >> poza tym, ze nie sprawdzasz w zaden sposob, co przychodzi od klienta >> ;-) > > Rozumiem chodzi o sprawdzenie isset() i o tą linię: > > if (isset($_POST[$mapowanie[0])) if ($_POST[$mapowanie[0]]!=='') > ? > > Pierwszy if sprawdza czy "coś przyszło od klienta" a drugi if czy coś > tam sensownego jest? Dlaczego nie wystarcza sam drugi if?
nie, to nie sluzy do tego; to sluzy do sprawdzenia czy przyszlo dane pole formularza; jak sprawdzasz wartosc zmiennej, ktorej nie ma, to dostajesz taki warning: "Index [nazwa] unset in array $_POST";
> >> $wartosci=array() >> foreach ($mapa as $mapowanie) { >> if (isset($_POST[$mapowanie[0])) if >> ($_POST[$mapowanie[0]]!=='') { >> $przefilrowane=przefiltruj($_POST[$mapowanie[0]]); >> $wartosci[]=array($mapowanie[1],$przefiltowane); >> }; >> }; > > Co ma robić funkcja przefiltruj()? Co ma być w zmiennej mapowanie?
przywolana funkcja sprawdza czy klient nie podeslal w formularzu jakiegos SQL injection a jezeli tak, to je wyrzuca; poczytaj o SQL Injection;
jezeli nie wiesz co ma byc w zmiennej $mapowanie, to powinienes sie udac na kurs "Podstawy PHP" lub zajrzec do podrecznika funkcji foreach;
> Resztę muszę dogłębniej przeanalizować ;-)
zgodnie z tym, co napisal Kijan, mozna zastosowac funkcje implode zamiast petli foreach do tworzenia wynikowego lancucha; tylko wymaga to napisania uzytych tablic PHP "inaczej";
adas;
orcus - 11-05-2007 12:28
On Thu, 19 Apr 2007 20:02:26 +0000, adasiek wrote:
>> Pierwszy if sprawdza czy "coś przyszło od klienta" a drugi if czy coś >> tam sensownego jest? Dlaczego nie wystarcza sam drugi if?
tak mnie meczy - a dleczgo nie polaczyles tego && po prostu?
-- Pozdrawiam orcus
..: IE służy do przeglądania internetu z twojego komputera i na odwrót :.
adasiek - 11-05-2007 12:28
orcus <orcus@ekoterm.N05P4M.net> wrote in news:pan.2007.04.19.20.02.44.8222@ekoterm.N05P4M.n et:
> On Thu, 19 Apr 2007 20:02:26 +0000, adasiek wrote: > >>> Pierwszy if sprawdza czy "coś przyszło od klienta" a drugi if czy coś >>> tam sensownego jest? Dlaczego nie wystarcza sam drugi if? > > tak mnie meczy - a dleczgo nie polaczyles tego && po prostu? >
http://pl2.php.net/manual/pl/languag...rs.logical.php
dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej tego pierwszego; wiec jesli zmiennej nie bedzie, to drugi warunek (polaczony &&) i tak wywali warning; moze tak nie jest ;-) nie umiem znalezc odpowiedzi na to w dokumentacji;
adas;
andreux - 11-05-2007 12:28
adasiek napisał(a): > dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - > spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej > tego pierwszego; wiec jesli zmiennej nie bedzie, to drugi warunek > (polaczony &&) i tak wywali warning; moze tak nie jest ;-) nie umiem > znalezc odpowiedzi na to w dokumentacji;
<?php
error_reporting(E_ALL);
$a = 3;
if( $a > 4 && ($a = 6)); echo $a;
if( $a < 4 && ( $a = 6)); echo $a;
// inaczej if( $a < 4 && $b > 3); if( $a > 4 && $b > 3); // generuje notice bo lewa==true
?>
pozdrawiam, Andreux
orcus - 11-05-2007 12:28
On Thu, 19 Apr 2007 20:25:48 +0000, adasiek wrote:
>> tak mnie meczy - a dleczgo nie polaczyles tego && po prostu?
> dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - > spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej
tak tez myslalem - juz w C wprowadzono zasade ze wyrazenia logiczne liczy sie tylko tak dlugo jak nie mozna zwrocic wyniku co w polaczeniu z "evaluowaniem" wyrazen moze dawac ciekawe efekty.
czyli dla || jak pierwszy warunek jest 1 to drugi nie jest sprawdzany a dla && jak pierwszy jest 0 to drugi nie jest sprawdzany.
-- Pozdrawiam orcus
..: IE służy do przeglądania internetu z twojego komputera i na odwrót :.
adasiek - 11-05-2007 12:28
orcus <orcus@ekoterm.N05P4M.net> wrote in news:pan.2007.04.19.20.44.15.165869@ekoterm.N05P4M .net:
> On Thu, 19 Apr 2007 20:25:48 +0000, adasiek wrote: > >>> tak mnie meczy - a dleczgo nie polaczyles tego && po prostu? > >> dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - >> spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej > > tak tez myslalem - juz w C wprowadzono zasade ze wyrazenia logiczne liczy > sie tylko tak dlugo jak nie mozna zwrocic wyniku co w polaczeniu z > "evaluowaniem" wyrazen moze dawac ciekawe efekty.
nie obawiasz sie, ze to sie moze zmienic w blizej nieokreslonej przyszlosci - albo np. byc roznie interpretowane przez rozne interpretery jezyka PHP? czy moze jest to fragmentem standardu jezyka?
pzdrv; adas;
Borys =?iso-8859-2?Q?Pogore=B3o?= - 11-05-2007 12:28
Dnia Thu, 19 Apr 2007 20:57:40 +0000 (UTC), adasiek napisał(a):
> nie obawiasz sie, ze to sie moze zmienic w blizej nieokreslonej przyszlosci > - albo np. byc roznie interpretowane przez rozne interpretery jezyka PHP? > czy moze jest to fragmentem standardu jezyka?
To akurat jest jedna z zasad przy budowaniu efektywnych kompilatorów / parserów - po co tracić moc obliczeniową na niepotrzebne czynności? Nie powinno się to nigdy zmienić.
-- Borys Pogoreło borys(#)leszno,edu,pl
orcus - 11-05-2007 12:28
On Thu, 19 Apr 2007 20:57:40 +0000, adasiek wrote:
> nie obawiasz sie, ze to sie moze zmienic w blizej nieokreslonej przyszlosci > - albo np. byc roznie interpretowane przez rozne interpretery jezyka PHP? > czy moze jest to fragmentem standardu jezyka?
to sie nie zmienilo co najmniej od 1972 roku(nie wiem jak jezyki przed C) i prawodopodobienstwo ze sie zmieni jest dla mnie takie same jak to ze ktos zmieni "echo" na cos innego.
-- Pozdrawiam orcus
..: IE służy do przeglądania internetu z twojego komputera i na odwrót :.
Miroo - 11-05-2007 12:28
=?iso-8859-2?Q?Re:_Jak_sprytnie_skleja=E6_zapytania=3F?=
Użytkownik "Borys Pogoreło" <borys@pl.edu.leszno> napisał w wiadomości news:1knaq0kkgrap$.1cn574zmv50q6.dlg@40tude.net... > Dnia Thu, 19 Apr 2007 20:57:40 +0000 (UTC), adasiek napisał(a): > >> nie obawiasz sie, ze to sie moze zmienic w blizej nieokreslonej >> przyszlosci >> - albo np. byc roznie interpretowane przez rozne interpretery jezyka PHP? >> czy moze jest to fragmentem standardu jezyka? > > To akurat jest jedna z zasad przy budowaniu efektywnych kompilatorów / > parserów - po co tracić moc obliczeniową na niepotrzebne czynności? Nie > powinno się to nigdy zmienić.
No cóż, ja piszę zazwyczaj tak jak adasiek. Dlaczego? Bo kiedyś wbrew temu co było w dokumentacji w warunku złożonym sprawdzany był kolejny warunek i wszystko się sypało. Dlaczego tak się robiło? Nie wiem - może optymalizator zgłupiał? Było to w C#, a nie PHP. Druga sprawa - w Delphi jest w opcjach projektu "Complete boolean eval" opisana w helpie nastepująco: "This means that every operand of a Boolean expression built from the and and or operators is guaranteed to be evaluated, even when the result of the entire expression is already known." Nigdy nie wiesz co w opcjach poustawia sobie osoba korzystająca z twojego kodu (nawet ty :> ) więc bezpieczniej rozbijać warunki tego typu.
Oczywiście, żeby nie było niedomówień - chodzi tylko o sytuacje, gdy kolejny warunek się wykłada jeśli pierwszy (nie) jest spełniony, a nie o wszystkie złożone warunki :) -- Pozdrawiam Miroo (http://miroo.ovh.org)
Wojciech Bancer - 11-05-2007 12:28
adasiek napisał(a):
[...]
> http://pl2.php.net/manual/pl/languag...rs.logical.php
> dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - > spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej > tego pierwszego;
Nie. Tak się dzieje w przypadku ||, nie &&.
> wiec jesli zmiennej nie bedzie, to drugi warunek (polaczony &&) > i tak wywali warning; moze tak nie jest ;-) nie umiem znalezc > odpowiedzi na to w dokumentacji;
To raczej wynika z budowy kompilatorów. Bez sensu byłoby sprawdzać dwa warunki, skoro juz po pierwszym jest właściwa decyzja. :)
-- Wojciech Bancer
Wojciech Bancer - 11-05-2007 12:28
Miroo napisał(a):
[...]
>> To akurat jest jedna z zasad przy budowaniu efektywnych kompilatorów / >> parserów - po co tracić moc obliczeniową na niepotrzebne czynności? Nie >> powinno się to nigdy zmienić.
> No cóż, ja piszę zazwyczaj tak jak adasiek. > Dlaczego? Bo kiedyś wbrew temu co było w dokumentacji > w warunku złożonym sprawdzany był kolejny warunek i wszystko > się sypało. Dlaczego tak się robiło? Nie wiem - może optymalizator > zgłupiał? Było to w C#, a nie PHP.
Optymalizator nie głupieje. Co najwyżej człowiek nie wie czasem który operator ma wyższy priorytet. :)
[...]
-- Wojciech Bancer
Miroo - 11-05-2007 12:28
=?iso-8859-2?Q?Re:_Jak_sprytnie_skleja=E6_zapytania=3F?=
Użytkownik "Wojciech Bancer" <proteus@post.pl> napisał w wiadomości news:slrnf2gqvi.d71.proteus@ender.elsat.net.pl...
>> No cóż, ja piszę zazwyczaj tak jak adasiek. >> Dlaczego? Bo kiedyś wbrew temu co było w dokumentacji >> w warunku złożonym sprawdzany był kolejny warunek i wszystko >> się sypało. Dlaczego tak się robiło? Nie wiem - może optymalizator >> zgłupiał? Było to w C#, a nie PHP. > > Optymalizator nie głupieje. Co najwyżej człowiek nie wie czasem który > operator ma wyższy priorytet. :)
Rozwiń swoją myśl.. Dodam, że dla czytelności kodu i świętego spokoju nie oszczędzam na nawiasach w wyrażeniach warunkowych. -- Pozdrawiam Miroo (http://miroo.ovh.org)
Wojciech Bancer - 11-05-2007 12:28
Miroo napisał(a):
>>> się sypało. Dlaczego tak się robiło? Nie wiem - może optymalizator >>> zgłupiał? Było to w C#, a nie PHP. >> Optymalizator nie głupieje. Co najwyżej człowiek nie wie czasem który >> operator ma wyższy priorytet. :)
> Rozwiń swoją myśl.. > Dodam, że dla czytelności kodu i świętego spokoju nie > oszczędzam na nawiasach w wyrażeniach warunkowych.
Rozwinę. Jeszcze nie widziałem i nie słyszałem o przypadku, w którym kompilator stosujący składnię C popełnił błąd przy analizowaniu operatorów logicznych. Zawsze błąd powodował użytkownik, który pojechał gdzieś zbyt dużą / zbyt małą liczbą nawiasów.
-- Wojciech Bancer
=?ISO-8859-2?Q?=A3ukasz_Filut?= - 11-05-2007 12:28
Wojciech Bancer pisze: > Miroo napisał(a): > >>>> się sypało. Dlaczego tak się robiło? Nie wiem - może optymalizator >>>> zgłupiał? Było to w C#, a nie PHP. >>> Optymalizator nie głupieje. Co najwyżej człowiek nie wie czasem który >>> operator ma wyższy priorytet. :) > >> Rozwiń swoją myśl.. >> Dodam, że dla czytelności kodu i świętego spokoju nie >> oszczędzam na nawiasach w wyrażeniach warunkowych. > > Rozwinę. Jeszcze nie widziałem i nie słyszałem o przypadku, w którym > kompilator stosujący składnię C popełnił błąd przy analizowaniu > operatorów logicznych. Zawsze błąd powodował użytkownik, który > pojechał gdzieś zbyt dużą / zbyt małą liczbą nawiasów. > tu sie nie zgodzę. Np gcc w wersji 3 przy optymalizacji o3 różne dziwne rzeczy wyczynia, szczególnie przy inkrementacji wskaźników ... wersja 4 już jest ok. Pozdrawiam
-- orcus Cztery zjawiska blokują postęp ludzkości: ignorancja, głupota, komitety normalizacyjne oraz ludzie sprzedający komputery. http://www.wsb.pl
orcus - 11-05-2007 12:28
On Fri, 20 Apr 2007 11:06:12 +0200, Łukasz Filut wrote:
> tu sie nie zgodzę. Np gcc w wersji 3 przy optymalizacji o3 różne dziwne > rzeczy wyczynia, szczególnie przy inkrementacji wskaźników ... > wersja 4 już jest ok.
taa... ale to sa _bledy_ i tak zawsze beda traktowane.
Nie zapominajac o starym problemie rozwiazywanym poprzez dopisanie "c = c" na poczatku programu.
To jeste element standardu jezyka i tak powinno pozostac. Jak sie zmieni to bedzie o tym glosno bo to tak jakby jak juz pisalem ktos echo zamienil na cos innego.
-- Pozdrawiam orcus
..: IE służy do przeglądania internetu z twojego komputera i na odwrót :.
Miroo - 11-05-2007 12:28
=?iso-8859-2?Q?Re:_Jak_sprytnie_skleja=E6_zapytania=3F?=
Użytkownik "Wojciech Bancer" <proteus@post.pl> napisał w wiadomości news:slrnf2gvfl.d71.proteus@ender.elsat.net.pl...
> Rozwinę. Jeszcze nie widziałem i nie słyszałem o przypadku, w którym > kompilator stosujący składnię C popełnił błąd przy analizowaniu > operatorów logicznych. Zawsze błąd powodował użytkownik, który > pojechał gdzieś zbyt dużą / zbyt małą liczbą nawiasów.
Programistą jestem nie od dziś, ale oczywiście zdarza mi się popełniać nawet bardzo głupie błędy. W tamtym przypadku jednak zmiana && na dwa ify rozwiązała problem, nie miałem czasu wnikać co było przyczyną. Zresztą często wolę napisać nieco nadmiarowo niż potem szukać godzinami przyczyny. Widziałem już różne dziwne rzeczy wyczyniane przez kompilatory. Byc może kompilatory same w sobie były ok, a sypało się coś na styku IDE<->kopilator i kompilowany był nieco inny kod, niż widoczny na ekranie.
Pamiętam pierwszą niespodzianke, jaką zrobił mi kompilator C. Przyniosłem kod napisany w domu pod linuksem na uczelnię. Włączam kompilację na Solarisie i bach, error. Co jest? Okazało się, że kompilator C na Solarisie wymagał entera po ostatniej linijce kodu :) -- Pozdrawiam Miroo (http://miroo.ovh.org)
Borys =?iso-8859-2?Q?Pogore=B3o?= - 11-05-2007 12:28
Dnia Fri, 20 Apr 2007 11:38:50 +0200, Miroo napisał(a):
> Pamiętam pierwszą niespodzianke, jaką zrobił mi kompilator C. > Przyniosłem kod napisany w domu pod linuksem na uczelnię. > Włączam kompilację na Solarisie i bach, error. Co jest? > Okazało się, że kompilator C na Solarisie wymagał entera > po ostatniej linijce kodu :)
Skompiluj swój kod z "-Wall -W -Werror -ansi -pedantic" to się dopiero zdziwisz ;)
-- Borys Pogoreło borys(#)leszno,edu,pl
=?ISO-8859-2?Q?=A3ukasz_Filut?= - 11-05-2007 12:28
orcus pisze: > On Fri, 20 Apr 2007 11:06:12 +0200, Łukasz Filut wrote: > >> tu sie nie zgodzę. Np gcc w wersji 3 przy optymalizacji o3 różne dziwne >> rzeczy wyczynia, szczególnie przy inkrementacji wskaźników ... >> wersja 4 już jest ok. > > taa... ale to sa _bledy_ i tak zawsze beda traktowane. > > Nie zapominajac o starym problemie rozwiazywanym poprzez dopisanie "c = c" > na poczatku programu. > > To jeste element standardu jezyka i tak powinno pozostac. Jak sie zmieni > to bedzie o tym glosno bo to tak jakby jak juz pisalem ktos echo zamienil > na cos innego. >
nie no ok, pisze tylko że takowe się zdarzają, a kolega w to wątpił ;). Pozdrawiam
-- orcus Cztery zjawiska blokują postęp ludzkości: ignorancja, głupota, komitety normalizacyjne oraz ludzie sprzedający komputery. http://www.wsb.pl
Tomasz =?UTF-8?Q?Pi=C5=82at?= - 11-05-2007 12:28
adasiek <podolany@poczta.wp.pl> wrote: >>>> tak mnie meczy - a dleczgo nie polaczyles tego && po prostu? >> >>> dlatego, ze taka konstukcja - w moim (byc moze mylnym) przekonaniu - >>> spowoduje sprawdzenie obu warunkow niezaleznie od wartosci logicznej >> >> tak tez myslalem - juz w C wprowadzono zasade ze wyrazenia logiczne liczy >> sie tylko tak dlugo jak nie mozna zwrocic wyniku co w polaczeniu z >> "evaluowaniem" wyrazen moze dawac ciekawe efekty. > > nie obawiasz sie, ze to sie moze zmienic w blizej nieokreslonej przyszlosci > - albo np. byc roznie interpretowane przez rozne interpretery jezyka PHP? > czy moze jest to fragmentem standardu jezyka?
Nie może być różnie interpretowane, jest to standard i nie zmieni się. Keywords dla zainteresowanych: short-circuiting, lazy evaluation.
Warto tylko pamiętać, że "&&"/"||" mają wyższy priorytet niż "and"/"or" (i nie tylko): http://www.php.net/manual/en/languag...ors.precedence
Ponc -- Kto misiowi urwał ucho?
Robert Niestroj - 11-05-2007 12:28
It was the 2007-04-19 21:20, when adasiek wrote :
Przeanalizowałem twój kod i proszę o poprawienie mnie jak coś źle rozumiem.
> $mapa = array( > array('nazwa_atrybutu_z_POST1', 'nazwa_atrybytu_z_SQL1'), > array('nazwa_atrybutu_z_POST2', 'nazwa_atrybytu_z_SQL2'), > array('nazwa_atrybutu_z_POST3', 'nazwa_atrybytu_z_SQL3') > );
Tworzysz sobie tablicę dwuwymiarową z nazwami pól z formularzy i odpowiadającymi im nazwami kolumn w Oracle. Tablica 2-kolumnowa i wierszy tyle w danym formularzu pól.
> $wartosci=array()
Tworzysz sobie pustą tablicę.
> foreach ($mapa as $mapowanie) {
Dla każdego elementu z $mapa czyli będzie "zwracać" jeden wiersz z tej tabeli czyli tablicę z nazwą pola formularza i nazwą kolumny w bazie.
> if (isset($_POST[$mapowanie[0])) if ($_POST[$mapowanie[0]]!=='') {
Sprawdzasz, czy zmienna z formularza została przesłana - isset. Drugi if sprawdza czy jest tam pusta wartość.
> $przefilrowane=przefiltruj($_POST[$mapowanie[0]]);
Ta linia jest potrzebna do rozwiązania problemu SQL Injection. Gdyby mnie problem wstępnie nie interesował to mogę pominąć.
> $wartosci[]=array($mapowanie[1],$przefiltowane);
Tworzysz nową tablicę z dwuwymiarową, gdzie pierwsza kolumna to nazwa kolumny w bazie a druga kolumna to wartosc tam wpisywana.
> }; > }; > > $sql='INSERT INTO nazwa tabeli (';
Początek stringu
> foreach ($kolumny as $wpis) $sql.=$wpis[0].',';
Skąd tutaj tablica $kolumny? Nie powinna tu być $wartosci i wtedy nazwa kolumny brana z $wpis[0] ?
> // obcninam ostatni przecinek; > $sql=substr($sql,0,strlen($sql)-1); > $sql.=') VALUES (';
Tu jasne.
> foreach ($kolumny as $wpis) { > // tutaj wartoby do zmiennej $wpis dodac jeszcze info, czy wartosc > // jest liczbowa czy numeryczna i ewentualnie dodawac lub nie >'<; > $sql.='\''.$wpis[1].'\','; > };
To samo co wyzej - tez chyba powinno byc $wartosci a nie $kolumny? Poza tym jaka jest różnica między wartością liczbową a numeryczną? Czy nie powinno to być raczej rozpoznawanie czy wartość jest liczbą lub liczbą nie jest i wtedy dodawać >'< ? Gdzie najlepiej wpisać info o typie danych - już w tablicy $mapa? Tak samo dopisać też informacje, które kolumny są konieczne? Bo Twój skrypt jak widzę tego nie uzwględnia?
> // obcninam ostatni przecinek; > $sql=substr($sql,0,strlen($sql)-1); > $sql.=')';
Tu jasne.
> WADY: > - jest pelno klas do obslugi bazy danych, po co pisac wlasny kod?
Jak możesz zapodaj link do jakiejś prostej klasy dla beginneró w PHP :-) Twój mail w polu From jest aktualny i bez żadnego spamtrapa? Chciałbym się w razie czego zapytać coś z PHP na priv.
-- [ : Robert Niestroj ::::::: member of rally.pl te@m OPOLE :::::::::::: ] [ : [JID: rniestroj@jabberpl.org] : [GG: 1734202] : [ICQ: 162506105] : ] [ : ::::: [ http://firefox.pl ] :::::: [ http://rallyonline.pl ] ::::: ] [ : "W porównaniu z nami Formuła 1 to przedszkole", Colin McRae 2001 : ]
adasiek - 11-05-2007 12:28
Robert Niestroj <ODPOWIADAJACUSUNTOrniestroj@go2.pl.invalid> wrote in news:f0bm6c.26s.1@rallyonline.pl:
>> $wartosci=array() > > Tworzysz sobie pustą tablicę. > [...] >> $wartosci[]=array($mapowanie[1],$przefiltowane); > > Tworzysz nową tablicę z dwuwymiarową, gdzie pierwsza kolumna to nazwa > kolumny w bazie a druga kolumna to wartosc tam wpisywana.
i zapisuje to jako kolejny wiersz tablicy $wartosci ;-)
>> foreach ($kolumny as $wpis) $sql.=$wpis[0].','; > > Skąd tutaj tablica $kolumny? Nie powinna tu być $wartosci i wtedy > nazwa kolumny brana z $wpis[0] ?
acha - tak; oczywiscie w trakcie pisania stwierdzilem, ze to bedzie bardziej odpowiednia nazwa i jak widac nie zamienilem tego wszedzie;
> Poza tym jaka jest różnica między wartością liczbową a numeryczną? Czy > nie powinno to być raczej rozpoznawanie czy wartość jest liczbą lub > liczbą nie jest i wtedy dodawać >'< ? Gdzie najlepiej wpisać info o
tak - wlasnie to mialem na mysli;
> typie danych - już w tablicy $mapa? Tak samo dopisać też informacje, > które kolumny są konieczne? Bo Twój skrypt jak widzę tego nie > uzwględnia?
a jednak - po prostu do tablicy $wartosci wchodza tylko te elementy, ktore mialy odpowiadajece im pole w tablicy $_POST - prawda? wiec wszystkie elementy $wartosci sa "konieczne";
>> WADY: >> - jest pelno klas do obslugi bazy danych, po co pisac wlasny kod? > > Jak możesz zapodaj link do jakiejś prostej klasy dla beginneró w PHP > :-) Twój mail w polu From jest aktualny i bez żadnego spamtrapa?
niestety - nie pracuje na co dzien z bazami danych pod PHP i nie moge za bafdzo nic polecic; pewnie bym sprawdzil co oferuje w tej materii PEAR i http://adodb.sourceforge.net/ oraz przejrzal zasoby dostepne tu: http://www.hotscripts.com/
> Chciałbym się w razie czego zapytać coś z PHP na priv.
to bardzo zly pomysl ;-) ale mail dziala;
adas;
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
mecze sie i mecze i nic - zapytanie czesciowe
[sql][pgsql] zapytanie sql
[mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu.
[MySQL] Zapytanie z pliku , wynik do pliku
pytanie o zapytanie z having count = count z innej kolumny
zanotowane.pldoc.pisz.plpdf.pisz.pldirtyboys.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|