![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 0 Dołączył: 16.05.2003 Skąd: POLAND Ostrzeżenie: (0%) ![]() ![]() |
Kod mysql_query("INSERT INTO adresy (imie, nazwisko, numer_gg)
VALUES ('$_POST["imie"]', '$_POST["nazwisko"]', '$_POST["gg"]') "); przeciez to nie moze byc takie chore, na jakie wyglada :/ jak to napisac poprawnie? |
|
|
![]()
Post
#2
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Można tak:
Kod VALUES ('{$_POST["imie"]}' ,
lub tak: Kod VALUES ('$_POST[imie]',
lub tak: Kod $imie = $_POST['imie']; //warto dodawć tu sprawdzania danych, choćby addslashes ## .... ## VALUES ('$imie', ... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 0 Dołączył: 4.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat przeciez to nie moze byc takie chore, na jakie wyglada :/ jak to napisac poprawnie?
Co to znaczy, ze wyglada na chore ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 0 Dołączył: 16.05.2003 Skąd: POLAND Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co to znaczy, ze wyglada na chore ?
To znaczy, ze ilosc nawiasow, cudzyslowow i apostrofow mnie zabila (poczatkujacy). Ale dzieki pomocy DeyV dalem rade (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dla przejrzystości można np. tak:
[php:1:3d72a4d8f0]<?php $query = sprintf("INSERT INTO adresy (imie, nazwisko, numer_gg) VALUES ('%s', '%s', '%s')", $_POST['imie'], $_POST['nazwisko'], $_POST['gg']); mysql_query($query) or die('Odpowiedni komunikat.'); ?>[/php:1:3d72a4d8f0] |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 0 Dołączył: 16.05.2003 Skąd: POLAND Ostrzeżenie: (0%) ![]() ![]() |
Bardzo mi pomogliscie. Ale pojawil sie kolejny niuans. Googlowalem troche za nim i jedyne na co sie natknalem to tekst:
[php:1:3e67579db9] <? header("Pragma: no-cache"); ?> [/php:1:3e67579db9] I ze niby to powinno pomoc. A chodzi o to, ze majac strone zbudowana tak: [php:1:3e67579db9] <? header("Pragma: no-cache"); ?> <? mysql_connect("127.0.0.1", "root", "super_tajne"); mysql_select_db("baza"); $wynik = mysql_query("SELECT * FROM adresy"); while($row = mysql_fetch_row($wynik)) { echo "lp: " . $row[3] . "<br>"; echo "imie: " . $row[0] . "<br>"; echo "nazwisko: " . $row[1] . "<br>"; echo "<b>numer gg: </b>" . $row[2] . "<br>"; echo "<br>"; } $f_imie = $_POST["imie"]; $f_nazwisko = $_POST["nazwisko"]; $f_gg = $_POST["gg"]; if(($f_imie=="")&&($f_nazwisko=="")) echo "nic na razie nie dopisuje"; else mysql_query("INSERT INTO adresy (imie, nazwisko, numer_gg) VALUES ('$f_imie', '$f_nazwisko', '$f_gg') "); ?> <hr> dodaj nowego <? global $PHP_SELF; echo "<form method="POST" action=$PHP_SELF>"; echo " <p>imie: <input type="text" name="imie" size="20"></p>"; echo " <p>nazwisko: <input type="text" name="nazwisko" size="20"></p>"; echo " <p>numer gg: <input type="text" name="gg" size="20"></p>"; echo " <p><input type="submit" value="wyslij" name="B1"><input type="reset" value="kasuj" name="B2"></p>"; echo "</form>"; echo "<br><br>"; echo "obecnie w pamieci:" . "<br>"; echo $_POST["imie"] . "<br>"; echo $_POST["nazwisko"] . "<br>"; echo $_POST["gg"] . "<br>"; ?> [/php:1:3e67579db9] dodaje wpis do bazy i jak odswiezam strone, wpis dodaje sie ponownie. Dodalem troche niepotrzebnych na dole instrukcji, aby sobie sprawdzic, czy to co podepne pod zmienna podczas wysylania formularza, rezyduje dalej gdzies tam (nazwalem to w "pamieci" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Nie przejmujcie sie tez jakoscia tego kodu, ja naprawde dopiero co sie ucze oblozony ksiazkami, etc. No i jak wspominalem na poczatku listu, szukalem po sieci jak sie powinno niby takie cos zalatwic. Facet napisal tylko: hint header. No to w manualu jedyne co mi pasowalo pod to, wygladalo tak, jak widzicie w kodzie. Gdzie popelniam blad? I ostatnia sprawa to funkcja auto_increment w bazie w polu ID - dzieki niej za kazdym nowym wpisem tworzy sie nowa liczba narastajaca. Problem jest taki, ze stworze sobie 10 wpisow, skasuje 8 i dodam kolejny jeden, to nie bede mial wpisow 1, 2, 3 tylko 1, 2, 11 - jak to zmienic? Ok, to tyle. Pozdrawiam! Prosze o umieszczanie kodu nie w znacznikach [code], a w [php] |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 0 Dołączył: 4.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat dodaje wpis do bazy i jak odswiezam strone, wpis dodaje sie ponownie.
ja bym zastosowal jakis wlasny mechanizm blokujacy mozliwosc zdublowania wpisu, np sesja + cookie, albo jakis dodatkowy wpis w bazie A co do Pragma: no-cache to nie sadze ze mogloby pomoc, ale glowy nie dam i moge sie mylic Cytat I ostatnia sprawa to funkcja auto_increment w bazie w polu ID - dzieki niej za kazdym nowym wpisem tworzy sie nowa liczba narastajaca. Problem jest taki, ze stworze sobie 10 wpisow, skasuje 8 i dodam kolejny jeden, to nie bede mial wpisow 1, 2, 3 tylko 1, 2, 11 - jak to zmienic?
W manualu pisz cos takiego Cytat AUTO_INCREMENT sequences begin with 1. See section 8.1.3.130 mysql_insert_id(). If you delete the row containing the maximum value for an AUTO_INCREMENT column, the value will be reused with an ISAM, or BDB table but not with a MyISAM or InnoDB table. If you delete all rows in the table with DELETE FROM table_name (without a WHERE) in AUTOCOMMIT mode, the sequence starts over for all table types.
Co znaczy mniej wiecej ze jesli skasujesz rekord przedostatni a pozniej dodasz nowy to wartosc jego id bedzie miala wartosc ostatni+1 Chyba ze skasujesz wszystkie rekordy to licznik zacznie isc znowu od 1 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 0 Dołączył: 16.05.2003 Skąd: POLAND Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co znaczy mniej wiecej ze jesli skasujesz rekord przedostatni a pozniej dodasz nowy to wartosc jego id bedzie miala wartosc ostatni+1
No to z tego co mowisz wynika, ze tylko gdy zamieszam w srodkowych rekordach, to inkrementacja i tak doda 1 do najwiekszej liczby w spisie. A u mnie problem jest tez taki: mam wpisy [1] Kasia [2] Tomek [3] Leopold [4] Witek i nagle sie okazalo, ze [4] Witek i [3] Leopold tu nie pasuje, wiec go wycinam. Mamy wiec: [1] Kasia [2] Tomek Teraz chce dodac Michala i mam [1] Kasia [2] Tomek [5 Michal Zawsze wiecej o jeden - mimo, ze ostatnie wpisy polecialy i juz ich nie ma. Czy to tak ma byc? :? Dzieki i pozdrawiam! |
|
|
![]()
Post
#9
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Dokładnie tak mam być w tabeli typu MyISAM. I jest to jak najbardziej pozytywne. Dlaczego? Ponieważ masz pewność, że nie wykorzystasz tego samego id wielokrotnie. A jest to przydatne, gdy tworzysz zwiazki pomiędzy różnymi tabelami. Gdy usuniesz jeden rekord, powinieneś usunąc również wszystkie rekordy z tabel z nim bezpośrednio powązanych. Jeśli tego nie zrobisz, lub pojawią sie jakies błedy, bardzo łatwo o przekłamania.
Jeśli jednak bardzo zależyci na tym, by uniknać nadmiaru "pustych" wierszy, dodajesz nowy rekord, podając jako id MAX(id)+1 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 0 Dołączył: 4.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
A tak BTW to dlaczego tak zaleci ci na tych indeksach ?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 0 Dołączył: 16.05.2003 Skąd: POLAND Ostrzeżenie: (0%) ![]() ![]() |
Wiesz, generalnie jeszcze nie wiem czy mi zalezy czy nie. Szukam jakiegos sposobu na oznaczenie kazdego z pol unikalnym numerem. Pozniej zas przeczytalem o auto inkrementacji i stwierdzielem, ze to bylby dobry pomysl. Chcialbym umiescic przy kazdym adresie 2 klawisze: modyfikuj i skasuj - stad moje pomysly. Zdaje sobie sprawe, ze dla Was przerabianie takich problemow to juz nuda i jakby nie patrzec rutyna,
dlatego tez dziekuje za zainteresowanie tematem i nieoceniona pomoc. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 0 Dołączył: 4.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Wiesz, generalnie jeszcze nie wiem czy mi zalezy czy nie. Szukam jakiegos sposobu na oznaczenie kazdego z pol unikalnym numerem. Pozniej zas przeczytalem o auto inkrementacji i stwierdzielem, ze to bylby dobry pomysl.
auto_increment daje wlasnie to czego szukasz - unikalnosc Co by bylo gdybys skasowal rekord powiedzmy 8, pozniej dodal cos na to miejsce. Ktos na przyklad mogly odwolywac sie przez skrypt.php?id=8 to co by dostal (to co by chcial czy to co by bylo po usunieciu i dodaniu nowego rekordu)? Podobnie byloby z obsluga relacji. Takie cos prowadziloby do anomali w bazie i byloby niebezpieczne. Zycze powodzenia |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Prosta, ale dosc skuteczna metoda zabezpieczenia sie przed kilkakrotnym dodaniem przez odswiezanie strony jest cos takiego (kolejne punkty to kolejne uruchomienia skryptu):
1. skrypt wypisuje formularz do wpisania danych, uzytkownik go wysyla. 2. skrypt odbiera dane, wsadza je do bazy po czym robi header ("Location: $PHP_SELF"); lub podobnie i konczy dzialanie 3. skrypt wypisuje komunikat w stylu "dziekujemy za podanie danych", kolejny formularza etc. drugie wywolanie skryptu bedzie niewidoczne dla uzytkownika, nie odlozy mu sie tez w historii przegladarki i uzytkownik nie bedzie w stanie z zaden sposob zrobic jego odswiezenia, wiec dane do bazy wpiszesz tylko raz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 07:28 |