artko
18.07.2005, 13:43:11
witam
potrzebuje prosty skrypt, który odczyta, doda, zmodyfikuje i usunie dane z tabeli, ważną rzeczą jest dla mnie aby jedno z pól rekordu zawierało datę i godzinę ostatniej modyfikacji, jeśli ktoś miałby podobny programik to byłbym wdzięczny
pozdrawiam i z góry dziękuję
SongoQ
18.07.2005, 13:47:11
Nie szukaj gotowcow, postaraj sam sobie go napisac.
artko
18.07.2005, 14:14:03
próbowałem zrobić to na przykładzie kodu z jednaj ze znanych pozycji literatury : )
<html>
<head>
<title>Ceny warzyw</title>
</head>
<body>
<?
die (\"nie można połączyć się z MySql\"); die (\"nie można połączyć się z bazą warzywa\");
if ($co == 'dodaj') { //dodawanie rekordu
if ($nazwa && $cena && $data) {
$query = \"INSERT INTO ceny (nr, nazwa, cena, data) VALUES ('', '$nazwa', '$cena', '$data')\";
}
} elseif ($co == 'skasuj') { //kasowanie
(\"DELETE FROM ceny WHERE nr = '$id';\");
}
die (\"błąd w pytaniu\");
print \"<TABLE CELLPADDING=5 BORDER=1\"; print \"<TR><TD><B>Nazwa</B></TD><TD><B>Cena</B></TD>\"; print \"<TD><B>Data</B></TD><TD></TD></TR>n\";
$id = $rekord[0];
$nazwa = $rekord[1];
$cena = $rekord[2];
$data = $rekord[3];
print \"<TR><TD>$nazwa</TD><TD>$cena</TD><TD>$data</TD><TD>\"; print \"<A HREF=\"ceny.php?co=skasuj&id=$id\">skasuj</A></TD></TR>n\"; }
print '<FORM METHOD=\"POST\">Nowy rekord:'; print '<INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"dodaj\"<TABLE>'; print '<TR><TD>Nazwa:</TD<TD><INPUT TYPE=\"text\" '; print 'NAME=\"nazwa\"</TD></TR><TR><TD>Cena:</TD><TD><INPUT '; print 'TYPE=\"text\" NAME=\"cena\"></TD></TR><TR><TD>Data:</TD>'; print '<TD><INPUT TYPE=\"text\" NAME=\"data\"></TD></TR>'; print '</TABLE><INPUT TYPE=\"submit\" VALUE=\"dodaj\"></FORM>'; ?>
</BODY>
</HTML>
ale jest jakiś problem z przekazywaniem danych, nie mogę nic dodać ani usunąć
tu jest ten przykład
SongoQ
18.07.2005, 14:18:12
Zamiast $co daj $_GET['co']
nospor
18.07.2005, 14:19:24
Zapewne masz wyłączone register_globals
Na początku skryptu przed pierwszym użyciem $co, daj:
<?php
$co = $_GET['co'];
?>
artko
18.07.2005, 14:33:03
zgadza się, register_globals była wyłączona, już jest on, jednak nbie było żadnej reakcji po modyfikacji poza zniknięciem jednego notica, może diabeł tkwi gdzie indziej?
nospor
18.07.2005, 14:41:05
Podmien se ten kawalek i powiedz co wyswietla
<?php
if ($co == 'dodaj') { //dodawanie rekordu
if ($imie && $nazwisko && $telefon) {
$query = \"INSERT INTO ceny (nr, nazwa, cena, data) VALUES ('', '$nazwa', '$cena', '$data')\";
}
} elseif ($co == 'skasuj') { //kasowanie
(\"DELETE FROM ceny WHERE nr = '$id'\") or die(mysql_error());
}
?>
artko
18.07.2005, 14:52:55
nospor
18.07.2005, 14:58:17
ale te register_globals ustawiles?
<?php
if ($co == 'dodaj') { //dodawanie rekordu
if ($imie && $nazwisko && $telefon) {
$query = \"INSERT INTO ceny (nr, nazwa, cena, data) VALUES ('', '$nazwa', '$cena', '$data')\";
}
} elseif ($co == 'skasuj') { //kasowanie
(\"DELETE FROM ceny WHERE nr = '$id'\") or die(mysql_error());
}
?>
Jak dalej sie nic nie wyswietli to znaczy ze ni ustawiles
artko
18.07.2005, 15:10:24
sory, mea coulpa, nie włączyłem, już jest dobrze, tylko przy starcie te nieszczęsne noticy się pojawiają, w każdym razie wielkie dzięki
nospor
18.07.2005, 15:11:52
Daj tak to nie będą się pojawiaŁy
<?php
if (isset($co) && $co == 'dodaj') { //dodawanie rekordu if ($imie && $nazwisko && $telefon) {
$query = \"INSERT INTO ceny (nr, nazwa, cena, data) VALUES ('', '$nazwa', '$cena', '$data')\";
}
} elseif (isset($co) && $co == 'skasuj') { //kasowanie
(\"DELETE FROM ceny WHERE nr = '$id'\") or die(mysql_error());
}
?>
artko
19.07.2005, 14:23:20
bardzo ładnie, a dlaczego tak się dzieje?
SongoQ
19.07.2005, 14:25:00
Bo wtedy sprawdzasz czy sa zmienne ustawione, jesli tak to odwolujesz sie do niech.
nospor
19.07.2005, 14:27:02
gdyż przy starcie skryptu zmienna $co nie jest zainicjalizowana a ty siędo niej próbujesz odwołać. warunek isset($co) sprawdza czy jest zainicjalizowana.
zmienna $co pojawi się dopiero po wysłaniu formularza, czyli gdy w tablicy superglobalnej $_POST pojawi się index co.
Bardziej bezpieczne by było jabyś się odwoływał tak :$_POST['co'] anie $co, ale to już Twoja sprawa
artko
19.07.2005, 15:19:23
dziwi mnie tylko to że program działa tak czy siak i jest ok. Robię stronę na php-fusion ( www.ms.prv.pl ) i też są miejsca, w których pojawiają się noticy wszelakie, zaznaczam że wszystko chodzi ok. Może w php.ini jest coś co odpowiada za to, coś co można wyłączyć lub włączyć i zapomnieć. Czy trzeba we wszystkich tych miejscach wstawiać takie warunki. Troche to ryzykowne w moim przypadku przerabiać taki portal gdyż znam tylko podstawy php.
SongoQ
19.07.2005, 15:23:21
No to wylacz sobie jesli nie chesz przerabiac ale z 2 strony jak cos piszesz od podstaw to warto miec wlaczone.
artko
25.07.2005, 09:25:40
witam
wzbogaciłem skrypt o poprawianie rekordu
<html>
<head>
<title>Ceny warzyw</title>
</head>
<body>
<?
$today = date(\"j-n-Y\"); $godzina = date(\"H:i:s\");
die (\"nie można połączyć się z MySql\"); die (\"nie można połączyć się z bazą warzywa\");
if (isset($co) && $co == 'dodaj') { //dodawanie rekordu if ($nazwa && $cena && $today && $godzina) {
$query = \"INSERT INTO ceny (nr, nazwa, cena, data) VALUES ('', '$nazwa', '$cena', '$today, $godzina')\";
}
} elseif (isset($co) && $co == 'popraw') { //poprawianie if ($nazwa && $cena && $today && $godzina) {
$query = \"UPDATE ceny SET nazwa='$nazwa', cena='$cena', data='$today, $godzina';\";
}
} elseif (isset($co) && $co == 'edytuj') { //przygotowanie poprawek
$query = \"SELECT * FROM ceny where nr='$id' ORDER BY nazwa;\";
$rekord = mysql_feth_array ($wynik);
$id = $rekord[0]; $nazwa = $rekord[1]; $cena = $rekord[2]; $data = $rekord[3];
print '<FORM METHOD=\"POST\">Poprawa rekordu:'; print '<INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"popraw\">'; print '<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"'.$id.'\"><TABLE>'; print '<TR><TD>Nazwa:</TD><TD>INPUT TYPE=\"text\" '; print 'NAME=\"nazwa\" VALUE=\"'.$nazwa.'\"></TD></TR><TR><TD>Cena:'; print '</TD><TD><INPUT TYPE=\"text\" NAME=\"cena\"'; print '\"></TD></TR><TR><TD>Data: </TD><TD><INPUT TYPE=\"text\"'; print 'NAME=\"data\" VALUE=\"'.$data.'\"></TD></TR>'; print '</TABLE><INPUT TYPE=\"submit\" VALUE=\"Popraw\"></FORM>'; }
elseif (isset($co) && $co == 'skasuj') { //kasowanie
(\"DELETE FROM ceny WHERE nr = '$id'\") or die(mysql_error());
}
$wynik = mysql_query (\"SELECT * FROM ceny ORDER BY nazwa;\") or die (\"błąd w pytaniu\");
print \"<TABLE CELLPADDING=5 BORDER=1\"; print \"<TR><TD><B>Nazwa</B></TD><TD><B>Cena</B></TD>\"; print \"<TD><B>Data</B></TD><TD></TD></TR>n\";
$id = $rekord[0];
$nazwa = $rekord[1];
$cena = $rekord[2];
$data = $rekord[3];
print \"<TR><TD>$nazwa</TD><TD>$cena</TD><TD>$data</TD><TD>\"; print \"<A HREF=\"ceny.php?co=skasuj&id=$id\">skasuj</A></TD><td>\"; print \"<A HREF=\"ceny.php?co=popraw&id=$id\">popraw</A></TD></TR>n\"; }
print '<FORM METHOD=\"POST\">Nowy rekord:'; print '<INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"dodaj\"<TABLE>'; print '<TR><TD>Nazwa:</TD<TD><INPUT TYPE=\"text\" '; print 'NAME=\"nazwa\"</TD></TR><TR><TD>Cena:</TD><TD><INPUT '; print 'TYPE=\"text\" NAME=\"cena\"></TD></TR>'; print '</TABLE><INPUT TYPE=\"submit\" VALUE=\"dodaj\"></FORM><br>';
?>
</BODY>
</HTML>
no i znów problem ze zmiennymi, dlaczego przy dodawaniu rekordu jest ok a przy poprawianiu tych zmiennych nie może rozpoznać?
ps, tak wiem, nie jest to w żaden sposób zabezpieczone i można program rozwalić
pozdrawiam
nospor
25.07.2005, 09:31:09
przy popraw sprawdzasz, czy jest $nazwa, $cena a w linku tego nie ma. przecież do popraw wchodzisz pprzez link.
pozatym w zapytaniu popraw poprawiasz wszystko jak leci, bez warunku
artko
25.07.2005, 10:25:16
więc trzeba to zupełnie inaczej zrobić? może wystarczy jakaś lekka modyfikacja?
nospor
25.07.2005, 10:30:56
jak checesz tylko lekką modyfikację to dodaj nazwę i cenę do linku.
artko
27.07.2005, 14:56:34
witam ponownie

wystarczyło że znów chciałem coś dodać i znów jest problem. Otóż skrypt tylko udaje że poprawia dane, "popraw" jest dobrze wywoływane ale dane się nie zmieniają, hmmm..
<?
$data = date(\"j-n-Y, H:i:s\");
die (\"Nie można połączyć się z MySQL\"); die (\"Nie można połączyć się z bazą warzyw\");
if (isset($co) && $co == 'dodaj') { // dodawanie rekordu if ($nazwa && $cena && $uwagi && $data) {
$query = \"INSERT INTO ceny_warzyw (id, nazwa, cena, \";
$query .= \"uwagi, data) VALUES ('', '$nazwa', '$cena', '$uwagi', '$data');\";
}
} elseif (isset($co) && $co == 'popraw') { // poprawianie rekordu if ($nazwa && $cena && $uwagi && $data) {
$query = \"UPDATE ceny SET nazwa='$nazwa', cena=\";
$query .= \"'$cena', uwagi='$uwagi', data='$data' WHERE id='$id';\";
}
} elseif (isset($co) && $co == 'edytuj') { // przygotowanie do poprawek $query = \"SELECT * FROM ceny_warzyw where id='$id';\";
$id = $rekord[0]; $nazwa = $rekord[1]; $cena = $rekord[2]; $uwagi = $rekord[3]; $data = $rekord[4];
print '<FORM METHOD=\"POST\">Podaj aktualne dane:'; print '<INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"popraw\">'; print '<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"'.$id.'\"><TABLE>'; print '<TR><TD>Nazwa:</TD><TD><INPUT TYPE=\"text\" '; print 'NAME=\"nazwa\" VALUE=\"'.$nazwa.'\"></TD></TR><TR><TD>Cena:'; print '</TD><TD><INPUT TYPE=\"text\" NAME=\"cena\"'; print '\"></TD></TR><TR><td>Uwagi:</TD<TD><INPUT TYPE=\"text\" '; print 'NAME=\"uwagi\" VALUE=\"'.$uwagi.'\"></TD></TR>'; print '</TABLE><INPUT TYPE=\"submit\" VALUE=\"popraw\"></FORM>';
} elseif (isset($co) && $co == 'skasuj') { // kasowanie (\"DELETE FROM ceny_warzyw WHERE id = '$id';\");
}
$wynik = mysql_query (\"SELECT * FROM ceny_warzyw ORDER BY nazwa;\");
print \"<TABLE CELLPADDING=5 BORDER=1>\"; print \"<TR BGCOLOR=#FF9966><TD><B><center>Nazwa</center></B></TD><TD><B><center>Cena</center></B></TD>\"; print \"<TD><B><center>Uwagi</center></B></TD><TD><B><center>Data</center></B></TD></TR>n\";
$id = $rekord[0];
$nazwa = $rekord[1];
$cena = $rekord[2];
$uwagi = $rekord[3];
$data = $rekord[4];
print \"<TR><TD>$nazwa</TD><TD><b>$cena</b></TD><TD>$uwagi</TD><TD>$data</TD><TD>\"; print \"<A HREF=\"**.php?co=skasuj&id=$id\">skasuj</A></TD><TD>\"; print \"<A HREF=\"**.php?co=edytuj&id=$id\"><b>edytuj</b></A></TD></TR>n\"; }
print '<FORM METHOD=\"POST\"><br>Dodaj nowa pozycję do listy:'; print '<INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"dodaj\"><TABLE>'; print '<TR><TD>Nazwa:</TD><TD><INPUT TYPE=\"text\" '; print 'NAME=\"nazwa\"></TD></TR><TR><TD>Cena:</TD><TD><INPUT '; print 'TYPE=\"text\" NAME=\"cena\"></TD></TR>'; print '<TR><TD>Uwagi:</TD><TD><INPUT '; print 'TYPE=\"text\" NAME=\"uwagi\"></TD></TR>'; print '</TABLE><INPUT TYPE=\"submit\" VALUE=\"Dodaj\"></FORM>'; ?>
nospor
27.07.2005, 15:02:24
daj tak:
<?php
//....
$query = \"UPDATE ceny SET nazwa='$nazwa', cena=\";
$query .= \"'$cena', uwagi='$uwagi', data='$data' WHERE id='$id';\";
echo \"<br />\".$query; //...
?>
Jak nie wywali ci bledu to srpawdz czy w zapytaniu co echo dalem jest dobre id. Daj tez to zapytanie do bazy ręcznie (phpmyadmin lub cokolwiek innego) i zobacz czy sie dodaje
artko
27.07.2005, 15:06:06
jak człowiek ślepy to nie dziwne. sory ale dopiero w Twoim poście zauważyłem że tabelka nazywa się ceny_warzyw a nie ceny, wszystko gra, dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.