Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Jak zapisac do bazy liczby?
woxala123
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Witam!
Zrobiłem sobie taki formularz, gdzie po zaznaczeniu checkboksów - pokazuja mi sie po wysłaniu wybrane liczby w tabelce. Mam zapytanie jak teraz te wyświetlone liczby zapisać do bazy danych,
tak jak jest struktura tabeli tzn.ball1; ball2;ball3 itd...
  1. <html>
  2. <head>
  3. <title>Wybrane liczby</title>
  4. </head>
  5. <body>
  6. <h3>Proszę wybierz liczby</h3>
  7. <form method="post">
  8. <p><input type="checkbox" name="language[]" value="1" /> 1</p>
  9. <p><input type="checkbox" name="language[]" value="2" /> 2</p>
  10. <p><input type="checkbox" name="language[]" value="3" /> 3</p>
  11. <p><input type="checkbox" name="language[]" value="4" /> 4</p>
  12. <p><input type="checkbox" name="language[]" value="5" /> 5</p>
  13. <p><input type="checkbox" name="language[]" value="6" /> 6</p>
  14. <p><input type="checkbox" name="language[]" value="7" /> 7</p>
  15. <p><input type="checkbox" name="language[]" value="8" /> 8</p>
  16. <p><input type="checkbox" name="language[]" value="9" /> 9</p>
  17. <p><input type="checkbox" name="language[]" value="10" /> 10</p>
  18. <p><input type="checkbox" name="language[]" value="11" /> 11</p>
  19. <p><input type="checkbox" name="language[]" value="12" /> 12</p>
  20. <p><input type="checkbox" name="language[]" value="13" /> 13</p>
  21. <p><input type="checkbox" name="language[]" value="14" /> 14</p>
  22. <p><input type="checkbox" name="language[]" value="15" /> 15</p>
  23. <p><input type="submit" name="submit" value="Submit" />
  24.  
  25. <p>
  26. </form>
  27. <p>
  28. <label for="textfield"></label>
  29. </p>
  30. </body>
  31. </html>
  32. <table border="3" align="center">
  33. <tr>
  34. <?php
  35. if(isset($_POST["submit"]))
  36. {
  37. if(!empty($_POST["language"]))
  38. {
  39. echo '<h3>Twoje wybrane liczby</h3>';
  40. foreach($_POST["language"] as $language)
  41. {
  42.  
  43. echo '<td> ' .$language. '</td>';
  44. }
  45. }
  46. else
  47. {
  48. echo "Musisz zaznaczyć by móc zobaczyc swoje liczby";
  49. }
  50. }
  51.  
  52. ?> </tr>


Pozdrawuiam i z góry dziękuje za jakąkolwiek pomoc.

Myslałem cos o taki poleceniu
$sql = "INSERT INTO `loto`.`lotto` (date, ball1, ball2, ball3, ball4, ball5, ball6) VALUES ($_POST[language])"; tylko cos jeszcze nie pasi. Tzn jeszcze nie zapisuje. Oczywiście połączenie z bazą danych jest.
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


https://prophp.pl/advice/show/13/w_jaki_spo...larza_do_php%3F
Zamiast update insert oczywiście. Zobacz jeszcze artykuł o pdo.
Go to the top of the page
+Quote Post
woxala123
post
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Jeszcze nie ruszam się za PDO, chce na dziś ten temat ogarnąć tylko stoje w miejscu.
Zrobiłęm takie polecenie

$sql = "INSERT INTO `loto`.`lotto` (`id`, `ball1`, `ball2`, `ball3`, `ball4`, `ball5`, `ball6`) VALUES ('', '%s', '%s', '%s', '%s', '%s', '%s')"; ale tlko dodaje rekord ale nie zapisuje wybranych liczb.
Prosze o nakierowanie lub przykłąd.
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


A to czego używasz? Mysqli? Liczby to nie s tylko d i bez ciapek.
Go to the top of the page
+Quote Post
woxala123
post
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Viking to gdzie leży błąd w zapytaniu?
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Powtórzę pytanie - czego używasz do obsługi bazy? Jeśli mysqli i bindowania to nie tak się robi
Go to the top of the page
+Quote Post
woxala123
post
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Masz rację viking, zrobię to od innej strony. Tylko chciałem wynik tej petli zapisać do bazy danych.

Okey to inaczej wracając do tematu jak rozpisać $language' bo jak dam takie zapytanie
$sql = "INSERT INTO `loto`.`lotto` (`id`, `ball1`, `ball2`) VALUES ('', '$language', '$language')"; to wstawia m tylko ostatnia wybrana liczbę. Nie umiem tego zrobić by np wybrane 2 liczby wstawił do bazy.

Czy ktoś nakieruje z tą pętlą.
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Artykuł opisywał jak masz to zrobić. Jeśli nie chcesz pdo to zostaje mysqli i bindowanie parametrów. To co przedstawiłes to był jakiś ciąg znaków dla sprintf. Dla klucza głównego nie wstawia się pustego stringu '' tylko pomija całkowicie.
Go to the top of the page
+Quote Post
woxala123
post
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


To jak zapisać wynik pętli do bazy danych żeby każda liczbę zapisywał do osobnej kolumny.?

Kto rozwiąże mój dylemat?

Czy wie ktoś jak to ruszyć z kopyta?

Witam.
Zrobiłem teraz taki plik, ale wyskakuje mi taki bład "Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\....\loko.php on line 40"
Jak zdefiiowac argument poprawnie dla foreach by zapisywał do bazy danych?
  1.  
  2. <?php require_once('Connections/local.php'); ?>
  3. <?php
  4. if (!function_exists("GetSQLValueString")) {
  5. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
  6. {
  7. if (PHP_VERSION < 6) {
  8. $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  9. }
  10.  
  11. $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  12.  
  13. switch ($theType) {
  14. case "text":
  15. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  16. break;
  17. case "long":
  18. case "int":
  19. $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  20. break;
  21. case "double":
  22. $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  23. break;
  24. case "date":
  25. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  26. break;
  27. case "defined":
  28. $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  29. break;
  30. }
  31. return $theValue;
  32. }
  33. }
  34.  
  35. $editFormAction = $_SERVER['PHP_SELF'];
  36. if (isset($_SERVER['QUERY_STRING'])) {
  37. $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
  38. }
  39.  
  40. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2"))
  41. foreach ($_POST['id'] as $item)
  42. {
  43. $insertSQL = sprintf("INSERT INTO loko (id, bal1, bal2, bal3, bal4, bal5, bal6) VALUES (%s, %s, %s, %s, %s, %s, %s) ",
  44.  
  45. GetSQLValueString($_POST['bal1'][$item], "int"),
  46. GetSQLValueString($_POST['bal2'][$item], "int"),
  47. GetSQLValueString($_POST['bal3'][$item], "int"),
  48. GetSQLValueString($_POST['bal4'][$item], "int"),
  49. GetSQLValueString($_POST['bal5'][$item], "int"),
  50. GetSQLValueString($_POST['bal6'][$item], "int"),
  51. GetSQLValueString($item, "int"));
  52. mysql_select_db($database_local, $local);
  53. $Result1 = mysql_query($insertSQL, $local) or die(mysql_error());
  54.  
  55. $insertGoTo = "loko.php";
  56. if (isset($_SERVER['QUERY_STRING'])) {
  57. $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
  58. $insertGoTo .= $_SERVER['QUERY_STRING'];
  59. }
  60. header(sprintf("Location: %s", $insertGoTo));
  61.  
  62. }
  63.  
  64. mysql_select_db($database_local, $local);
  65. $query_Recordset1 = "SELECT * FROM lotto";
  66. $Recordset1 = mysql_query($query_Recordset1, $local) or die(mysql_error());
  67. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  68. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  69. ?>
  70. <form name="form1" method="post" action="">
  71. <table border="1">
  72. <tr>
  73. <td>id</td>
  74. <td>ball1</td>
  75. </tr>
  76. <?php do { ?>
  77. <tr>
  78. <td><?php echo $row_Recordset1['id']; ?>
  79. <input type="checkbox" name="checkbox[]" id="checkbox[]" value="<?php echo $row_Recordset1['id']; ?> ">
  80. <label for="checkbox"></label></td>
  81. <td><?php echo $row_Recordset1['ball1']; ?></td>
  82. </tr>
  83. <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
  84. </table>
  85. <input type="submit" name="button" id="button" value="Wyślij">
  86. </form>
  87. <p>
  88. <?php
  89. mysql_free_result($Recordset1);
  90. ?>
  91.  
  92. <?php
  93.  
  94.  
  95. $dane = $_POST['checkbox'];
  96.  
  97. // sprawdzanie: czy jakieś pole zostało w ogóle zaznaczone - jeśli puste to zwracamy error
  98. if ( !count($dane) ) {
  99. die('Wybierz pole...');
  100. }
  101.  
  102. mysql_select_db($database_local, $local);
  103. $query_Recordset1 = "SELECT id, ball1 FROM lotto WHERE id IN (".implode(',',$_POST['checkbox']).")";
  104. $Recordset1 = mysql_query($query_Recordset1, $local) or die(mysql_error());
  105. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  106. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  107. ?>
  108. </p>
  109. <form name="form2" method="post" action="">
  110. <table width="200" border="1">
  111. <?php do { ?>
  112. <tr>
  113. <td><?php echo $row_Recordset1['ball1']; ?></td>
  114.  
  115. </tr>
  116. <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
  117. </table>
  118. <input type="submit" name="button2" id="button2" value="Wyślij">
  119. <input type="hidden" name="MM_insert" value="form2">
  120. </form>
  121. <p>&nbsp; </p>
  122.  


Ten post edytował woxala123 28.11.2016, 12:16:54
Go to the top of the page
+Quote Post
Tomplus
post
Post #10





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Ja na twoim miejscu sprawdziłbym czy w ogóle do SQL trafiają dane które oczekujesz zrób sobie print

  1. GetSQLValueString($_POST['bal1'][$item], "int"),
  2. GetSQLValueString($_POST['bal2'][$item], "int"),
  3. GetSQLValueString($_POST['bal3'][$item], "int"),
  4. GetSQLValueString($_POST['bal4'][$item], "int"),
  5. GetSQLValueString($_POST['bal5'][$item], "int"),
  6. GetSQLValueString($_POST['bal6'][$item], "int"),
  7. GetSQLValueString($item, "int")
  8. ]);


Dodatkowo daje dziwne zapytanie: jeżeli idItem jest na końcu tej tablicy, to dlaczego w INSERT dajesz id na początku?
Go to the top of the page
+Quote Post
woxala123
post
Post #11





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Nadal to samo pokazuje.
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




foreach ($_POST['id']
Przeciez $_POST['id'] to zwykle pole ID a nie tablica wiec nie bardzo rozumiem co ty oczekujesz od tego kodu

ps: a w ogole to twoj formularz nie zawiera pola o NAME="ID" wiec dla foreach przekazujesz NULL
Go to the top of the page
+Quote Post
woxala123
post
Post #13





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


To szczerze powiem nie wiem jak to rozpisać. Siedzę już nad tym 2 drugi dzień. Przy pierwszym pliku jest na górze zapisuje mi tylko ostatnią liczbę. Tutaj nic nie wychodzi.
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




To moze zacznij analizowac kod jaki masz.
Ani nie masz POST['id'] ani nie masz POST[bal...]

Zrob sobie print_r($_POST);
i przyjrzyj sie w koncu tem co wysyla formularz ktory sam generujesz a nie strzelasz na slepo z wymyslonych pol, ktorych twoj formularz nie ma.
Go to the top of the page
+Quote Post
woxala123
post
Post #15





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Okey teraz taki komunikat Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\admin\loko.php on line 40
Array ( [button2] => Wyślij [MM_insert] => form2 )
Czyli trzeba zdefiniowac $_POST

Tyczyli to zdefinować tak
$id=$_POST['id'] i $bal1=$_POST['bal1']

Co dalej z tym? Siedzę przy tym i nic nie wychodzi. Może jakis może przykład bym mógł nad tym dojść do porządku dziennego. Please

Ten post edytował woxala123 28.11.2016, 13:57:28
Go to the top of the page
+Quote Post
Tomplus
post
Post #16





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Wiesz jak działa pętla?

jeżeli jako pierwszą wartość w pętli wrzucasz string/number to wyskakuje ci błąd niepoprawnej wartości.
Czyli tak jak powiedział Nospor, zacznij tam wrzucać tablicę.

Możesz w IF przed foreach dodać sobie:

  1. if(is_array($_POST['CosDodaneDoForeach'])) {
  2. foreach($_POST['CosDodaneDoForeach']) as $klucz => $wartosc) {
  3. }
  4. }
Go to the top of the page
+Quote Post
woxala123
post
Post #17





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Witam!
Dziękue za zainteresowanie. Zajmę się tym już jutro, ale wciąż bedę życzliwy za jakiekolwiek sugestie.
Go to the top of the page
+Quote Post
Niree
post
Post #18





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

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


Hmm, jak rozumiem, chcesz zaznaczone liczby dodać do mysql?

Przedstawiłeś kod: INSERT INTO loko (id, bal1, bal2, bal3, bal4, bal5, bal6) VALUES (%s, %s, %s, %s, %s, %s, %s)
Po tym wnioskuję, że musiałoby być zaznaczone min. 6 pól 'language'.
Tworząc language[] stworzyłeś tablicę, więc:

  1. <?php
  2. if(isset($_POST["submit"]))
  3. {
  4. if(isset($_POST["language"]))
  5. {
  6. $total = count($_POST['language']);
  7. if($total == '6')
  8. {
  9. echo '<h3>Twoje wybrane liczby</h3>';
  10. $i = 0;
  11. while($i < $total)
  12. {
  13. if($i == '0') $number = $_POST['language'][$i]; else $number .= ','.$_POST['language'][$i].'';
  14. echo '<td> '.$_POST['language'].'</td>';
  15. i++;
  16. }
  17. }
  18. else
  19. {
  20. echo "Musisz zaznaczyć minimum 6 pól.";
  21. }
  22. }
  23. else
  24. {
  25. echo "Musisz zaznaczyć by móc zobaczyc swoje liczby";
  26. }
  27. }
  28.  
  29. ?>


Jak widzisz, kod wymaga zaznaczenia minimum 6 pól.
Wynik będzie w postaci np. 1,2,3,4,5,6 więc musisz: oddzielić liczby funkcją explode() oraz wrzucić je do zapytania MySQL.
Np:
Cytat
$explode = explode(',', $number);
INSERT INTO loko (`id`, `bal1`, `bal2`, `bal3`, `bal4`, `bal5`, `bal6`) VALUES ('".$explode[0]."', '".$explode[1]."', '', '', '', '', '');

itp.

Ten post edytował Niree 28.11.2016, 20:16:39
Go to the top of the page
+Quote Post
woxala123
post
Post #19





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


Witam.
Okej Niree, przedstawiłeś rozwiązanie tylko tak w lini 49 poprawiłem i++; na $i++; i teraz to po zaznaczeniu 6 liczb wyskakuje
w tabelce
Array Array Array Array Array Array zamiast 6-ściu zaznaczonych liczb. Gdzie teraz tkwi błąd że pokazuje array a nie liczby.
Go to the top of the page
+Quote Post
Niree
post
Post #20





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

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


Tutaj widzę brak [$i] na końcu $_POST['language'] (moje niedopatrzenie):

  1. echo '<td> '.$_POST['language'][$i].'</td>';
  2. $i++;


Do bazy ładuje dobrze?

Ten post edytował Niree 30.11.2016, 16:01:17
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.08.2025 - 16:40