Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> automatyczne generowanie zapytania sql - problem, problem z przecinkami
dado
post 18.01.2005, 10:34:38
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

Ostrzeżenie: (10%)
X----


skrobnąłem kod którego zadaniem jest automatyczne generowania zapytania UPDATE z tablicy $_POST formularza:
zmienna $_POST[n] zawiera nazwy pól w tabeli baz danych, przykładowo:
  1. <?php
  2. $_POST[n]=&#092;"lp|nazwa|var\";
  3. ?>


  1. <?php
  2. //wyodrebnienie nazw pola
  3.     $nazwa = explode(&#092;"|\", $_POST[n]);
  4.  
  5. //początek zapytania
  6.     $sql .= &#092;"UPDATE \" . $_POST[tbll] . \" SET&nbsp;\";
  7.     
  8.     for($i=0; $i<=count($nazwa)-2; $i++)
  9.     {
  10. //nazwa pola
  11.     $nn=$nazwa[$i];
  12.  
  13. //liczba pól
  14.     $llp=count($nazwa)-2;
  15.  
  16. //budowanie sql-a
  17.     $sql .= &#092;"  &nbsp;\".$nazwa[$i].\" = '\".$_POST[$nn].\"'\";
  18.     
  19.  
  20. //mój nieudolny patent na przecinki
  21.     if(!($i==$llp)){$p=&#092;", \";}else{$p=\"\";}
  22.  
  23. //dodanie przecinka
  24.     $sql .= &#092;"$p\";
  25.     }
  26.  
  27. //zakonczenie petli i dodnie where
  28.     $sql .=&#092;" WHERE lp='\".$_POST[idd].\"'\";
  29.  
  30. // no i wio
  31.     $query=mysql_query($sql)or die(mysql_error());
  32. ?>


problem jest z przecinkami w zapytaniu po ostanim polo przed klauzorą WHERE nie może być tego przecinka nie wiem jak zrobić żeby go nie było . Proszę o podpowiedź bo wena mnie opuściła.

wywala błąd:
Cytat
You have an error in your SQL syntax near '   lp = '1',  nazwa = 'title',  var = '---==SKUP ZŁOMA ' at line 1


Ten post edytował dado 18.01.2005, 10:36:53
Go to the top of the page
+Quote Post
nospor
post 18.01.2005, 10:40:30
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kod
$prz=false;
for($i=0; $i<=count($nazwa)-2; $i++)
    {
if ($prz) $sql.=',';
else $prz=true;
//nazwa pola
    $nn=$nazwa[$i];

//liczba pól
    $llp=count($nazwa)-2;

//budowanie sql-a
    $sql .= "  ".$nazwa[$i]." = '".$_POST[$nn]."'";
    

    }

A tak przy okazji te &nbsp w zapytaniu są niepotrzebne. Wystarczy spacja.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dado
post 18.01.2005, 14:51:03
Post #3





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

Ostrzeżenie: (10%)
X----


poniższy kod
  1. <?php
  2.  
  3.  $nazwa = explode(&#092;"|\", $_POST[n]);
  4. $sql .= &#092;"UPDATE \" . $_POST[tbll] . \" SET&nbsp;\";
  5. for($i=0; $i<=count($nazwa)-2; $i++)
  6. {
  7. $nn=$nazwa[$i];
  8. $llp=count($nazwa)-2;
  9. $sql .= &#092;" &nbsp;\".$nazwa[$i].\" = '\".$_POST[$nn].\"'\";
  10. if(!($i==$llp)){$p=&#092;", \";}else{$p=\"\";}
  11. $sql .= &#092;"$p\";
  12. }
  13. $sql .=&#092;" WHERE lp='\".$_POST[idd].\"'\";
  14. $query=mysql_query(&#092;"$sql\")or die(mysql_error());
  15. echo &#092;"<br>\".$sql.\"<br>\";
  16. ?>


generuje takiego sql-a
  1. UPDATE config SET lp = '2', nazwa = 'tbl_linki', var = 'linki' WHERE lp='2'


niby ok ale wywala błąd
Cytat
You have an error in your SQL syntax near '  lp = '2',  nazwa = 'tbl_linki',  var = 'linki' where' at line 1

nie wiem co jest grane
Go to the top of the page
+Quote Post
dagor
post 18.01.2005, 18:26:24
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.01.2005
Skąd: mrok i darkness :P

Ostrzeżenie: (0%)
-----


Można zacząć od umieszczenia nazw zmiennych między '' (apostrofami) smile.gif


--------------------
Virtual Intelligence is better than Natural Stupidity
Go to the top of the page
+Quote Post
crash
post 18.01.2005, 19:29:09
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Jakiego typu jest komórka lp w bazie? Przypadkiem nie INT? Jeśli tak to nie dawaj jej w cudzysłowiu...


--------------------
Go to the top of the page
+Quote Post
-dylu-
post 26.01.2005, 19:31:34
Post #6





Goście







o ile dobrze zrozumialem temat to moj patent moze tez nie zbyt madry ale robilem chyba tak:
//-----------------------------------------------
$pola = " pole,pole,pole,";
$pola = substr($pola, 0, count($pola-1));
//-----------------------------------------------

dylu
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 09:38