Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak sobie poradzic z tymi nawiasami? :(
Marusz
post
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?
Go to the top of the page
+Quote Post
DeyV
post
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', ...
Go to the top of the page
+Quote Post
[fisher]
post
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 ?
Go to the top of the page
+Quote Post
Marusz
post
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)
Go to the top of the page
+Quote Post
dragossani
post
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]
Go to the top of the page
+Quote Post
Marusz
post
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]
Go to the top of the page
+Quote Post
[fisher]
post
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
Go to the top of the page
+Quote Post
Marusz
post
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!
Go to the top of the page
+Quote Post
DeyV
post
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
Go to the top of the page
+Quote Post
[fisher]
post
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 ?
Go to the top of the page
+Quote Post
Marusz
post
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.
Go to the top of the page
+Quote Post
[fisher]
post
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
Go to the top of the page
+Quote Post
uboottd
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:28