Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][MSSQL][PHP] Zapętlenie w formularzu
Aui06
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


Witam

Mam problem z dodawaniem z edycją tabeli w bazie danych.

Dane dodawane są za pomocą formularza. Przy pierwszym wprowadzeniu problemu nie ma. Jednak kiedy chce edytować zawartość formularza edytowany jest jedynie 1-wszy rekord, który następnie dodaje się kilkakrotnie do bazy. Co ciekawe przy kolejnym zapisie znika zawartość prawidłowo zapisanych pól mimo iż nie ma w kodzie Delate.

Formularz przekazuje zawartość pól jednak się one nie zapisują. Jest tak jakby poniższy kod zapętlał się na 1 rekordzie i nie potrafił dodać innych.

  1. if ((int)$_POST['yes']){
  2.  
  3. $idr = sed_import('idr', 'P', 'INT');
  4. $ids = $khid;
  5. //$ids = $_POST['a'];
  6. $idrs = $_POST['idrs'];
  7. $atyp = $_POST['atyp'];
  8. $idpol = $_POST['idpol'];
  9.  
  10. $sq5 = sed_sql_query("SELECT COUNT(*) FROM Planer2_plus_sl_pola");
  11. $ec = mysql_fetch_row($sq5);
  12.  
  13.  
  14. $sk= $ec[0] - 1;
  15.  
  16. for ($i = 0; $i <= $sk; $i++) {
  17.  
  18.  
  19. $sql2a = sed_sql_query("SELECT COUNT(*) FROM planer2_plus_tw_pola WHERE pp_IdTowarS = '".$ids."' AND pp_Idpola = '".$idpol[$i]."'");
  20. $sec = mysql_fetch_row($sql2a);
  21.  
  22. if ($sec[0] > 0){
  23. $sql = sed_sql_query("UPDATE planer2_plus_tw_pola SET pp_IdTowarS = '".$ids."', pp_Idpola = '".$idpol[$i]."', pp_Wartosc ='".$atyp[$i]."' WHERE pp_idTowarS = '".$ids."'");
  24.  
  25. }
  26. if ($sec[0] == 0) {
  27. $sql = sed_sql_query("INSERT INTO planer2_plus_tw_pola (pp_IdTowarS, pp_Idpola, pp_Wartosc) VALUES ('".$ids."', '".sed_sql_prep($idpol[$i])."', '".sed_sql_prep($atyp[$i])."')");
  28.  
  29. }
  30. //header("Location: plug.php?r=listatowarow&a=$ids&b=2");
  31. }
  32.  
  33.  
  34. }


Czy ktoś wie co zrobić by edytował rekordy zgodnie z formularzem, a nie dodawał w cały czas pierwszy. To zapewne banalny błąd, ale nie widzę gzie go popełniam.
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pokaż kod formularza. Musisz działać na tablicy, tzn, formularz musi być tak zbudowany, by umożliwiał pracę na tablicy.
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




var_dump($idpol);
var_dump($sec);
co wyswietlają?

poza tym nie:
for ($i = 0; $i <= $sk; $i++) {
a:
for ($i = 0; $i < $sk; $i++) {
Go to the top of the page
+Quote Post
Aui06
post
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


Formularz wygląda tak

  1.  
  2. $sqlll = sed_sql_query("SELECT pp_Idpola, pp_IdTowarS, Nazwa_pola, id_pola, Typ_pola, pp_Wartosc FROM Planer2_plus_sl_pola t LEFT OUTER JOIN planer2_plus_tw_pola p on t.id_pola = p.pp_Idpola and p.pp_IdTowarS='".$ids."'");
  3.  
  4. while ($row3 = sed_sql_fetcharray($sqlll)){
  5. if ($row3['Typ_pola']==0) {
  6. $ptypp .= "<tr><td>".$row3['Nazwa_pola']."</td><td> <input type='text' name='atyp[]' value='".$row3['pp_Wartosc']."'>
  7. <input name='idpol[]' value='".$row3['id_pola']."'></td></tr>";
  8.  
  9. }
  10. elseif ($row3['Typ_pola']==1){
  11. $ptypp .="<tr><td>".$row3['Nazwa_pola']."</td><td> <input type='checkbox' name='atyp[]' value='1' ".(($row3['pp_Wartosc']==1)?'checked="checked"':'')." >
  12. <input name='idpol[]' value='".$row3['id_pola']."'></td></tr>";
  13.  
  14. }
  15. $tidpola .= $row3['id_pola'];
  16. }
  17.  
  18. echo '<h3 style="text-align:right;">Dodatkowe pola:</h3><form action="" method="post"><table>'.$ptypp.'</table>
  19. <input type="hidden" name="yes" value="1">
  20. <input type="submit" name="submit" class="coltop" value="Dodaj dodatkowe pole">
  21. </form>';
  22.  
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




Z kodu co pokazalas wyglada, ze pola idpol nie leżą w formularzu....
Przypominam sie o moim wczesniejszym poscie.
Go to the top of the page
+Quote Post
Aui06
post
Post #6





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


A czy pole idpol nie jest w formularzu w linijce 7, 12?

name='idpol[]'

<input name='idpol[]' value='".$row3['id_pola']."'>


Ten post edytował Aui06 1.04.2014, 12:56:05
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




A juz widze.... ty to mialas w zmiennej.... ok.

Tak wiec poraz kolejny prosze o odpowiedz na moj pierwszy post w tym temacie.
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
Aui06
post
Post #8





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


$idpol - przekazuje id pola z którego korzystam wykorzystuje go do łączenia 2 tablic. (w formularzu dla kontroli nie jest ukryte)

$sec - mam obecnie 7 pól ale w przyszłości może ich być 11 chciałam by przy zapisie sprawdzał czy pole (lub jego wartość) jest już dodana czy jeszcze nie.


Ten post edytował Aui06 1.04.2014, 13:07:17
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Podalem ci wyraznie co masz zrobic. Podalem ci kod php. Prosze PORAZ KOLEJNY, bys podala co on zwraca
Go to the top of the page
+Quote Post
Aui06
post
Post #10





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


Nie bardzo wiem co znaczy var_dump($idpol); var_dump($sec);?

Ale jak

echo var_dump($idpol);
array(7) { [0]=> string(1) "1" [1]=> string(1) "3" [2]=> string(1) "5" [3]=> string(1) "7" [4]=> string(2) "41" [5]=> string(2) "37" [6]=> string(2) "44" }


echo var_dump($sec);

array(1) { [0]=> string(1) "0" }

lub
array(1) { [0]=> string(1) "0" } array(1) { [0]=> string(1) "0" } array(1) { [0]=> string(1) "0" } array(1) { [0]=> string(1) "0" } array(1) { [0]=> string(1) "0" } array(1) { [0]=> string(1) "0" }

zaraz pod $ec = mysql_fetch_row($sq5);

Ten post edytował Aui06 1.04.2014, 13:27:55
Go to the top of the page
+Quote Post
com
post
Post #11





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


bez echo na drugi raz bo jest bez sensu, dostałeś przecież cala linie jak ma wygl, ale nie ważne, to na przyszłość (IMG:style_emoticons/default/wink.gif)

$ids = $khid; pewnie w tym $khid masz coś na sztywno bo wgl tego nie widzę w tym fragmencie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




Dziekuje. Wlasnie to mialas zrobic.... ino ze bez echo. Napisalem wyraznie samo var_dump. var_dump wyswietla zawartosc zmiennej....
Powinnnas miec wyswietlone 7 razy $sec, wyswietla ci sie tylko raz. Tak masz, czy skrocilas wynik?
Poza tym widac wyraznie, ze sec ma wartosc 0, wiec nic dziwnego ze dodaje a nie robi update.

Zrob jeszcze
var_dump($ids);
oraz
var_dump($sk);
Go to the top of the page
+Quote Post
Aui06
post
Post #13





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


$ids = $khid to ma być na sztywno.

Mam 3 tablice.

1 z tekstem
2 z opcjami do tekstu
3 dostępne opcje

$khid jest globalne i odnosi się do do 1 tablicy z tekstem.

var_dump($ids);
int(72) int(72) int(72) int(72) int(72) int(72)

var_dump($sk);
int(6) int(6) int(6) int(6) int(6) int(6)
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




Skoro $ids jest poprawne
to to zapytanie:
$sql2a = sed_sql_query("SELECT COUNT(*) FROM planer2_plus_tw_pola WHERE pp_IdTowarS = '".$ids."' AND pp_Idpola = '".$idpol[$i]."'");
z jakiegos powodu zwraca ci 0, wiec jak juz mowilem dlatego ci robi INSERT a nie UPDATE.
Go to the top of the page
+Quote Post
com
post
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


nie może być na sztywno bo masz:
WHERE pp_idTowarS = '".$ids."'");

(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Aui06
post
Post #16





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


To jest dobrze.

Jak pisałam mam 3 tablice. A ta z którą mam problem ma 1 wartość stałą jest nią "pp_idTowarS".

pp_idTowarS -> id tekstu do którego dodaje pole

Gdyby było zmienne to bym nie mogła porwanie wyświetlić.

Zmienne jedynie są pp_Idpola = '".$idpol[$i]."' i pp_Wartosc ='".$atyp[$i]."' czyli id po którym łącze z rodzajem pola i wartość pola.

nospor ma racje z jakiegoś powodu nie działa
$sql2a = sed_sql_query("SELECT COUNT(*) FROM planer2_plus_tw_pola WHERE pp_IdTowarS = '".$ids."' AND pp_Idpola = '".$idpol[$i]."'");

Go to the top of the page
+Quote Post
com
post
Post #17





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


dobrze to od początku co przechowujesz w tabeli Planer2_plus_sl_pola, to po pierwsze, bo z niej wyliczasz te ilość obróceń pętli a potem dodajesz do innej tabeli to.. pod drugie jak zmieniasz $idpol[$i] dla 1 id to w tym polu masz wartość ostatnią wiec warunek nigdy się nie spełni dlatego nie działa, dlatego mówię ze nie może być na sztywno id bo musisz do każdego rekordu dodać te wartość z pod indexu, nie da się dodać do 1 wszystkich w taki sposób (IMG:style_emoticons/default/smile.gif)

Ten post edytował com 1.04.2014, 14:06:21
Go to the top of the page
+Quote Post
Aui06
post
Post #18





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


To jak to ma wyglądać?

Bo powinło działać:
Na początku tablica jest pusta. I wszystko dobrze się dodaje jak uzupełnię formularz i wyśle.
Pętla for trzyma by wykonało się określoną ilość razy. Następnie sprawdzany jest warunek
$sql2a = sed_sql_query("SELECT COUNT(*) FROM planer2_plus_tw_pola WHERE pp_IdTowarS = '".$ids."' AND pp_Idpola = '".$idpol[$i]."'");

gdzie $i wraz z obrotami pętli ma a raczej powinno przyjmować wartości 1, 2,3... a pp_IdTowarS = '".$ids."' powinno zawierać określony numer artykułu.
Jeśli nie ma w bazie rekordu spełniającego warunek dodaje nowe pole.
Go to the top of the page
+Quote Post
com
post
Post #19





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


tak ja wiem do czego służy for, chodziło o to że zliczasz w innej tabeli a dodajesz w innej potem (IMG:style_emoticons/default/smile.gif)
Planer2_plus_sl_pola => planer2_plus_tw_pola , tak wszytko sie zgadza ale krotka pp_Idpola zawiera tylko jedna wartość wiec nie będzie tam po kolei 1, 2, 3 tylko po wykonaniu zapytania zapisze Ci od razu 3 wiec wtedy poco wgl pętla, skoro jej efektu nawet nie zobaczysz, dlatego sugerowałbym dodać do tabeli pole np id auto_increment i wtedy możesz mieć parę rekordów o tym samym ids, bo tak baza nie wie o co ja pytasz bo dla niej rekord spełniający warunek WHERE pp_IdTowarS = '".$ids."' AND pp_Idpola = '".$idpol[$i]."'" jest niejednoznaczny (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Aui06
post
Post #20





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.03.2014

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


Ja się chyba z tobą nie mogę dobrze zrozumieć:

Planer2_plus_sl_pola to tabela z nazwami pól jest ich 7 więc ograniczenie dodania ilości pól to 7.
Tabela planer2_plus_tw_pola składa się z 4 kolumn (id (auto_increment), pp_Idpola (klucz obcy do tabeli Planer2_plus_sl_pola), pp_idTowarS (klucz obcy do tablicy z tekstami), pp_Wartosc (wartość pola) ).

Chciałam użyć $i żeby po kolei przeglądać tablicę. Wszytko praktycznie miało się opierać o klucze obce nie id planer2_plus_tw_pola tak naprawdę nie jest mi potrzebne.


A i jestem kiebska z baz ale jak masz pole auto_increment to nie pozwala ci założyć drugiego o tym samym numerze.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 20:18