|
Funkcja foreach i przekazywane danych do mysql
|
| przemokrosno |
Dodany dnia 23.07.2009 08:22:29
|

Przedszkolak

Postów: 11
Data rejestracji: 23.07.2009 08:01
|
Witam
Napisa?em skrypt który zwraca zwraca sukces ale mimo wszystko nic si? nie wykonuje tzn nie dodaje rekordów do bazy danych. Je?li dodam je r?cznie to wy?wietla prawid?owo. Je?li zamieni? funkcj? INSERT na DELETE to równie? dzia?a bez problemu
M?czy mnie to ju? trzeci dzie? i nie mog? znale?? ?adnego b??du. Dlatego bardzo prosz? o pomoc Je?li kto? potrafi wskaza? mi b??d to b?d? bardzo wdzi?czny.
<?php
include '../includes/common.inc';
include '../includes/klasy.inc';
include '../includes/students.inc';
include '../includes/frekwencja.inc';
require_group(_TEACHER_GROUP);
define('_ATTENDANCE_DB_TABLE', $conf_settings['db_tblprefix'] . 'attendance');
if (!isset($_POST['class'], $_POST['toyear'], $_POST['tomonth'], $_POST['today'])) {
if (!isset($_GET['id']))
exit;
}
page_header();
page_menu();
if (!isset($_GET['id'])) {
$absentdate = $_POST['toyear'] . '-' . $_POST['tomonth'] . '-' . $_POST['today'];
$classid = intval($_POST['class']);
$classinfo = classGetClassById($classid);
} else {
$absentdate = date('Y-m-d');
$classid = intval($_GET['id']);
$classinfo = classGetClassById($classid);
}
$confquery = 'SELECT * FROM `CONFIG_DB_TABLE` WHERE `id`=1 ';
$confresult = mysql_query($confquery) or die(mysql_error());
$confrow = mysql_fetch_array($confresult);
$max=$confrow['lessonmax'];
// Wstawinie nieobecno?ci ------------------------------------------------------------------------
if ($_POST['todo'] == 'Wstaw') {
?>
<div id="content">
<h2>Wstawianie nieobecno?ci w klasie <?=$classinfo['name']?>, <?php echo $absentdate; ?></h2>
<div id="breadcrumb"><a href="<?=$conf_settings['site_url']?>">Strona g?ówna</a> -> <a href="/frekwencja/">Frekwencja</a> -> <em>Wstawianie nieobecno?ci</em></div>
<?php if ($success) echo "<strong class=\"success\">$success</strong>"; ?>
<div id="subnav">
<ul>
<li>
<form method="post" action="do.php" class="search">
<label for="toyear">
<img src="/images/options/search.png"/>
Przejd? do:
</label>
<?php dateboxes(true, false); ?>
<label for="class">
Klasy:
</label>
<?php classSelectBox(); ?>
<input type="submit" name="submit" value="Przejd?" />
</form>
</li>
</ul>
</div>
<div style="clear: both;"></div>
<p>Umie?? znacznik obok ka?dego nieobecnego ucznia.</p>
<?php
$studentlist = classGetStudentsById($classid);
if (empty($studentlist)) {
?>
W tej klasie nie ma wpisanych uczniów. Aby zarz?dza? frekwencj?, musisz <a href="/klasy/dodajstudent.php">doda? uczniów do tej klasy</a>.
<?php
} else {
?>
<form method="post" action="wstaw.php">
<table cellpadding="5" class="classlist">
<tr><th rowspan="2">ID ucznia</th><th rowspan="2">Imi?</th><th rowspan="2">Nazwisko</th><th rowspan="2">Nieobecny?</th><th colspan="<?=$max?>">Lekcje</th></tr>
<tr> <?php
for($j=0; $j < $max; $j++) {
echo "<th>";
$n=$j+1;
echo $n.'</th>';
}
echo '</tr>';
$i = 0;
foreach ($studentlist as $student)
{
$i++;
$studentinfo = studentGetStudentById(intval($student['studentid']));
if ($i % 2)
echo '<tr class="even">';
else
echo '<tr class="odd">';
echo '<td>'. $student['studentid'] .'</td>';
echo '<td>' . $studentinfo['firstname'] . '</td>';
echo '<td>' . $studentinfo['lastname'] . '</td>';
$absent = getStudentAttendance($absentdate, $classid, intval($student['studentid']));
$lesson = explode('|',$_POST['lesson']);
if ($absent == true) {
$absvalue = 'checked="checked" ';
}
echo '<td><input type="checkbox" name="student['.$student['studentid'].']" '.$absvalue.'/></td>';
for($j=0; $j < $max; $j++) {
if ($lesson[$j] == 1){
$lesson_value[$j] = 'checked="checked"';
} ?>
<td><input type="checkbox" name="<?php if(isset($lesson[$j])) echo $lesson[$j];?>" <?php echo $lesson_value[$j];?> ></td>
<?php
if ($lesson[$j] == true){
$lesson[$j] = 1;
} else {
$lesson[$j] = 0;
}
}
echo '</tr>';
echo "\n";
}
echo '</table>';
}
?>
<input type="hidden" name="absentdate" value="<?=$absentdate?>" />
<input type="hidden" name="classid" value="<?=$classid?>" />
<input type="hidden" name="classid" value="<?=$studentid?>" />
<input type="hidden" name="lesson" value="<?=$lesson = implode('|',$_POST['lesson'])?>" />
<input type="submit" name="todo" value="Wstaw" />
<?php
// Koniec wstawiania nieobecno?ci -------------------------------------------------------------------
page_footer();
?>
Kliknij i zaczekaj na załadowanie kodu ...
Kod pliku wstaw.php
<?php
include '../includes/common.inc';
include '../includes/klasy.inc';
include '../includes/students.inc';
include '../includes/frekwencja.inc';
require_group(_TEACHER_GROUP);
if (!isset($_POST['classid'], $_POST['absentdate'])) {
header('Location: /frekwencja/');
exit;
}
$date = $_POST['absentdate'];
$classid = intval($_POST['classid']);
if (isset($_POST['student'])) {
foreach ($student as $studentid => $status)
{
$query = 'INSERT INTO `intra_attendance` (`classid`, `studentid`, `date_absent`) VALUES ('.$classid.', '.$studentid.', '.$date.');';
$result = @mysql_query($query) or die(mysql_error());
return mysql_insert_id();
}
}
header('Location: /frekwencja/index.php?success=1');
exit;
?>
Kliknij i zaczekaj na załadowanie kodu ...
Edytowane przez Pieka dnia 23.07.2009 13:30:28
|
| |
|
|
| W?cibski Go?? |
Dodany dnia 26.10.2025 07:17:10
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
| IP: localhost |
|
|
| slawekneo |
Dodany dnia 23.07.2009 18:13:39
|

Bywalec

Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
Plik wstaw.php:
<?php
include '../includes/common.inc';
include '../includes/klasy.inc';
include '../includes/students.inc';
include '../includes/frekwencja.inc';
require_group(_TEACHER_GROUP);
if (!isset($_POST['classid'], $_POST['absentdate'])) {
header('Location: /frekwencja/');
exit;
}
$date = $_POST['absentdate'];
$classid = intval($_POST['classid']);
if (isset($_POST['student'])) {
foreach ($_POST['student'] as $studentid => $status){
$query = "INSERT INTO `intra_attendance` VALUES ('".$classid."', '".$studentid."', '".$date."')";
$result = @mysql_query($query) or die(mysql_error());
return mysql_insert_id();
}
}
header('Location: /frekwencja/index.php?success=1');
exit;
?>
Kliknij i zaczekaj na załadowanie kodu ...
I tu ciekawi mnie wiele spraw
- czy masz wlaczone register globals ?
jesli tak to polecam wylaczyc i przerobic caly skrytp pod dzialanie bez register globals
- w petli foreach masz wrzucona tablice $student pytanie moje czy jest to ta sama tablica co z $_POST['student'] jesli tak to polecam dac odpalic petle z tablicy _post bo w innym przypadku bedziesz mial bardzo grozna luke no i brak zabezpieczen na dane z post.
Pozdro!!
Edytowane przez Pieka dnia 23.07.2009 19:01:28
|
| |
|
|
| przemokrosno |
Dodany dnia 24.07.2009 07:25:10
|

Przedszkolak

Postów: 11
Data rejestracji: 23.07.2009 08:01
|
Mo?e to wszystko wyja?ni - plik index z którego pobieram klas? i dat?:
<?php
include '../includes/common.inc';
include '../includes/klasy.inc';
include '../includes/students.inc';
include '../includes/frekwencja.inc';
require_group(_TEACHER_GROUP);
page_header();
page_menu();
if (isset($_GET['success'])) {
if ($_GET['success'] == 1) {
$success = 'Nieobecno?ci zapisano pomy?lnie.';
}
}
?>
<div id="content">
<h2>Frekwencja</h2>
<div id="breadcrumb"><a href="<?=$conf_settings['site_url']?>">Strona g?ówna</a> -> <em>Frekwencja</em></div>
<?php if ($success) echo "<strong class=\"success\">$success</strong>"; ?>
<div id="subnav">
<ul>
<li>
<form method="post" action="/frekwencja/do.php" class="search">
<label for="toyear">
<img src="/images/options/search.png"/>
Przejd? do:
</label>
<?php dateboxes(true, false); ?>
<label for="class">
Klasy:
</label>
<?php classSelectBox(); ?>
<input type="submit" name="submit" value="Go" />
</form>
</li>
</ul>
</div>
<div style="clear: both;"></div>
<p>Witaj w systemie Frekwencji. Tutaj mo?esz wstawi? niobecno??, dokona? zmian i obejrze? histori? frekwencji.</p>
<?php
if (authUserInGroup($_SESSION['username'], _TEACHER_GROUP)) {
$classlist = classGetClassesByCreator($_SESSION['username']);
} elseif (authUserInGroup($_SESSION['username'], _ADMIN_GROUP)) {
$classlist = classGetClassesAfterTime(0);
}
if (empty($classlist)) { // no classes
?>
<p>Aktualnie nie ma ?adnych klas w bazie danych. Aby zarz?dza? frekwencj?, musisz <a href="/klasy/new.php">utworzy? nowe klasy</a></p>
<?php
} else {
?>
<form method="post" action="do.php">
<div style="float: left;">
<p>Wybierz klas?:</p>
<p>
<select name="class">
<?php
foreach ($classlist as $class)
{
echo '<option value="'.$class['id'].'">' . $class['name'] . '</option>';
}
?>
</select>
</p>
</div>
<div style="float: left;">
<p>Wybierz dat?:</p><p><?php dateboxes(); ?></p>
</div>
<div style="clear: both;"></div>
<p>
<input type="submit" name="todo" value="Wstaw" />
<input type="submit" name="todo" value="Przegl?daj" />
</p>
</form>
<?php
}
?>
</div> <!-- content -->
<?php
page_footer();
?>
Kliknij i zaczekaj na załadowanie kodu ...
Je?li chodzi o zabezpieczanie kodu to jeszcze do tego nie dotar?em.
Najpierw chc? to uruchomi? ?eby to dzia?a?o a zosta?a mi ju? tylko ta frekwencja (nadal nie dzia?a). Mo?e to jeszcze pomo?e - struktura tabeli frekwencji(attendance):
---------------------------------------------------
| id | studentid | classid | lesson | date_absent |
---------------------------------------------------
|
| |
|
|
| bartek124 |
Dodany dnia 24.07.2009 09:31:00
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Skoro w tabeli masz 4 pola do zapisu, a w zapytaniu przesy?asz tylko 3, to jakim cudem ma dzia?a??
Nie pomagam na komunikatorach oraz PW!
|
| |
|
|
| przemokrosno |
Dodany dnia 24.07.2009 11:08:17
|

Przedszkolak

Postów: 11
Data rejestracji: 23.07.2009 08:01
|
Nie wszystkie pola musz? by? wype?nione. Nawet jak usun? kolumn? lesson to i tak nie dzia?a. Wi?c jakie to ma znaczenie jakie pola s? w bazie skoro wype?niam trzy pozosta?e:
INSERT INTO `intra_attendance` (`classid`, `studentid`, `date_absent`) VALUES...
Edytowane przez Pieka dnia 24.07.2009 13:57:43
|
| |
|
|
| slawekneo |
Dodany dnia 24.07.2009 13:53:25
|

Bywalec

Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
A jednak ma znaczenie kolejnosc zreszta tez o ile ta podana jako struktura jest prawidlowa ;]
$query = "INSERT INTO `intra_attendance` VALUES ('', '".$studentid."', '".$classid."', '', '".$date."')";
Kliknij i zaczekaj na załadowanie kodu ...
Pozdro!! |
| |
|
|
| bartek124 |
Dodany dnia 24.07.2009 14:15:41
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
return mysql_insert_id();
To zatrzymuje p?tle. Ale przynajmniej raz powinno si? doda?...
Nie pomagam na komunikatorach oraz PW!
|
| |
|
|
| slawekneo |
Dodany dnia 24.07.2009 15:22:20
|

Bywalec

Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
Blokuje nie przez zwrócenie funkcji ale przez samo zwrócenie czyli "return" linia ktora podal bartek jest do wywalenia gdyz jest zbedna !
A ja teraz przyczepie sie do kodu pierwszego z pierwszego postu a mianowicie do czesci formularza ktory pozniej operuje na wstaw.php.
1.najprawdopodobniej rypneles sie w nazwie dla inputa w obu jest ta sama nazwa ! w drugim inpucie chyba powinna byc nazwa "studentid" <input type="hidden" name="classid" value="<?=$classid?>" />
<input type="hidden" name="classid" value="<?=$studentid?>" />
Kliknij i zaczekaj na załadowanie kodu ...
2.brak zamkniecia formularza czyli </form>
Pozdro!!
Edytowane przez Chemikpil dnia 24.07.2009 16:24:51
|
| |
|
|
| przemokrosno |
Dodany dnia 24.07.2009 15:45:16
|

Przedszkolak

Postów: 11
Data rejestracji: 23.07.2009 08:01
|
slawekneo napisa?/a:
Blokuje nie przez zwucenie funkcji ale przez samo zwrucenie czyli "return" linia ktora podal bartek jest do wywalenia gdyz jest zbedna !
A ja teraz przyczepie sie do kodu pierwszego z pierwszego postu a mianowicie do czesci formularza ktory pozniej operuje na wstaw.php.
1.najprawdopodobniej rypneles sie w nazwie dla inputa w obu jest ta sama nazwa ! w drugim inpucie chyba powinna byc nazwa "studentid" <input type="hidden" name="classid" value="<?=$classid?>" />
<input type="hidden" name="classid" value="<?=$studentid?>" />
Kliknij i zaczekaj na załadowanie kodu ...
2.brak zamkniecia formularza czyli </form>
Pozdro!!
To zauwa?y?em ju? wcze?niej i poprawi?em i w ko?cu zadzia?a?o po wyrzuceniu returna. Wielkie dzi?ki nie tylko dla Ciebie ale równie? dla Bartek124. Teraz pozostaje mi jeszcze dorobi? lekcje nieobecno?ci. Jakbym mia? jeszcze jakie? problemy to ju? wiem gdzie pisa?.
Pozdrawiam.
Edytowane przez Pieka dnia 31.07.2009 09:44:29
|
| |
|