Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz z przekazanej tablicy.
Forum PHP.pl > Forum > PHP
qubec26
Witam,
mam taki kod:
  1. <?php
  2. require ('sess.php');
  3. include ('start.html');
  4. include ('connect.php');
  5. include ('query.php');
  6. // echo "Dane: ";
  7. // print_r($_POST);
  8. // $count=count($_POST[data]);
  9. // echo "Licznik:".$count;
  10. // for($i=0;$i<$count;$i++){
  11. // if($_POST[data][$i]<>''){
  12. // echo "<br>Wartość :".$_POST[data][$i];
  13. // }
  14. // }
  15. $w=0;
  16. $temp=0;
  17.  
  18. $result111 = mssql_query($query15);
  19. while($p = mssql_fetch_assoc($result111)) {
  20. $ida = $p['ID'];
  21. if($ida == $_POST[data][$w]){
  22. $w++;
  23. if($temp<>0){
  24. if($temp<>$p['NR_DET']){
  25. echo "You can select only items for one part number to be shiped together!";
  26. echo '<br><INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);return true;">';
  27. include ('footer.html');
  28. }
  29. }
  30. $temp=$p['NR_DET'];
  31. }
  32. }
  33. $result15 = mssql_query($query15);
  34. echo "<strong>".$_SESSION['nazwa1']." - ".$_SESSION['comname']."</strong>";
  35. $t=0;
  36. echo "<table cellpadding=\"2\" border=1>";
  37. echo "<caption align='ustawienie'><font color='red'></caption>";
  38. echo "<form name='form1' method='post' action=''>";
  39.  
  40. echo "<th><strong>ID</strong></th>";
  41. echo "<th><strong>Part number</strong></th>";
  42. echo "<th><strong>Delivery Qty</strong></th>";
  43. echo "<th><strong>Packing slip</strong></th>";
  44. echo "<th><strong>Boxes</strong></th>";
  45. echo "<th><strong>Box weight</strong></th>";
  46. echo "<th><strong>PO number</strong></th>";
  47. echo "<th><strong>PO Line</strong></th>";
  48. while($r = mssql_fetch_assoc($result15)) {
  49. $id = $r['ID'];
  50. if($id == $_POST[data][$t]){
  51. $t++;
  52.  
  53. include('kolor.php');
  54. echo "<tr><td>".$r['ID']."</td>";
  55. echo "<td>".$r['NR_DET']."</td>";
  56. echo "<td>".$r['ILOSC']."</td>";
  57. echo "<td><input type=text name=pack_slip value='".$r['PACKING_SLIP']."'/></td>";
  58. echo "<td><input type=text name=boxes value='".$r['BOXES']."'/></td>";
  59. echo "<td><input type=text name=box_weight value='".$r['BOX_WEIGHT']."'/></td>";
  60. echo "<td>".$r['NR_ZAMOWIENIA']."</td>";
  61. echo "<td>".$r['NR_LINII']."</td>";
  62. echo "<td><input type='submit' name='Save' value='Save'></td></tr>";
  63. $gti=$r['ID'];
  64. $pack_slip=$_POST['pack_slip'];
  65. $boxes=$_POST['boxes'];
  66. $box_weight=$_POST['box_weight'];
  67. if($pack_slip!=$r['PACKING_SLIP'] or $boxes!=$r['BOXES'] or $box_weight!=$r['BOX_WEIGHT']){
  68. $query22="UPDATE [PORTAL].[dbo].[IT_TEST] SET packing_slip = '$pack_slip' ,boxes = '$boxes', box_weight = '$box_weight' WHERE ID = '$gti'";
  69. $result22=mssql_query($query22);
  70. }
  71. }
  72. $ps++;
  73.  
  74. }
  75. echo "</form>";
  76. echo "</table>";
  77.  
  78.  
  79. mssql_close($dbhandle);
  80. include ('footer.html');
  81. ?>


Do tego pliku przekazuję zmienne w tablicy data metodą POST.
Jednak gdy zrobię refresh (F5) to wszystko znika - zmienne się kasują. Jak zapisać je na stałe, aby się nie kasowały?
Jest jeszcze kwestia tego, że nie działa zapisywanie wartości do SQL poprzez Update - nie wiem co tam jest nie tak.
Jeśli macie jakieś pomysły to pomoc mile widziana.
mathijas
Łojeju, chłopie.. :)

$_POST jest tablicą, która dotyczy danych wchodzących. Jak naciśniesz F5, to nie odświeżasz formularza, więc $_POST jest tracony.

Proste rozwiązanie - przepisz $_POST do $_SESSION. Możesz poszukać w dokumentacji funkcji array_merge o ile się nie mylę, a na pewno możesz spróbować

foreach($_POST as $k=>$v) $_SESSION[$k]=$v;

To takie "nieeleganckie" trochę rozwiązanie ale zadziała. Zrób tak na samym początku a potem odwołuj się tylko do $_SESSION. Jeśli formularz nadpiszesz, to automatycznie dane się uaktualnią.

Ma to jednak wadę - w $_SESSION będziesz miał zajęte te zmienne, które dodałeś z $_POST.


Co do drugiej sprawy - najpierw pozbądź się SQL Injection, a potem spróbuj odpalić to zapytanie w konsoli MSSQLa - powinien Ci powiedzieć jaki jest błąd.
qubec26
Ok. Za pierwszą część dzięki.
Co do drugiej to:
Jak pozbyć się SQL injection?
Zapytanie jest ok - tylko jak mam więcej niż jeden rekord to działa źle - bo zawsze spawdza warunki w ostatnim - a wpisuje do wszystkich to samo.
Mephistofeles
Cytat
Jak naciśniesz F5, to nie odświeżasz formularza, więc $_POST jest tracony.

Większość przeglądarek wyświetli wtedy informację o potrzebie wysłania dodatkowych danych, i przyciski tak/nie winksmiley.jpg.

SQL Injection najprościej pozbyć się używając prepared statements, unikniesz wtedy konieczności escape'owania znaków, gdzie mógłbyś o jakiejś zmiennej zapomnieć.
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.