Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Post nie działa w jednym formularzu
Forum PHP.pl > Forum > Przedszkole
iqique
Witam. Proszę o podpowiedź. Mam dwa formularze w zasadzie identyczne. Zmieniłem w drugim tylko nazwy zmiennych i przestał działać. Chciałbym zrozumieć dlaczego. Analizowałem to przez dwie godziny i nie pojmuję. Co może powodować to, że nie wysyła się POST z drugiego formularza? Po kliknięciu wykonaj w drugim przypadku strona się tylko przeładowuje.


  1. <?
  2. $towar=$_POST[towar];
  3. $towar1=$_POST[towar1];
  4. $cena=$_POST[cena];
  5. $towar2=$_POST[towar2];
  6. $cena2=$_POST[cena2];
  7. ?>
  8.  
  9.  
  10. <div style="width:160px;border:solid 0px black;">
  11. <div style="padding-bottom:5px;">Ustalanie ceny:</div>
  12. <?php
  13.  
  14. echo "<form action='magazyn.php' method=post>";
  15.  
  16. echo "<br>";
  17. echo "Towar <input style=width:75px; type=text name='towar1'>";
  18. echo "<br>";
  19. echo "Cena <input style=width:75px;margin-left:8px; autocomplete=off type=text name='cena'>";
  20. echo "<br>";
  21. echo "<input style=margin-left:60px;margin-top:4px; type=submit value='Wykonaj'>";
  22. echo "</form>";
  23.  
  24. ?>
  25. </div>
  26.  
  27. <?
  28. if($_POST[cena]){
  29. $odpowiedz1 = mysql_query("update ceny set $towar1=$cena WHERE nrkonta = '$nrkonta';");}
  30.  
  31. ?>
  32.  
  33. <div style="width:160px;border:solid 0px black;">
  34. <div style="padding-bottom:5px;">Ustalanie ceny2:</div>
  35. <?php
  36.  
  37. echo "<form action='magazyn.php' method=post>";
  38.  
  39. echo "<br>";
  40. echo "Towar <input style=width:75px; type=text name='towar2'>";
  41. echo "<br>";
  42. echo "Cena2 <input style=width:75px;margin-left:8px; autocomplete=off type=text name='cena2'>";
  43. echo "<br>";
  44. echo "<input style=margin-left:60px;margin-top:4px; type=submit value='Wykonaj'>";
  45. echo "</form>";
  46.  
  47. ?>
  48. </div>
  49.  
  50. <?
  51.  
  52. if($_POST[cena2]){
  53. $odpowiedz2 = mysql_query("update ceny set $towar2=$cena2 WHERE nrkonta = '$nrkonta';");}
  54.  
  55. ?>
com
w $_POST[towar] itd brakuje ' '
iqique
Niestety niczego to nie zmieniło. Pierwszy formularz działa. Drugi nie.
Turson
  1. <form action='magazyn.php' method=post> // 'post'
  2.  
  3. <input style=width:75px;margin-left:8px; autocomplete=off type=text name='cena2'>
  4. <input style=margin-left:60px;margin-top:4px; type=submit value='Wykonaj'>

Od kiedy inputa tak się robi?

  1. <input type="text" name="cena2">
  2. <input type="submit" value="Wykonaj">


  1. if($_POST[cena])

robisz takie bledy, ze szok
com
pamiętaj o "" bo bez tego nie będzie Ci działać... up może tak ale jak wrzuci to do odpowiednich "" choć style powinno się określać klasa lub po id smile.gif

  1. $odpowiedz2 = mysql_query("update ceny set $towar2=$cena2 WHERE nrkonta = '$nrkonta';");}


$towar2=$cena2 czegoś takiego nie ma w sql smile.gif sądzę że $towar2=$cena2 nie masz kolumny o nazwie z zmiennej towar2 ale może się mylę, tak to powinienem napisać sory wink.gif
iqique
Poprawiłem to na co mi zwróciliście uwagę i kod wklejam poniżej. Pierwszy form działa, drugi dalej nie. Wydaje mi się, że problem jest ze zmiennymi przesyłanymi postem w drugim formularzu. Nie m dlaczego nie działają. Kiedy je zamienię z jednego formularza do drugiego wtedy pierwszy nie działa, a drugi tak. Bez problemu podmienia wpis w bazie. Używam styli w kodzie bo tak mi wygodniej na szybko coś przesunąć. Normalnie używam class.

  1.  
  2.  
  3. <?
  4. $towar=$_POST['towar'];
  5. $towar1=$_POST['towar1'];
  6. $cena=$_POST['cena'];
  7. $towar2=$_POST['towar2'];
  8. $cena2=$_POST['cena2'];
  9. ?>
  10.  
  11.  
  12. <div style="width:160px;border:solid 0px black;">
  13. <div style="padding-bottom:5px;">Ustalanie ceny:</div>
  14. <form action='magazyn.php' method='post'>
  15. Towar <input type='text' name='towar1'>
  16. Cena <input autocomplete='off' type='text' name='cena'>
  17. <input type='submit' value='Wykonaj'>
  18. </form>
  19. </div>
  20. <?
  21. if($_POST['cena']){
  22. $odpowiedz1 = mysql_query("update ceny set $towar1=$cena WHERE nrkonta = $nrkonta;");}
  23. ?>
  24.  
  25. <div style="width:160px;border:solid 0px black;">
  26.  
  27. <div style="padding-bottom:5px;">Ustalanie ceny2:</div>
  28. <form action='magazyn.php' method='post'>
  29. Towar <input type='text' name='towar2'>
  30. Cena2 <input autocomplete='off' type='text' name='cena2'>
  31. <input type='submit' value='Wykonaj'>
  32. </form>"
  33.  
  34. </div>
  35. <?
  36. if($_POST['cena2']){
  37. $odpowiedz2 = mysql_query("update ceny set $towar2=$cena2 WHERE nrkonta = $nrkonta;");}
  38. ?>
  39.  
nospor
1)
zrob
print_r($_POST);
a bedziesz widzial co idzie a co nie, NIe ma co zgadywac :/

2) Uzywasz zmiennej $nrkonta ktorej nigdzie nie widze

3) Sprawdz czy nie ma bledow bazy.....
Temat: Jak poprawnie zada pytanie


Twoj problem sprowadza sie do prostej analizy danych i zamiast to zrobic to lecisz na forum.
Turson
Nie do końca się zastosowałeś
  1. $odpowiedz1 = mysql_query("update ceny set $towar2=$cena2 WHERE nrkonta = $nrkonta;");}

Cytat(com @ 1.12.2013, 19:43:00 ) *
$towar2=$cena2 czegoś takiego nie ma w sql smile.gif

nospor
Turson a co ci tu nie pasuje? Nie slyszales ze nazwe kolumny tez mozna przekazac do tekstu budujacego zapytanie tak samo jak jej wartosc?
Turson
Najpierw pomyślałem, że autor po prostu niepotrzebnie wstawił znak dolara i nie chciało mi się wierzyć, że kolumna nazywa się `$towar`, ale dopiero teraz widzę, że cena update'owana w zależności od danych z formularza, więc ok smile.gif
iqique
Zrobiłem jak nospor polecił. Post jest wysyłany z formularza, ale nie jest przypisywany do zmiennych $towar2=$_POST['towar2'] i $cena2=$_POST['cena2']. Zmienna $nrkonta jest zdefiniowana na samym początku. Nie rozumiem dlaczego działa w pierwszym przypadku.
nospor
Cytat
ale nie jest przypisywany do zmiennych $towar2=$_POST['towar2'] i $cena2=$_POST['cena2'].
Tak, tak, oczywiscie..... i wlasnie przed 5cioma minutami zniknela grawitacja na ziemi wink.gif

var_dump($towar2);
pokazuje? Pokazuje. Jezeli nie pokazuje, znaczy ze
1) $_POST['towar2'] nie ma nic
2) W zlym miejscu to sprawdzasz. zamiast po przypisaniu, to robisz to przed.
3) Podales nam nie caly kod i nie widzimy wszystkich bledow jakich robisz
com
a co ma kolumnę o nazwie $_POST['towar2'] ? bo nie wydaje mi się dlatego na to zruciłem uwagę, on ma przecież ustawić dla tej wartości, a nie kolumny o nazwie jablko , tylko raczej towar wink.gif

no chyba ze tak własnie ma i wy to wiecie bo ja tego np nie wiem wink.gif

pomijając fakt że nad takim rozwiązaniem trudno o kontrole wink.gif bo to że tak sie da to ja wiem, nie wyraziłem się tam jasno, tzn mój skrót myślowy został źle odebrany...
nospor
@com naprawde nie widzisz obok pola CENA2:
Towar <input type='text' name='towar2'>
questionmark.gif Poza tym pobiera ją wyraźnie z posta, poza tym pierwszy form mu dziala a ma tak samo zrobione.... to sie nazywa kojarzenie faktow wink.gif

A to ze o kontrole trudno to inna bajka, ktora nie jest tutaj omawiana.
iqique
Na początek chciałem podziękować za poświęcony czas. Uczę się php sam i z doskoku czasami, ale lubię to smile.gif Zastosowałem się do rad nospor i faktycznie dane z post są przypisywane do zmiennych. W złym miejscu to sprawdzałem. Mimo to kod nie działa. Uprościłem go maksymalnie i wklejam poniżej cały plik. Odkryłem, że problemem jest chyba pętla rysująca tabelę z bazy. Kiedy ją wytnę formularz robi wpisy w bazie bez problemu. Co może to powodować?

  1.  
  2. <?php
  3. $nrkonta=$_SESSION['nrkonta'];
  4. include("includes/check.php");
  5. include("includes/baza.php");
  6.  
  7. if($_POST['wybor1']=='maga'){$wybor1='magazyn';}
  8. if($_POST['wybor1']=='skle'){$wybor1='sklep';}
  9. $cena=$_POST['cena'];
  10. $towar=$_POST['towar'];
  11.  
  12. $kom1="witamy";
  13.  
  14. ?>
  15.  
  16. <div class="cala">
  17. <div class="lewa">
  18.  
  19. <?php
  20. include("includes/info.php");
  21. include("includes/menumagazyn.php");
  22. ?>
  23.  
  24. </div>
  25.  
  26. <div class="srodek">
  27.  
  28. <div style="border:solid 0px black;">
  29.  
  30. <?php // część odpowiedzialna za zapamiętywanie kierunku transferu towarów
  31. if($_SESSION['ref']==1){$wybor1=sklep; $_SESSION[ref]='';}
  32. if($_SESSION['ref']==2){$wybor1=magazyn; $_SESSION[ref]='';}
  33.  
  34.  
  35. ?>
  36. <form action='magazyn.php' method='post'>
  37. <select name='wybor1'>
  38. <option value='start' name='start'>Wyświetl stan:</option>
  39. <option value='magazyn' name='maga'>Magazynu</option>
  40. <option value='sklep' name='skle'>Sklepu</option>
  41. </select>
  42. <input style=margin-left:60px;margin-top:4px; type='submit' value='Wykonaj'>
  43. </form>
  44.  
  45. </div>
  46.  
  47.  
  48. <br>
  49. <div id="srodek-lewa" style="float:left;border:solid 0px black;">
  50.  
  51. <? //pętla wyświetlająca zawartość magazynu
  52.  
  53. if(empty($_POST['wybor1']) and empty($_POST['wybor']) and empty($wybor1) and empty($_POST['cena'])){echo $kom1; exit();}
  54. if($wybor1==start){echo $kom1; exit();} // wyświetla komunikat poczatkowy
  55.  
  56. if(!empty($wybor1)){echo 'Aktualny stan:';
  57. if($wybor1=='magazyn'){echo 'Magazynu';}
  58. if($wybor1=='sklep'){echo 'Sklepu';}
  59.  
  60. echo '<br>';
  61. echo '<br>';
  62.  
  63. $resResult1 = mysql_query( "SELECT * FROM $wybor1 where nrkonta=$nrkonta" );
  64. $arrRow1 = mysql_fetch_array( $resResult1, MYSQL_ASSOC );
  65. ksort($arrRow1);
  66.  
  67. echo '<table style="float: left; width: 400px;">';
  68. echo '<tr>';
  69. foreach( $arrRow1 as $strKey1 => $strValue1)
  70. {
  71. if(($strKey1 != 'id') and ($strKey1 != 'nrkonta') and ($strValue1 != 'id') and ($strValue1 != 'nrkonta') and (!empty($strValue1)))
  72. {
  73.  
  74.  
  75. $resResult = mysql_query( "SELECT $strKey1 FROM ceny where nrkonta=$nrkonta" );
  76. $arrRow = mysql_fetch_array($resResult);
  77. $x=$arrRow["$strKey1"];
  78.  
  79. echo "<tr><td style=padding-bottom:11px;>$strKey1:</td>";
  80. echo "<td style=padding-bottom:11px;>$strValue1</td>";
  81. echo "<td style=padding-bottom:11px;>$x $waluta</td></tr>";
  82. }
  83.  
  84. }
  85. echo '</tr>';
  86. echo '</table>';
  87. }
  88. ?>
  89. </div>
  90.  
  91. <div id="srodek-prawa" style="border:solid 0px black;float:right;">
  92.  
  93. <div style="width:160px;border:solid 0px black;">
  94. <div style="padding-bottom:5px;">Ustalanie ceny:</div>
  95. <form action='magazyn.php' method='post'>
  96. <input type='text' name='towar'>
  97. <input autocomplete='off' type='text' name='cena'>
  98. <input type='submit' value='Wykonaj'>
  99. </form>
  100. </div>
  101. <?
  102. if(!empty($_POST['cena'])){$cena = str_replace(',', '.', $cena);}
  103. if($_POST['cena']){
  104. if($wybor1==sklep){$_SESSION['ref']=2;}else{$_SESSION['ref']=1;}
  105. $odpowiedz4 = mysql_query("update ceny set $towar = $cena WHERE nrkonta = $nrkonta;");
  106. header("Location: magazyn.php");
  107. }
  108. ?>
  109. </div>
  110. </div>
  111. </div>
  112.  
  113.  
  114.  
  115.  
  116. </body>
  117. </html>
  118.  
  119.  
Turson
  1. $_SESSION[ref]
  2. $_SESSION[ref]

znowu brakuje "

  1. <input style=margin-left:60px;margin-top:4px; type='submit' value='Wykonaj'>

style umieśc w "

  1. if(empty($_POST['wybor1']) and empty($_POST['wybor']) and empty($wybor1) and empty($_POST['cena'])){echo $kom1; exit();}

coś mi się tu wydaje, że powinno być OR (||) a nie AND. Gdy user nie uzupełni któregoś z pól raczej powinno się zatrzymać skrypt

  1. if($wybor1==start)

Masz stałą start bo nie widziałem nigdzie deklaracji. Umieść też w uszkach, a do tego === zamiast ==
nospor
@iqique włacz wkoncu odrobine samodzielnosci :/

Podalem ci co masz robic, podalem ci linka do tematu, ktory to wszystko wyjasnia. Czy naprawda za kazdym razem trzeba ci pisac: a teraz wez sprawdz czy ta zmienna jest ustawiona czy nie?questionmark.gifquestionmark.gifquestionmark.gif

Mowisz ze nie wykouje ci sie update. On jest w warunku. Zobacz, czy warunek jest spelniony, jesli tak, zobacz jak wyglada wygeneroane zapytanie, zobacz czy zapytanie nie rzuca bledem. Ile razy mozna to samo powtarzarzac ?
com
nospor
Dalej się nie rozumiemy, wiec wyjaśnię to łopatologicznie:
przykładowa składnia Update:
UPDATE table_name SET column1=value1,...WHERE ....;

column1 - musi być nazwą kolumny z bazy danych, wiec jak w input podam jabłko to takiej kolumny mi nie znajdzie, bo w bazie mam kolumnę towar a w niej rekord o wartości jablko a nie milion kolumn o nazwach towarów, bo jeśli tak ma autor to znaczy ze ma źle zaprojektowaną bazę.. Z czym na pewno się zgodzisz..

dlatego też sie poprawiłem w tamtym poście żeby nie było wątpliwości :
Cytat
sądzę że $towar2=$cena2 nie masz kolumny o nazwie z zmiennej towar2 ale może się mylę, tak to powinienem napisać sory wink.gif
Turson
ba, bo jest wręcz niebezpieczne, jeśli użytkownik może dać update kolumny jakiej chce, bo wystarczy, że poda ją w formularzu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.