Nadal nie wiem jak to zastosować. Po pierwsze dlatego, że nie dodaje pojedynczych danych a tablicę danych. Po drugie - wrzuciłem co trzeba, sprawdziłem - nie działa.
Tak wygląda moja funkcja, która odpowiada za dodawanie rekordów do bazy:
public function PassesAdded()
{
$i=0;
foreach ($_POST['s_id'] as $s_id)
{
$s_id;
$_POST['stud_cl_id'][$i];
$_POST['pass'][$i];
$_POST['pass_date'][$i];
$_POST['comments'][$i];
if ($_POST['pass'][$i] != '' && $_POST['pass_date'][$i] = '' || $_POST['comments'][$i] = '')
{
/*
echo 'Błąd, nie wypełniłeś wszystkich pól formularza!';
}elseif ($_POST['pass'][$i] != '' && $_POST['pass_date'][$i] != '' && $_POST['comments'][$i] != '')
{
*/
$q_pass = "INSERT INTO passes (class_id,student_id,pass,pass_date,comments) VALUES ('".$_POST['stud_cl_id'][$i]."','".$s_id."','".$_POST['pass'][$i]."','".$_POST['pass_date'][$i]."','".$_POST['comments'][$i]."')";
$Insert_passes = parent::getDB()->run($q_pass);
//echo 'Ocena: <b>'.$_POST['pass'][$i].'</b> z zajęć '.$_POST['stud_cl_id'][$i].' dla studenta '.$s_id.' została pomyślnie dodana!</br>';
}
$i++;
}
include('passes_added.html');
}
Myślałem, aby zrobić tak jak jest w komentarzu, że jeżeli ocena jest wpisana, a data lub komentarz nie wyświetli się komunikat (najlepiej okno) z info, że nie wypełniono wszystkich pól. Samo echo nic nie daje, tak czy inaczej po naciśnięciu submita formularz się chyba wysyła - strona przechodzi do widocznego includa.
Proszę pamiętać, że operuję na tablicy. Jeżeli mam formularz X studentów i wpiszę oceny tylko dla 3 i 10 studenta w formularzu, to dzięki powyższej funkcji zostaną dodane rekordy tylko dla 3 i 10 studenta z formularza.
To jak jest ktoś w stanie pomóc z tym skryptem? Ewentualnie jakoś inaczej da się to zrobić?
Edycja:
Bardzo proszę o jakieś rady. Czy da się coś z tym zrobić? Sprawdzanie tych pojedynczych pól w formularzu umieszczonym w pętli foreach (wyświetlanie wielu takich samych wierszów formularza)?
Chciał bym też prosić o pomoc w sprawie z tym związanej:
public function PassesAdded()
{
//if(!empty($_POST)){
//ob_start();
$i=0;
foreach ($_POST['s_id'] as $s_id)
{
$s_id;
$_POST['stud_cl_id'][$i];
$_POST['pass'][$i];
$_POST['pass_date'][$i];
$_POST['comments'][$i];
if ($_POST['pass'][$i] != '' && $_POST['pass_date'][$i] != '' && $_POST['comments'][$i] != '')
{
$q_add_passes = "INSERT INTO passes (
class_id,
student_id,
pass,
pass_date,
comments
) VALUES (
'".$_POST['stud_cl_id'][$i]."',
'".$s_id."',
'".$_POST['pass'][$i]."',
'".$_POST['pass_date'][$i]."',
'".$_POST['comments'][$i]."')";
$Insert_passes = parent::getDB()->run($q_add_passes);
echo 'Ocena: <b>'.$_POST['pass'][$i].'</b> z zajęć '.$_POST['stud_cl_id'][$i].' dla studenta '.$s_id.' została pomyślnie dodana!</br>'; } elseif ($s_id != '' && $_POST['stud_cl_id'][$i] != '' && $_POST['pass'][$i] = '' && $_POST['pass_date'][$i] = '' && $_POST['comments'][$i] = '')
{
echo 'Nie dodałeś żadnych ocen!'; }
$i++;
}
include('passes_added.html');
//parent::AddText(ob_get_clean());
//} else {
//parent::SetMessage('W bazie danych musi być conajmniej jedna jednostka, do której będzie można przypisać kierunek', 'red');
//echo 'Nie dodałeś żadnych ocen!';
//include('passes_added.html');
//}
}
Oto funkcja dodająca oceny do bazy danych. Chciał bym zrobić tak, że jeżeli prowadzący nie wpisze żadnej oceny a kliknie przycisk DODAJ pojawi się informacja (może być w tym includowanym pliku, albo po odświeżeniu na górze formularza), że nie wpisał żadnych danych. Nie mogę sobie z tym poradzić, ani echo ani SetMessage nie wyświetla danych po sprawdzeniu warunku. Na pewno trzeba tam zastosować odpowiednio IFa.
Mój formularz, jak widać w załączonym kodzie, przesyła następujące dane:
$s_id; //identyfikator studenta
$_POST['stud_cl_id'][$i]; //identyfikator zajęć
$_POST['pass'][$i]; //ocena
$_POST['pass_date'][$i]; //data
$_POST['comments'][$i]; //komentarz
z tym, że dwa pierwsze elementy są wysyłane w formularzu zawsze, niekoniecznie czy pozostałe elementy są wpisane czy nie. Na to przynajmniej wskazuje konsola w przeglądarce Chrome. Dlatego też uważam, iż trzeba to wziąć pod uwagę konstruując warunek IF, co próbowałem zrobić, tak jak widać na załączonym kodzie. Proszę o rady, pomoc. Sprawa bardzo pilna!