Zobacz tak, zapomniałem, że się tablice zmieniły no i jedna dodatkowa kolumna była.
<?php
require("../macros/infopro.php");
require("../MC/funkcje/pracownia_osoby.php");
date_default_timezone_set('Europe/Paris');
$loginCookie='';
$loginUser='';
$loginPwd5='';
$loginStmp='';
$dostep='';
GET_LOGIN_COOKIE_PROG($loginCookie, $loginUser, $loginPwd5, $loginStmp, '/cgi-bin/mc/budzet/budzet.ndm/input', $dostep);
if (!strcasecmp($dostep, 't') == 0)
{
echo "<h2>Próba włamania do systemu<font color=red></font></h2>";
exit();
}
$host = "127.0.0.1";
$user="XXXXXX";
$pass="YYYYYYY";
setlocale(LC_COLLATE, 'pl_PL');
$OPTIONS = array( i5_naming => DB2_I5_NAMING_ON );
$conn = db2_connect("*LOCAL", $user, $pass, $OPTIONS);
if (!$conn) {
echo "Connection failed. SQL Err:";
echo db2_conn_error();
echo "<br>";
echo db2_conn_errormsg();
exit();
}
$library = "MACBORLIB";
/* Czy ta część jest do czegoś potrzebna? */
print_r ($_GET);
print '<br>w 124 POST = ';
print_r ($_POST);
print '<br>';
/* Czy to dla was taki debugger */
if (isset($_POST['pusrid']))
$pusrid=$_POST['pusrid'];
else {
if (isset($_GET['pusrid'])) {
$pusrid=$_GET['pusrid'];
}
else {
$pusrid = $loginUser;
}
}
if (isset($_POST['nr_z_adr']))
$nr_z_adr=$_POST['nr_z_adr'];
else {
if (isset($_GET['nr_z_adr'])) {
$nr_z_adr=$_GET['nr_z_adr'];
}
else {
$nr_z_adr = 0;
}
}
$sql_adr= "select nzwskr from adr/adr where kontob=".$nr_z_adr;
$stmt_adr = db2_query($conn, $sql_adr);
if (!$stmt_adr) {
print"Prepare Failed. Błąd w odczycie bazy adr <br>";
exit();
}
$row_adr = db2_fetch_array($stmt_adr);
$sql_ozs= "select ozsproc, ozsdproc, ozsod, ozsdo, ozszal, ozsdat from ".$library."/ozs where ozsid= $nr_z_adr order by ozsdo desc";
//print '=$sql_ozs='.$sql_ozs.'=<br>';
$stmt_ozs = db2_query($conn, $sql_ozs);
if (!$stmt_ozs) {
print"Prepare Failed. Błąd w odczycie bazy ozs <br>";
exit();
}
$procent = array();
$odpis = array();
$row_ozs = db2_fetch_both($stmt_ozs);
if (isset($row_ozs[0]) and ($row_ozs[0]!="")) {
// $pp = $row_ozs[0]*100; - to już nie jest potrzebne
/*poniższa instrukcja wyswietlała z kropką, a ja chcę przecinek, gdybym użyła funkcji number_format
* musiałabym podać ilosc miejsc po przecinku
*/
//print $pp;
$procent = $row_ozs[0].','.$row_ozs[1];
else {
$procent = "";
}
if ($row_ozs[2] > 0) {
$rkod = substr($row_ozs[2], 0,4);
$msod = substr($row_ozs[2], 4,2);
}
else {
$rkod = "";
$msod = "";
}
if ($row_ozs[3] > 0) {
$rkdo = substr($row_ozs[3], 0,4);
$msdo = substr($row_ozs[3], 4,2);
}
else {
$rkdo = "";
$msdo = "";
}
if ($row_ozs[5] > 0) {
$startDate = ($row_ozs[5], 0,4).'/'.substr($row_ozs[5], 4,2).'/'.substr($row_ozs[5], 6,2);
}
else {
$startDate = "";
}
db2_close($conn);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<table width=100%>
<tr>
<td>
<font COLOR=GREEN ALIGN="left" size="2">
<b>formularz: budzet/tab_zbiorcza/edytuj_odpisy.php</b>
</font>
</td>
<td ALIGN="right">
<font COLOR=GREEN size="4">
<?php echo "$loginUser"; ?>
</font>
</td>
</tr>
<tr>
<td>
<font ALIGN=left size=4>
Dzisiaj jest : <?php echo date("d.m.Y"); ?> r.
</font>
</td>
<td ALIGN=right>
<font size=4 >
godzina : <?php echo date("H:i:s"); ?> <!-- po co tutaj to r. było -->
</font>
</td>
</tr>
</table>
<form action="zmien_odpisy.php" method="post">
<input type="hidden" name="pusrid" value="<?php echo $pusrid; ?>" />
<input type="hidden" name="nr_z_adr" value="<?php echo $nr_z_adr; ?>" />
<center>
<h2>
Odpisy ze sprzedaży na komórkę <font color=green><?php print $nr_z_adr.' - '.$row_adr[0]; ?></font>
</h2>
<table border=1 cellpadding=3 bgcolor='lightgreen'>
<tr bgcolor='99CCFF'>
<th colspan=5>
<center>
<input type="button" value="Powrót" onClick="location='<?php echo instancja('/cgi-bin/MC/budzet/budzet.ndm/input',0); ?>'">
<input type="button" value="Powrót o jeden poziom" onClick="location='<?php print trim ('wysw_lkzb1.php?nr_z_adr='.$nr_z_adr.'&pusrid='.$pusrid); ?>'">
<input type="submit" value="Zapisz do pliku" />
</center>
</th>
</tr>
<tr bgcolor='99CCFF'>
<th>
<font size=2>%</font> <!-- tag <nobr> is non-standard :) -->
</th>
<th>
<font size=2>
Okres <br>
obowiązywania<br>
Od
</font>
</th>
<th>
<font size=2>
Okres<br>
obowiązywania<br>
Do
</font>
</th>
<th>
<font size=2>
Założyciel
</font>
</th>
<th>
<font size=2>
Data założenia
</font>
</th>
</tr>
<tr>
<td>
<input type="text" name="procent" value="<?php echo $procent; ?>" size=6 />
</td>
<td>
<input type="text" name="rkod" value="<?php echo $rkod; ?>" size=4 />
<input type="text" name="msod" value="<?php echo $msod; ?>" size=2 />
</td>
<td>
<input type="text" name="rkdo" value="<?php echo $rkdo; ?>" size=4 />
<input type="text" name="msdo" value="<?php echo $msdo; ?>" size=2 />
</td>
<td>
<?php echo $row_ozs[4]; ?>
</td>
<td>
<?php echo $startDate; ?>
</td>
</tr>
</table>
</center>
</form>
</body>
</html>
udało się jakos to ułożyć :)
No właśnie, teraz od nowa stwórz plik zapisz_odpisy.php i uaktualnij dane. Początek pliku nie będzie się różnił niczym innym od tego (chodzi o sprawdzenie połączenia z bazą i logowanie).
leonpro778 napisał(a):
No właśnie, teraz od nowa stwórz plik zapisz_odpisy.php i uaktualnij dane. Początek pliku nie będzie się różnił niczym innym od tego (chodzi o sprawdzenie połączenia z bazą i logowanie).
tak ma wyglądac początek zmien_odpisy.php ?
<?php
require("../macros/infopro.php");
require("../MC/funkcje/pracownia_osoby.php");
date_default_timezone_set('Europe/Paris');
$loginCookie='';
$loginUser='';
$loginPwd5='';
$loginStmp='';
$dostep='';
GET_LOGIN_COOKIE_PROG($loginCookie, $loginUser, $loginPwd5, $loginStmp, '/cgi-bin/mc/budzet/budzet.ndm/input', $dostep);
if (!strcasecmp($dostep, 't') == 0)
{
echo "<h2>Próba włamania do systemu<font color=red></font></h2>";
exit();
}
$host = "127.0.0.1";
$user="XXXXXX";
$pass="YYYYY";
setlocale(LC_COLLATE, 'pl_PL');
$OPTIONS = array( i5_naming => DB2_I5_NAMING_ON );
$conn = db2_connect("*LOCAL", $user, $pass, $OPTIONS);
if (!$conn) {
echo "Connection failed. SQL Err:";
echo db2_conn_error();
echo "<br>";
echo db2_conn_errormsg();
exit();
}
$library = "MACBORLIB";
Dokładnie, teraz musisz wyciągnąć dane z poprzedniego formularza.
dobrze kombinuje?
<?php
$pusrid = $_POST['pusrid'];
$nr_z_adr= $_POST['nr_z_adr'];
print "Numer: $pusrid";
print "Numeradr: $nr_z_adr";
?>
Tak, oprócz tego musisz jeszcze wyciągnąć dane z formularza (z pól input). Chodzi o te pola, które Cię interesują.
<?php
$pusrid = $_POST['pusrid'];
$nr_z_adr= $_POST['nr_z_adr'];
$procent= $_POST['procent'];
$rkod= $_POST['rkod'];
$msod= $_POST['msod'];
$rkdo= $_POST['rkdo'];
$msdo= $_POST['msdo'];
print "Id użytkownika: $pusrid<br>";
print "Numer działu: $nr_z_adr<br>";
print "%: $procent<br>";
print "Rok i miesiąc od kiedy: $rkod/$msod<br>";
print "Rok i miesiąc do kiedy: $rkdo/$msdo<br>";
?>
co Ty o tym myślisz?
No i ok. Teraz te dane musisz sformatować w TEN sposób, aby odpowiadały formatowi danych w bazie danych. Przykładowo:
w bazie dany $procent
składa się z dwóch rzeczy ozsproc
oraz <ozsdproc>. Musisz przerobić zmienną $procent
na właśnie takie dwie składowe.
w taki sposób?
<?php
$procent= "ozsproc,ozsdproc";
$procent1= explode("",$procent);
echo $procent1[0];
echo $procent1[1];
?>
Nie. W zmiennej $procent
masz już odpowiednie dane. Musisz je tylko wyciągnąć:
$procent = explode(",", $procent);
$ozsproc = $procent[0];
$ozsdproc = $procent[1];
tak?
$procent = explode(",", $procent);
$ozsproc = $procent[0];
$ozsdproc = $procent[1];
$rkod = explode(",", $rkod/$msod);
$ozsod = $rkod[0];
$ozsod = $msod[1];
$rkdo = explode(",", $rkdo/$msdo);
$ozsdo = $rkdo[0];
$ozsdo = $msdo[1];
?>```
Nie, źle robisz. Po pierwsze, w bazie musisz zaktualizować następujące pola: ozsproc, ozsdproc, ozsod, ozsdo
. To po pierwsze. O ile dwa pierwsze pola ozsproc i ozsdproc masz już zrobione o tyle dwa pozostałe musisz zrobić w taki sposób aby zachowany był format przechowywania danych. Czyli pole ozsod ma format XXX.XXX
(gdzie X to jakaś tam liczba). Tak naprawdę jest to "zlepienie" dwóch stringów, $rkod
oraz $msod
i rozdzielenie ich .
za trzecim znakiem. Czyli:
$ozsod = $rkod.$msod;
Zwróci Ci to wynik 201610
. Teraz musisz wstawić tutaj .
za trzecim znakiem. Najprościej funkcją substr()
, czyli:
$ozsod = substr($ozsod, 0, 3).".".substr($ozsod, -3);
To zwróci Tobie już format taki jaki chciałeś czyli 201.610
, to samo zrób dla drugiego pola $ozsdo
<?php
$pusrid = $_POST['pusrid'];
$nr_z_adr= $_POST['nr_z_adr'];
$procent= $_POST['procent'];
$rkod= $_POST['rkod'];
$msod= $_POST['msod'];
$rkdo= $_POST['rkdo'];
$msdo= $_POST['msdo'];
$procent = explode(",", $procent);
$ozsproc = $procent[0];
$ozsdproc = $procent[1];
$ozsod = $rkod.$msod;
$ozsod = substr($ozsod, 0, 4).".".substr($ozsod, -3);
$ozsdo = $rkdo.$msdo;
$ozsdo = substr($ozsdo, 0, 4).".".substr($ozsdo, -3);
print "Id użytkownika: $pusrid<br>";
print "Numer działu: $nr_z_adr<br>";
print "%: $procent<br>";
print "Rok i miesiąc od kiedy: $ozsod<br>";
print "Rok i miesiąc do kiedy: $ozsdo<br>";
?>
dobrze pozmieniałem ten kod i dopisałem tamte rzeczy?
Wygląda na to, że dobrze. Teraz "zbuduj" zapytanie SQL do aktualizacji. UPDATE nazwa.bazy SET pole = wartosc, pole2 = wartosc, pole3 = wartosc WHERE id = idrekordu
$aktualizuj= "UPDATE ".$library."/ozs SET ozsproc =".$procent.", ozsdproc=".$procent.", ozsod=".$ozsod.", ozsdo=".$ozsdo." where ozsid=".$nr_z_adr.";
Dobrze?
EDIT: chyba źle bo nie zdefiniowałem jeszcze gdzie ma działać taka zmienna $aktualizuj, prawda?
Źle :) Dla ozsproc wartość jest w $ozsproc
a dla ozsdproc jest $ozsdproc
. Po to "rozbijałeś" tą zmienną. Co do $aktualizuj to musisz teraz wykonać to zapytanie.
$aktualizuj= "UPDATE ".$library."/ozs SET ozsproc =".$ozsproc.", ozsdproc=".$ozsdproc.", ozsod=".$ozsod.", ozsdo=".$ozsdo." where ozsid=".$nr_z_adr."";
teraz? :)
Drzewko96 napisał(a):
$aktualizuj= "UPDATE ".$library."/ozs SET ozsproc =".$ozsproc.", ozsdproc=".$ozsdproc.", ozsod=".$ozsod.", ozsdo=".$ozsdo." where ozsid=".$nr_z_adr."";
teraz? :)
Zapomniałeś o '
$aktualizuj= "UPDATE ".$library."/ozs SET ozsproc ='$ozsproc', ozsdproc='$ozsdproc', ozsod='$ozsod', ozsdo='$ozsdo' where ozsid=$nr_z_adr"
I dalej:
$stmt_ozs = db2_query($conn, $aktualizuj);
if (!$stmt_ozs) {
print"Prepare Failed. Błąd w aktualizacji bazy ozs <br>";
exit();
}
Działa! jesteś wielki, jak mogę Ci się odwdzięczyć? teraz tylko stworze do tego jakąś ładną ramke i bedzie gotowe :) Dziekuję!
Napiszę tylko tak, jeżeli chcesz dalej ten swój skrypt rozwijać i ogólnie uczyć się PHP to masz naprawdę fajną podstawę, Masz konkretne założenia, bazę danych, nic tylko zrobić refactor kodu :)
chcę sie dalej rozwijać i uczyc php i sql, masz moze jakies rady dla mnie? :)
Rady są chyba tylko takie abyś poczytał trochę o podstawach a następnie o bezpieczeństwie SQL bo kod co teraz masz od strony obowiązujących zasad w PHP jest bardzo niechlujne napisany :)
A polecasz jakies książki albo poradniki o które warto się zaczepic?
\
EDIT: Generalnie teraz walcze z tym aby jakos obrobic na stronie, aby zamiast wyswietlania np "12,700 wyswietlalo samo 12,7" i zeby wyswietlala zamiast 201808" to "2018/08" bo jak wczesniej w tym $ozsod=substr($ozsod, 0, 4).'/'.substr($ozsod, -3);
to nie czytalo z baza, ale usunalem .'/'. i zaczelo czytac baze, ale teraz zle wyswietla na stronie, dlatego walcze z obrobka :)
Co do tych zer to zainteresuj się funkcją https://www.php.net/manual/en/function.rtrim.php
Udało mi się uporać z tymi zerami, posiedziałem trochę nad kodem, troche w internecie i udało mi się z tym uporać :) Teraz musze zrobic mozliwosc dodawania nowych rekordow do bazy z przegladarki, postaram sie zrobic sam :)
mam pytanko jeszcze, bo pojawił mi się nastepujący problem, w sytuacji gdy jakiś dział posiada kilka odpisów, zmienna $aktualizuj która zrobiliśmy zmieni wszystkie rekordy, a chcialbym aby odczytywala ze jest to ostatni rekord i zeby tylko jego zmieniala, nie wiem jak to zdefiniowac :/
zamieszczam screen z bazy z działu który ma kilka rekordów
No to tutaj to już trochę klapa będzie bo z tego screena co wysłałeś tak naprawdę NIE MA takiego pola w bazie, które pozwoliłoby na jednoznaczną identyfikację rekordów. Pytałem się wcześniej, czy masz pewność, że oszid jest polem unikalnym, teraz są tego konsekwencje.
W poprzedniej wersji skryptu miałeś to zrobione w ten sposób, że na stronie edytuj_opisy.php wyświetlone były WSZYSTKIE rekordy z określonym ozsid, następnie wszystkie były ściągnięte do PHP, usuwane i zapisywane jeszcze raz. Nawet jak modyfikacja dotyczyła tylko jednego rekordu. Moim zdaniem bzdura i źle zaprojektowana baza. Pozostaje Ci chyba przerobić kod aby działał właśnie w taki sposób.
A w jaki sposób ten kod teraz przerobić? troche sie zrobiłem znowu zielony w tym temacie, jak troche kumałem o co chodzi tak znowu sie zagubiłem :/