Checkbox + dodatkowe pola w bazie danych

Checkbox + dodatkowe pola w bazie danych
0

Witam, mam pewną zagwozdkę dotyczącą dodawania rekordów do bazy danych.
W pliku index.php wyświetlam wartości z bazy danych tj.: NAZWA I KOD
W pliku dodaj.php dodaje wartości do bazy danych wpisując NAZWĘ i KOD.
Mam łącznie 10 różnych NAZW.
Kiedy chcę dodać KOD do wszystkich 10 NAZW, muszę dodawać to ręcznie, klikając 10 razy.
Czy jest możliwość zrobienia tego za pomocą checkboxa i dodania za jednym razem np. 10 rekordów do bazy danych ?
W bazie danych mam tabele o nazwie "wpisy" i dodane 3 kolumny: ID, 1K, 2K.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Jest taka możliwość. Robisz forma, który otacza rekordy dodajesz checkboxy przy każdym rekordzie (checkbox jako tablica z id rekordu jako index). Submitujesz forma z jakimś specjalnym parametrem np "bulkEdit" w phpie dostajesz tablicę id'ków i przekazujesz je np do forma, w którym masz textarea czy inny typ. Voila :)

Ew. możesz to zrobić od razu - formularzem otaczasz liste rekordów z checkboxami, dodajesz jakiegoś ukrytego diva z inputem/textarea - który za pomocą javascriptu pokazuje się w momencie gdy zaznaczysz jakiegoś checkboxa. Wtedy wpisujesz KOD i submitujesz. Oczywiście nadal musisz po stronie php'a obsłużyć tablicę checkboxów.

edytowany 2x, ostatnio: axelbest
0
axelbest napisał(a):

Jest taka możliwość. Robisz forma, który otacza rekordy dodajesz checkboxy przy każdym rekordzie (checkbox jako tablica z id rekordu jako index). Submitujesz forma z jakimś specjalnym parametrem np "bulkEdit" w phpie dostajesz tablicę id'ków i przekazujesz je np do forma, w którym masz textarea czy inny typ. Voila :)

Ew. możesz to zrobić od razu - formularzem otaczasz liste rekordów z checkboxami, dodajesz jakiegoś ukrytego diva z inputem/textarea - który za pomocą javascriptu pokazuje się w momencie gdy zaznaczysz jakiegoś checkboxa. Wtedy wpisujesz KOD i submitujesz. Oczywiście nadal musisz po stronie php'a obsłużyć tablicę checkboxów.

Czy mógłbyś pomóc z tym formularzem, obecnie prezentuje się to tak:

Kopiuj
Form wygląda tak:

<form name="moj" method="post" action="" id="moj" onClick="return validate();">
<input type="text" name="1k" id="1k"  placeholder="Nazwa">
<input type="text" name="2k" id="2k"  placeholder="KOD">
<input type="text" class="3k"  name="3k" id="3k" placeholder="DATA" value="<?php echo date('d-m-Y');?>">
<input type="submit" name="submit" class="przycisk"value="DODAJ" />
</form>

Skrypt na dodawanie tak:

<?php
require_once("dbcontroller.php");
$db_handle = new DBController();
if(!empty($_POST["submit"])) {
	$result = mysql_query("INSERT INTO proby(1k, 2k) VALUES('".$_POST["1k"]."','".$_POST["2k"]."')");
	if(!$result){
			$message="Pole nie może być puste!";
	} else {
		header("Location:index.php");
	}
}
?>
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Najpierw napisz czego dokładnie nie zrozumiałeś z tego co napisałem. Pisałem to na szybko, więc jakieś tam skróty myślowe są. Poza tym polecam założyć konto tutaj.

T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0
axelbest napisał(a):

Najpierw napisz czego dokładnie nie zrozumiałeś z tego co napisałem. Pisałem to na szybko, więc jakieś tam skróty myślowe są. Poza tym polecam założyć konto tutaj.

Praktycznie wszystko jest dla mnie niezrozumiałe, to co posiadam zostało zbudowane na zasadzie prób i błędów oparte o prostego CRUD'a dostępnego w internecie.
Obecnie wszystko się dodaje bez problemu, ale pozostaje mi kwestia utworzenia tej dostępnej listy, żeby nie trzeba było klikać kilkanaście razy przy dodawaniu do bazy.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

W takim razie polecam zacząć od podstaw.

  1. Jak się tworzy formularze - typy inputów (w Twoim przypadku text/checkbox/submit/)
  2. Jak html działa i jak powinny być nadawane atrybuty
  3. Jak powinno wyglądać nazewnictwo zmiennych, atrybutów (1k, 2k - nic nie mówią)
  4. Jak są przesyłane dane z formularzy (metody get/post)
  5. Javascript - jak wykonać akcję pokazującą, ukrywająca dany blok htmla

Wiem że to może dużo, a Ty pewnie poszukujesz szybkiego gotowego rozwiązania. Ale masz dwa/trzy wyjścia

  1. Nauczyć się samemu i tworzyć co tylko zechcesz
  2. Dostać gotowca dzięki czemu nic się nie nauczysz i być może za jakiś czas wrócisz tu z innym problem.
  3. Określić to jako ogłoszenie drobne i przelać mi 75pln na konto, a następnie cieszyć się działającym kodem.
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Witaj, zacząłem drążyć temat i udało mi się osiągnąć efekt dodawania produktów do bazy danych po zaznaczeniu jednak jako ciągły wpis w jednym rekordzie.
Po zwróceniu wartości z bazy danych otrzymuję wartości wpisane po przecinku.
W jaki sposób osiągnąć rezultat dodania do bazy danych jako osobne rekordy ?
Obecny plik prezentuje się następująco:

Kopiuj
<html>
<head>
<meta charset="utf-8">
<title></title>
<link href="style.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8">
</head>

<body>
 <form method="post" action="">
<input type="checkbox" name="chkbox[]" value="niebieski"><label>niebieski</label><br/>
<input type="checkbox" name="chkbox[]" value="zielony"><label>zielony</label><br/>
<input type="text" name="kol" id="kol"  placeholder="KOD ARTYKUŁU">
<input type="submit" name="submit" Value="submit">
</form>

<?php
include 'post.php';
if (isset($_POST['submit']))
{
 $chkbox = $_POST['chkbox'];
 $chkNew = ""; 
 foreach($chkbox as $chkNew1) 
 { 
 $chkNew .= $chkNew1 . ","; 
 } 
 $query = "INSERT INTO testowa (kolumna, kol) VALUES ('$chkNew','".$_POST["kol"]."')";
 mysql_query($query) or die(mysql_error());
 echo "Successfully Submitted.";
 }
?>

<?php
$query="SELECT * FROM testowa";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=0;
while ($i < $num) {
$kolumna=mysql_result($result,$i,"kolumna");
$kol=mysql_result($result,$i,"kol");
echo "
<div id='ramka-glowna'>
<table cellpadding='10' cellspacing='1'>
<thead>
<tr class='duze'>
<th><strong>DLA KOGO</strong></th>
<th><strong>KOD ARTYKUŁU</strong></th>          
</tr>
</thead>
<tr class='srodek'>
<td>$kolumna</td>
<td>$kol</td>
</tr>
</table>
</div>
";
$i++;
}
?>

</body>
</html>
edytowany 1x, ostatnio: tracer87
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Czy Tobie taki kod wygodnie się czyta? Jeśli nie (a mi nie czyta się go wygodnie) - to polecam rozbić go na części. Poczytaj sobie jak działają funkcje w php'ie - naucz się jak je tworzyć, przekazywać parametry. Dzięki temu będziesz miał kilka funkcji własnego autorstwa (poniżej moje propozycje)

  1. insertNewRecord($columnName, $value) - wstawia nowy rekord
  2. fetchAll() - pobiera wszystkie rekordy
  3. getCheckboxIndexes() - pobiera wartości z tablicy $_POST z Twojego formularza.

Powyższe funkcje nie są najwyższych lotów - mają swoje wady, opisałem je tak a nie inaczej, ponieważ widać że dopiero co zaczynasz programować.
Napisz te funkcje - zgodnie z poniższymi wytycznymi

  1. wszystko ma być po angielsku *
  2. funkcje nie mogą zawierać żadnych komunikatów echo/var_dump tylko przetwarzane/pobrane z bazy dane. Nie mogą też zawierać html'a

Na początek starczy
Następnie - a raczej najpierw - sciągnij sobie netbeansa czy inne IDE (moi faworyci ograniczają się tylko do netbeansa i phpstorma). Po czym dowiedz się jak się formatuje kod i następnym razem wklej sformatowany kod.

Oczywiście przyzwyczajaj się do IDE i ww. funkcje pisz już w nim, bo mam wrażenie że robisz to w notepad++ albo w jakimś innym notatniku.

Jak nauczysz się tego (może to zająć kilka godzin/dni) to przejdziemy dalej - nie wspominałeś nic o czasie wykonania tego skryptu, więc zakładam że termin Cię nie pogania i możesz śmiało się dokształcać.

    • polskie teksty w przypadku Twojego kodu powinny występować wewnątrz tagów, w atrybutach typu "placeholder". Nie stosuj polskich nazwa w klasach/id css'owych

Życzę powodzenia.

edytowany 3x, ostatnio: axelbest
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Przejrzałem funkcje, które wskazałeś.
Nie jestem programistą i daleko mi do niego.
Dziękuję za wskazówki, a o funkcjach na pewno poczytam, ale nie wiem czy będę potrafił je zaimplementować.
Obecnie bawię się tym na domowym serwerze, stosując różne rozwiązania.
To co napisałem niestety było dla mnie katorgą, opierało się na wielu próbach, niestety brak zaplecza, wiedzy i mnogość różnych poradników przyprawia o zawrót głowy.
Ściągnąłem sobie edytor NOTEPAD++, który ładnie zaznacza linie i koloruje kod.
Zwrócenie rezultatu z bazy danych po przez "echo" jest najłatwiejsze i dlatego to zastosowałem.
Klasy CSS i ID'y poprawię, tak samo jak przebuduję bazę danych na zwroty angielskie.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Załatw sobie jakiegoś ebooka w stylu "php oop i mvc" lub "php i mysql" (lub coś w tym stylu, konkretne tytuły znajdziesz np na helionie) przeczytaj od początku do końca i wtedy zrozumiesz. Masz też dobre podejście bo przyjmujesz godnie uwagi na klatce, co rzadko się zdarza u osób początkujących. Dodatkowo możesz poczytać o zasadach solid, kiss i dry. Na początku dry (Don't repeat yourself) będzie Ci najłatwiej wykonać, po prostu nie duplikuj kodu. Jak gdzie zobaczysz powtarzające się bloki kodu, to pomysł o tym jak przenieść je do funkcji. Zamiast note pada polecam jednak netbeansa

edytowany 1x, ostatnio: axelbest
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Pomału zaczynam wczytywać się w funkcję.
Jednak napotkałem problem przy wczytywaniu danych do bazy, w przeglądarce wyrzuca błąd:

Kopiuj
Notice: Undefined index: chk1 in checkbox.php line 4

checkbox.php

Kopiuj
<?php
session_start();
include("config.php");
$checkbox1 = $_POST['chk1'];
if (isset($_GET['submit']))
{
}
else
{
}
{

for ($i=0; $i<sizeof($checkbox1);$i++) {
$query="INSERT INTO samples (cust, art, date, quant) VALUES ('".$checkbox1[$i]."','".$_POST["art"]."','".$_POST["date"]."','".$_POST["quant"]."')";
mysql_query($query) or die ('Error updating database');
	header("Location:index.php");
}
}
?>
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Netbeans -> Source->Format - teraz ten kod jest brzydki. Sformatuj go i zedytuj posta. A co do błędu - zmienna $_POST['chk1'] pewnie nie zawsze jest ustawiona - dzieje się to tylko po zasubmitowaniu forma, więc sprawdzaj czy zmienna istnieje (funkcje np isset/empty)

edytowany 1x, ostatnio: axelbest
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Po przeformatowaniu kodu, uciekły mi polskie znaki w nagłówku, a kod wygląda tak:

Kopiuj
<?php
session_start();
include("cfgmain.php");
$checkbox1 = $_POST['chk1'];
if (isset($_GET['submit'])) {
    
} else {
    
} {

    for ($i = 0; $i < sizeof($checkbox1); $i++) {
        $query = "INSERT INTO samples (cust, art, date, quant) VALUES ('" . $checkbox1[$i] . "','" . $_POST["art"] . "','" . $_POST["date"] . "','" . $_POST["quant"] . "')";
        mysql_query($query) or die('Error updating database');
        header("Location:index.php");
    }
}
?>

Błąd nadal występuje.

W między czasie utworzyłem sobie plik do edycji wpisu, ale oczywiście nie obyło się bez błędów:

Kopiuj
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = ("UPDATE samples SET art = '" . $_POST["art"] . "', quant = '" . $_POST["quant"] . "' WHERE  id=" . $_GET["id"]);

if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

<link href="style.css" type="text/css" rel="stylesheet" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots" content="noindex, nofollow">
<div class="dodawanie">
    <form action="" method="post">
        <input type="text" name="art" placeholder="KOD ARTYKU�U" >
        <input type="text" name="quant" placeholder="ILOŚĆ" value="<?php echo $sql[0]["quant"]; ?>">
        <input type="submit" name="Submit" class="przycisk" value="DODAJ" >
    </form>
</div>

Illegal string offset 'quant'
Undefined index: quant

edytowany 1x, ostatnio: tracer87
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)