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.

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.

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:

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");
	}
}
?>
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.

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.

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.
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:

<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>
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.

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.

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

0

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

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

checkbox.php

<?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");
}
}
?>
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)

0

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

<?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:

<?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

1 użytkowników online, w tym zalogowanych: 0, gości: 1