DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 22. 07. 2006.   #1
oliver
expert
Expert
 
Avatar oliver
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 580
Hvala: 1
0 "Hvala" u 0 poruka
oliver is on a distinguished road
Pošaljite ICQ poruku za oliver Pošaljite poruku preko Skype™ za oliver
Question wtf? next() "brlja"

Pri insertu u tabelu imam gomilu polja, pa umjesto da pisem liniju od "kilometar" - konacno odlucih da odvojim minut-dva i to konacno sredim. Elem, naletih na glup problem, samo jos nisam utvrdio ko je glup: ja ili mi php nesto brlja

Po "vuku", next() ce vratiti false ako vise nema elemenata u nizu.

dakle:
PHP kôd:
function insertRow($table$data) {
    
$dbFieldNames "";
    
$dbFieldValues "";

    foreach (
$data as $field=>$value) {
        
$dbFieldNames .= $field;
        
$dbFieldValues .= "'".$value."'";

        if (
next($data)) {
            
$dbFieldNames .= ",";
            
$dbFieldValues .= ",";
        }
    }

    return 
$this->rawQuery("INSERT INTO $table ($dbFieldNames) VALUES ($dbFieldValues)";) ? true false;

Fora je u tome sto mi u ovom slucaju next() nekoliko puta vrati false iako foreach NIJE stigao do poslednjeg elementa, i onda nemam zarez izmedju polja/vrijednosti (= sql syntax error).

U medjuvremenu sam sredio problem po "seljacki":
PHP kôd:
if (end($data) !== $value) {
    
$dbFieldNames .= ",";
    
$dbFieldValues .= ",";

... i to radi pos'o, ali mi i dalje nije jasno u cemu je problem sa prvim nacinom. next() koristim i pri dump-u baze i "sklapam" query-je za backup fajl, tu sve radi kako treba.

Je l' neko imao slicnu muku, prvenstveno da znam da li ja grijesim ili je nesto drugo u pitanju.
__________________


Poslednja izmena od oliver : 22. 07. 2006. u 15:10.
oliver je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #2
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

probaj reset() pre petlje da bi ti se interni pointer u nizu vratio na početak, naročito ako si ga već provrteo kroz neku petlju.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman
I don't always know what I'm talking about but I know I'm right!
bluesman je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #3
oliver
expert
Expert
 
Avatar oliver
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 580
Hvala: 1
0 "Hvala" u 0 poruka
oliver is on a distinguished road
Pošaljite ICQ poruku za oliver Pošaljite poruku preko Skype™ za oliver
Default

Nema nikakvog petljanja s nizom ranije, samo provjerim odredjene vrijednosti i ako je sve ok onda dolazi query. Probao i sa resetovanjem - identicna situacija, 3x vrati false.

Razmisljao sam da je mozda problem do samih podataka/imena kljuceva u nizu, al' je "prost" da prostiji ne moze biti sto se toga tice. Jedina "mana" mu je sto ima ~50 elemenata, al' i to nula naspram npr. dump-a baze kad imam mnogo vece nizove.
__________________

oliver je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #4
BraMom
Branimir Momcilovic
Qualified
 
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
BraMom is on a distinguished road
Default Equal i identical nije isto

Loše je postavljen uslov:
if (next($data)) {

taj uslov će vratiti "false" kada je stvarno poslednji slog u pitanju, ali i u još nekim slučajevima.
Fora je u tome što ti ovde radiš "nevidljivo" kastovanje u boolean, tj. php će vrednosti 0 i empty kastovati u false, a pretpostavljam da je to situacija gde ti pravi problem.

Da probam da pojasnim, tvoj uslov je identican ovom
if ((bool)next($data) == true)
a hteo si ovako nešto:
if (next($data) !== false)

Znači ovaj uslov je ispunjen ako je vrednost koju vrati next($data) različit od false, ali i ako je različitog tipa, npr. 0
BraMom je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #5
oliver
expert
Expert
 
Avatar oliver
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 580
Hvala: 1
0 "Hvala" u 0 poruka
oliver is on a distinguished road
Pošaljite ICQ poruku za oliver Pošaljite poruku preko Skype™ za oliver
Default

to je to! na 3 mjesta sam imao nulu kao vrijednost, a igrom slucaja sam dump-ovao kljuceve u else (cisto da vidim sta se desava) i nisam primijetio "anomaliju".

inace uvijek stavljam ==/!== kad (ne)ocekujem boolean, kao i sa ostalim vrijednostima, ali eto, pametovanje me kostalo dodatnog vremena u trenucima kad ono i ne stoji bas na mojoj strani

znaci, busted
__________________

oliver je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #6
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

e vidis ovo je vrlo originalan pristup ovom problemu, ovu foru sa next nisam jos nikad video.

Obicno se ovo pise ili kao ova tvoja petlja, pa se onda samo na kraju odbaci zadnji karakter (a to je zarez viska), ili se elementi stavljaju u niz koji se onda na kraju join-uje zarezom.
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #7
oliver
expert
Expert
 
Avatar oliver
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 580
Hvala: 1
0 "Hvala" u 0 poruka
oliver is on a distinguished road
Pošaljite ICQ poruku za oliver Pošaljite poruku preko Skype™ za oliver
Default

sjetio sam se danas i toga, da odbacim zadnji karakter, al' sam bio tvrdoglav pa izgurao sa pozicioniranjem elemenata u nizu
__________________

oliver je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #8
BraMom
Branimir Momcilovic
Qualified
 
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
BraMom is on a distinguished road
Default

Upinjući se da objasnim razliku između equal i identical operatora, zaboravio sam da napomenem da koristim slicnu f-ju, tj. metodu klase, koja u jednoj od reinkarnacija izgleda ovako:
Kôd:
	function InsertRecord($table, $values)
	{
		$query = "INSERT INTO $table SET ";
		foreach($values as $key=>$value)
			$query .= "$key = '$value',";
		$query = substr($query, 0, -1);
		$this->query($query);
		return $this->res;
	}
Prilično je "divlja", ali i nešto kraća od Oliverovog rešenja.
BraMom je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #9
oliver
expert
Expert
 
Avatar oliver
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 580
Hvala: 1
0 "Hvala" u 0 poruka
oliver is on a distinguished road
Pošaljite ICQ poruku za oliver Pošaljite poruku preko Skype™ za oliver
Default

Evo update

PHP kôd:
function insertRow($table$data) {
    
$dbFieldNames $dbFieldValues "";
    foreach (
$data as $field=>$value) {
        
$comma next($data) !== false "," "";
        
$dbFieldNames .= $field.$comma;
        
$dbFieldValues .= "'".$value."'".$comma;
    }
    return 
$this->rawQuery("INSERT INTO $table ($dbFieldNames) VALUES ($dbFieldValues)");

__________________

oliver je offline   Odgovorite uz citat
Staro 22. 07. 2006.   #10
zextra
Boris
Grand Master
 
Avatar zextra
 
Datum učlanjenja: 01.12.2005
Lokacija: Novi Sad
Poruke: 775
Hvala: 5
156 "Hvala" u 2 poruka
zextra is on a distinguished roadzextra is on a distinguished road
Default

Ili, mozda ovako...
PHP kôd:
function quoteMe($str) { return "'" $str "'"; }
function 
insertRow($table$data) {
    
$dbFieldNames implode','array_keys$data ) );
    
$dbFieldValues implode','array_map'quoteMe'$data );
    return 
$this->rawQuery("INSERT INTO $table ($dbFieldNames) VALUES ($dbFieldValues)");

__________________
"It’s important to have goals when you pet. Otherwise you’re just rubbing another mammal for no reason." - Scott Adams
zextra je offline   Odgovorite uz citat
Odgovori



Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
Tema Početna poruka teme Forum Odgovori Poslednja poruka
301 redirkecija "dinamickog" URLa na "dinamicki" URL mb_sa Regular expression i htaccess 7 02. 07. 2008. 19:21
Karakteri "&" i "=" i XMLHttpRequest Milos Vukotic Regular expression i htaccess 18 01. 10. 2007. 15:16
If IT really is a "profession", what is our "pro bono" contribution as IT pros? oksite e-Business 26 12. 01. 2007. 11:18
"Telekom Slovenije" preuzeo "Blic.net" za 390.000 evra Aleksandar Marković Komunikacije 2 23. 12. 2006. 14:23


Vreme je GMT +2. Trenutno vreme je 08:10.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.