Autor | Zpráva | ||
---|---|---|---|
fuckin Profil |
#1 · Zasláno: 30. 6. 2009, 15:34:28
Mam zajimavy problem.
echo $obsah[$i+1]; // tento zapis funguje echo '$obsah[$i+1]'; // tento zapis taky funguje echo "$obsah[$i+1]"; // ale tento zapis nefunguje, muze me to nekdo vysvetlit ? no ale to neni ten hlavni problem, problem je tady, nefunfuje me toto $dotaz = mysql_query("INSERT INTO jidla (nazev,bilkoviny,sacharidy,tuky,energie) VALUES ('$obsah[$i]','$obsah[$i+1]','$obsah[$i+2]','$obsah[$i+3]','$obsah[$i+4]')") or die("mysql_error()"); //problem je u pricitani tech indexu u pole, bez toho to jde OK Zkousel sem mnoho moznosti, i bez uvozovek ale porad nic. Mysql_error() Parse error: syntax error, unexpected T_VARIABLE in */xxx.php on line 15 |
||
tcladin Profil |
#2 · Zasláno: 30. 6. 2009, 18:05:58
fuckin
Ahoj. všimni si barev skriptu v jednotl. řádcích. už to ti napovídá, špatnou skladbu. asi nesmis pouzit promenou-pole v dvojitych uvozovkach. já to beru jako fakt. Ale možná to jde. tenhle probl. znám : ("INSERT INTO jidla (nazev,bilkoviny,sacharidy,tuky,energie) VALUES ('$obsah[$i]','$obsah[$i+1]','$obsah[$i+2]','$obsah[$i+3]','$obsah[$i+4]')") or die("mysql_error()"); //problem je u pricitani tech indexu u pole, bez toho to jde OK a řeším to takto(neznám jak pouzit pole v sql dotazu, zna nekdo?...): for ($i = 1; $i <= n; $i++) { '$obsah=$obsah[$i]; $obsah1=$obsah[$i+1]; $obsah2=$obsah[$i+2]; $obsah3=$obsah[$i+3]; $obsah4=$obsah[$i+4]; "INSERT INTO jidla (nazev,bilkoviny,sacharidy,tuky,energie) VALUES ('$obsah','$obsah1','$obsah2','$obsah3','$obsah4')") or die("mysql_error()"); //problem je u pricitani tech indexu u pole, bez toho to jde OK } |
||
tcladin Profil |
#3 · Zasláno: 30. 6. 2009, 18:07:18
fuckin
Ahoj. všimni si barev skriptu v jednotl. řádcích. už to ti napovídá, špatnou skladbu. asi nesmis pouzit promenou-pole v dvojitych uvozovkach. já to beru jako fakt. Ale možná to jde. tenhle probl. znám : ("INSERT INTO jidla (nazev,bilkoviny,sacharidy,tuky,energie) VALUES ('$obsah[$i]','$obsah[$i+1]','$obsah[$i+2]','$obsah[$i+3]','$obsah[$i+4]')") or die("mysql_error()"); //problem je u pricitani tech indexu u pole, bez toho to jde OK a řeším to takto(neznám jak pouzit pole v sql dotazu, zna nekdo?...): for ($i = 1; $i <= n; $i++) { '$obsah=$obsah[$i]; $obsah1=$obsah[$i+1]; $obsah2=$obsah[$i+2]; $obsah3=$obsah[$i+3]; $obsah4=$obsah[$i+4]; "INSERT INTO jidla (nazev,bilkoviny,sacharidy,tuky,energie) VALUES ('$obsah','$obsah1','$obsah2','$obsah3','$obsah4')") or die("mysql_error()"); //problem je u pricitani tech indexu u pole, bez toho to jde OK } |
||
fuckin Profil |
#4 · Zasláno: 30. 6. 2009, 19:10:10
asi? Tak takova odpoved me nestaci, chci vedet duvod proc jen v php toto nefunguje. Je jasne ze tim resenim to jde ale ja chci vedet proste proc :). Nejde me az tak o to jak to udelat ptze uz sem to vyresil predtim nez si napsal, ale o ten duvod proc ve fci to nelze.
|
||
tiso Profil |
#5 · Zasláno: 30. 6. 2009, 20:22:47
Vy ste sa našli, chlapci...
fuckin - http://us3.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple |
||
TomášK Profil |
#6 · Zasláno: 30. 6. 2009, 20:28:30 · Upravil/a: TomášK
Znáš nějaký jazyk, kde to funguje? PHP parser na uvedeném místě patrně neumožňuje použít výraz, ale jen
proměnou nebo konstantu. Předpokládám, že motivace je časová náročnost ověřování, jestli se za '[' nachází skutečně nějaký výraz nebo jen pokračování řetězce. Pokud tam chceš výraz, pak nejlépe poslouží {} echo "{$array[$i+1]}" echo "${array[$i+1]}" Oba výše uvedené přístupy jak dostat pole do řetězce se mi zdají odstrašující - sám bych to řešil asi takto: function encapsulate($s) { return "'$s'"; } "INSERT ... ". implode(array_map(encapsulate, $obsah), ', ') . "..." |
||
fuckin Profil |
#7 · Zasláno: 30. 6. 2009, 20:31:50 · Upravil/a: fuckin
Vy ste sa našli, chlapci...
To si muzes odpustit. Jinak dik,zitra vyzkousim. TomasK To prvni reseni vypada mnohem lepe, to druhe sem nepochopil. Jinak toto funguje u pascalu,delphi apod. |
||
tiso Profil |
#8 · Zasláno: 30. 6. 2009, 20:42:04
TomášK
„function encapsulate($s) { return "'$s'"; } "INSERT ... ". implode(array_map(encapsulate, $obsah), ', ') . "..."“ To čo má byť? |
||
Kajman_ Profil * |
#9 · Zasláno: 30. 6. 2009, 20:53:16
To čo má byť?
Přístup programátora. |
||
tiso Profil |
#10 · Zasláno: 30. 6. 2009, 21:10:15
Kajman_ - narážal som na chýbajúce apostrofy/úvodzovky na poslednom riadku, ale ono to funguje, generuje to iba notice....
|
||
TomášK Profil |
#11 · Zasláno: 30. 6. 2009, 21:19:59 · Upravil/a: TomášK
_Kajman to myslím vystihl přesně.
Mně se zdá nešikovné, když musím vypisovat každý index zvlášť. Když pak chci rozšířit ten dotaz o sloupeček, musím ho explicitně dopsat i do dotazu. Když to pole bude velké, zabere to spoustu místa. Navíc podobný problém budu řešit mnohokrát. Pokud se vám zdá array_map a implode málo čitelné, pak bych to celé ještě zabalil to funkce např. array_to_sql_columns($array). Jak to funguje? array_map zavolá funkci na každý prvek pole, zde encapsulate (možná už je na to nějaká jiná vestavěná, ale já ji neznám), která každý prvek pole uzavře do uvozovek. Implode pak vezme pole, a slepí je do řetězce oddělené čárkami. fuckin Mohl bys poslat ukázkový kód toho pascalu/delphi? Nevybavuju si, že bych tam na něco podobného narazil a writeln("$i") dle očekávání nefunguje. tiso Vytrhl jsem kus kódu z kontextu - zřejmě jsem to měl zdůraznit. Samozřejmě to chce ještě obalit do mysql_query a toho kódu, co má fuckin okolo. |
||
fuckin Profil |
#12 · Zasláno: 1. 7. 2009, 10:21:48 · Upravil/a: fuckin
writeln("$i")
Co to ma byt? Toto s tim prece nema nic spolecneho ne? Bavime se o indexu u pole kde muzes delat co chces bez nejake zmeny syntaxe jak u php(slozene zavorky). Vis vubec cos to napsal za kravinu? Videls nekdy dvojite uvozovky a $ jako oznaceni promenne v pascalu? To ses teda predvedl. Jestlize treba mame toto pole type pole = array [1..50] of integer; Pak zapis funguje, ptze to bere jakeloli mat.operace. aktivovanafce(nazev[i*i/2] |
||
TomášK Profil |
#13 · Zasláno: 1. 7. 2009, 10:37:22
fuckin
Aha, už rozumím. writeln("$i") jsem psal proto, že náš problém je spojený s vyhodnocením proměnné uvnitř řetězce (což ani pascal ani delphi neumí). I v php můžeš napsat echo $array[$i+fce()]; echo "$array[$i+fce()]" // tohle neprojde |
||
tiso Profil |
#14 · Zasláno: 1. 7. 2009, 10:52:39
fuckin [#12] - pre zmenu si sa predviedol ty...
Nemôžeš porovnať: aktivovanafce(nazev[i*i/2] a: $dotaz = mysql_query("INSERT INTO jidla (...) VALUES ('$obsah[$i]','$obsah[$i+1]',...)");//funkcia(parameter_string_obsahujuci: pole[vypocitany_prvok_pola]) Porovnávaj porovnateľné. |
||
tcladin Profil |
#15 · Zasláno: 1. 7. 2009, 11:35:58 · Upravil/a: tcladin
tiso
Vy ste sa našli, chlapci... já sem na holky, žádný chlapce nehledám díky za link, teď abych přepsal skript, hehe. No vono to nebude poprvé ani naposled. Hold těžké začátky samouka amatéra TomášK jde tedy říct, že {} přeloží php jako - nejprve zjisti aktuální hodnotu uvnitř závorek? |
||
fuckin Profil |
#16 · Zasláno: 1. 7. 2009, 12:00:06
TomášK
Jo diky, uz me to doslo. IMHO ono snad jen php umoznuje vyhodnotit promennou i v retezci,takze JEN tady je tento problem. |
||
TomášK Profil |
#17 · Zasláno: 1. 7. 2009, 12:13:56 · Upravil/a: TomášK
tcladin
ano. Příklady najdeš v odkazu, který dával tiso - [#5] fuckin umí to i perl, ruby a určitě i další. |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0