Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z insertowaniem rekordów ;D
Forum PHP.pl > Forum > PHP
porywacz
Witam, jestem bardzo początkującym programistą php więc proszę nie wyśmiewać : ) Napisałem (prosty i prymitywny) skrypt rejestracji, którego zadaniem jest jedynie wprowadzenie nowych rekordów do tabeli w bazie danych na podstawie pól formularza na stronie :_))
Mój problem polega na tym, że wszystko działa, lecz do tabeli nie dodają się żadne nowe rekordy : (
Tutaj jest kod: (pola w mysl_connect oraz mysql_select_db uzupełniłem poprawnie, żeby nie było ^^)
  1. <center><h4>Zarejestruj się :)</h4>
  2. <form method="post" action="">
  3. Login: <input type="text" name="login"><br/>
  4. Hasło: <input type="password" name="haslo"><br/>
  5. email: <input type="text" name="email"><br/>
  6. <input type="submit" value="Zarejestruj">
  7. </form>
  8. <?php
  9. $db = mysql_connect('localhost','root','') or die('Serwer padł');
  10. $db = mysql_select_db('users') or die('Baza padła');
  11.  
  12. $_POST['login'] = $login;
  13. $_POST['haslo'] = $haslo;
  14. $_POST['email'] = $email;
  15.  
  16. if(!isset($login,$haslo,$email)) {
  17. } elseif(
  18. preg_match('@^[a-z0-9]{6,12}$@',$login) &&
  19. preg_match('@^[a-z0-9]{6,12}$@',$haslo) &&
  20. preg_match('!^[a-z0-9]{3,20}@[a-z0-9]{2,9}.pl$!',$email))
  21. {
  22. mysql_query("INSERT INTO users (login, haslo, email) VALUES('$login','$haslo','$email')") or die('Nie udało się umieścić values w tabeli');
  23. } else {
  24. echo('Przepraszamy, rejestracja się nie udała.<br/>Sprawdź czy wszystkie pola wypełniłeś poprawnie.');
  25. }
  26. ?>


Dodam też, że na WebServ u mnie na komputerze wszystko działa poprawnie. To znaczy skrypt wprowadza rekordy bez zarzutów tongue.gif

Z góry dziękuję za pomoc i pozdrawiam ^^
cudny
  1. $login = $_POST['login'];
  2. $haslo = $_POST['haslo'];
  3. $email = $_POST['email'];
porywacz
Dziękuję, działa smile.gif

EDIT:
A mógłby mi ktoś jeszcze wyjaśnić czemu to ma tak $login = $_POST['login'] wyglądać a nie tak $_POST['login'] = $login? Wolę się uczyć na każdym kroku niż popełniać te same błędy ^^
Jak już mówiłem jestem początkujący Lkingsmiley.png
ferrero2
stary, masz formularz i jego metodę wysyłania w tym wypadku POST
<form method="post" action="">
Jeżeli coś wyślesz za pomocą tej metody a konkretnie twoje pole o nazwie login.
To trafia ta wartość do tablicy hiperglobalnej POST.
Czyli aby uzyskać tą wartość po przeładowaniu strony musisz użyć $_POST['login'];
Do bazy danych dodajesz wartość pola $login, więc przypisujesz do nowej zmiennej, która nawet nie istniała przed przeładowaniem strony, zmienną z tablicy hiperglobalnej, dlatego :
$login = $_POST['login'];

Chyba dobrze wyjaśniłem :/
porywacz
Aha, czyli jeżeli definiuje nową zmienną na podstawie ( na przykład) zmiennej z tablicy post to ta zmienna powinna być po lewej stronie tak? : D
Dobrze zrozumiałem? haha.gif
ferrero2
Tak naprawdę to przypisanie:
$login = $_POST['login']
nie jest konieczne.
Wszystkie operacje poniższe gdzie działasz na zmiennej $login, możesz równie dobrze działać na zmiennej $_POST['login'].
To jest w Twoim przypadku tylko dla wygody.
Każde pole formularza, które wysyłasz masz w tablicy POST, więc teraz co Ty z tym zrobisz to już Twoja sprawa.

ps
po lewej stronie smile.gif
Można to sobie tak tłumaczyć, to do czego przypisujemy jest po lewej, a wartość którą chcemy przypisać jest po prawej smile.gif
porywacz
Już wszystko rozumiem. Dziękuję wam wszystkim za pomoc smile.gif
Masz rację tak jest dużo wygodniej, dlatego używam tego jeżeli wielokrotnie muszę wykonać operacje na tego typu zmiennych haha.gif
Niktoś
Cytat
Wszystkie operacje poniższe gdzie działasz na zmiennej $login, możesz równie dobrze działać na zmiennej $_POST['login'].
To jest w Twoim przypadku tylko dla wygody.

Raz przypisujesz zmiennej dane z tablicy post i według potrzeb wielokrotnie używasz tej zmiennej i tylko raz w tym przypadku wyszukiwane jest te określane dane z pośród setek/tysięcy innych danych które także w tej tablicy mogą być ,co jest optymalnym rozwiązaniem.Nie przypisując zmiennej danych z tablicy ,tylko bezpośrednio odwołując się do niej poprzez np. $_POST['login'] generujesz kolejne wyszukiwanie dla tych samych danych z tejże tablicy co może nawet spowolnić działanie skryptu.Więc to nie tylko dla wygody.
cudny
Niktoś - nie obraź się ale większego steku bzdur nie czytałem nigdy, usuń najlepiej to co napisałeś.
Tablica to zmienna zbiorcza, grupująca pojedyncze elementy mające właściwości zmiennych, do których odwoływać możemy się za pomocą indeksów.

Ogólnie nie wyszukuje się w tablicy niczego tylko odwołuje do indeksu - do zmiennych też się odwołujemy !

Bags_Bunny
Cytat(cudny @ 16.03.2012, 20:37:51 ) *
Tablica to zmienna zbiorcza, grupująca pojedyncze elementy mające właściwości zmiennych

Owszem.

Cytat(cudny @ 16.03.2012, 20:37:51 ) *
których odwoływać możemy się za pomocą indeksów.

Brawo. Świetna wiedza teoretyczna. Pokaż mi teraz indeksy w tamtej "tablicy". Tam są klucze.

Cytat(cudny @ 16.03.2012, 20:37:51 ) *
Ogólnie nie wyszukuje się w tablicy niczego tylko odwołuje do indeksu - do zmiennych też się odwołujemy !

Dobrze. Tak to działa np. w C++. Ale:

W PHP tablica nie jest tablicą.

Cytat(http://php.net/manual/en/language.types.array.php)
An array in PHP is actually an ordered map.


Różnica czasowa nie jest krytyczna, ale w PHP odwołanie się do tablicy (nawet jednoelementowej) jest wolniejsze, niż odwołanie się do nietablicowej zmiennej ze względu na algorytm.

PS. Piękna popisówka. Zjechałeś człowieka, który przekazał poprawne informacje, uznałeś je za niepoprawne, a większość Twojej wypowiedzi była bez sensu.
viking
Masz dziwną maskę dla email. A co z domenami np ala-makota.plJeśli już robisz takie przypisanie zapisz od razu:
  1. $login = mysql_real_escape_string($_POST['login']);
  2. $haslo = mysql_real_escape_string($_POST['haslo']);
  3. $email = mysql_real_escape_string($_POST['email']);


Albo zainteresuj się PDO. Dla Twojego kodu będzie to (przy okazji zwróć uwagę na hasło i doczytaj o temacie):

  1. try {
  2. $dbh = new PDO($dsn, $user, $pass);
  3. $dbh->exec("SET NAMES 'UTF8';");
  4. $sql = "INSERT INTO users (login, haslo, email) VALUES(:login, :haslo, :email)";
  5. $sth = $dbh->prepare($sql);
  6. $sth->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
  7. $sth->bindParam(':haslo', crypt($_POST['haslo']), PDO::PARAM_STR);
  8. $sth->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
  9. $sth->execute();
  10. } catch(PDOException $e) {
  11. echo 'Klasa PDO zwróciła wyjątek: '.$e->getMessage();
  12. }
cudny
Cytat(Bags_Bunny @ 16.03.2012, 23:01:32 ) *
Owszem.


Brawo. Świetna wiedza teoretyczna. Pokaż mi teraz indeksy w tamtej "tablicy". Tam są klucze.


Dobrze. Tak to działa np. w C++. Ale:

W PHP tablica nie jest tablicą.



Różnica czasowa nie jest krytyczna, ale w PHP odwołanie się do tablicy (nawet jednoelementowej) jest wolniejsze, niż odwołanie się do nietablicowej zmiennej ze względu na algorytm.

PS. Piękna popisówka. Zjechałeś człowieka, który przekazał poprawne informacje, uznałeś je za niepoprawne, a większość Twojej wypowiedzi była bez sensu.



Wolne żarty biggrin.gif
Czemu nie wkleiłeś całości przypisu z mauala ? Dalsza część:
A map is a type that associates values to keys

Jeśli uważasz, że tablice są nie wydajne to daj przykład.
Nawiasem mówiąc przypisując jakąkolwiek wartość do zmiennej korzystasz z algorytmu interpretacji rodzaju zmiennej, bo PHP samo rozpoznaje czy to string, czy int czy float itp. i to już jest mniej wydajne niż samo korzystanie z tablic. Poza tym tworząc sobie zmienna lokujemy nowe miejsce w pamięci - w rezultacie mamy i tablicę i zeminna, a korzystamy tylko ze zmiennej, brawo biggrin.gif

Jeśli chcesz na ten temat dyskutować, poproszę o głębszą analizę, która ma poparcie !
Niktoś
Cytat
Nawiasem mówiąc przypisując jakąkolwiek wartość do zmiennej korzystasz z algorytmu interpretacji rodzaju zmiennej, bo PHP samo rozpoznaje czy to string, czy int czy float itp. i to już jest mniej wydajne niż samo korzystanie z tablic.


Odwołując się bezpośrednio do tablicy już tego nie robi?No to brawo.
cudny
należy czytać ze zrozumieniem. przy przypisywaniu wartości do zmiennej lub tablicy. brawo
Niktoś
Mylisz klucze z indexami ,piszesz że:
Cytat
przypisując jakąkolwiek wartość do zmiennej korzystasz z algorytmu interpretacji rodzaju zmiennej, bo PHP samo rozpoznaje czy to string, czy int czy float itp

jest nie wydajne i sądząc po tej wypowiedzi to PHP w $_POST["variables"],która też jest zmienną już tego nie interpretuje.
Potem mi wpierasz że nie czytam ze zrozumieniem i manipulujesz wypowiedzią dodając spójnik "lub".Może ogarnij się i przestań się pogrążać.

A propo $_POST["variables"] to "variables" jest kluczem a nie indeksem w tablicy $_POST ,a jak kluczy jest więcej to php je musi sobie wyszukać.I każde wywołanie $_POST["variables"] ,będzie powodowało ponowne wyszukiwanie z tejże tablicy i przypasowywało do klucza wartość.
cudny
że co?
ogólnie przypisanie wartości nie ma znaczenia czy to wartość przypisywana do zmiennej czy do tablicy a jeśli uważasz z jakiegoś powodu ze ODWOŁANIE się do tablicy jest mniej wydajne niż odwołanie się do zmiennej to poprzyj to czymś. bo ja takich informacji bie posiadam,.
Niktoś
Twierdze iż odwołanie się do zmiennych z jakiejkolwiek tablicy czy to asocjacyjnej czy indexowanej jest mniej wydajne niż odwołanie się tylko do środowiskowej zmiennej.
Cytat
a jeśli uważasz z jakiegoś powodu ze ODWOŁANIE się do tablicy jest mniej wydajne niż odwołanie się do zmiennej to poprzyj to czymś.


Ja uważam tak ty inaczej, a jeśli szukasz jakiś dowodów to sobie zrób testy jednostkowe.
cudny
w takim wypadku sam nie wiesz o czym piszesz. czytałem specjalnie kilka twoich postow. moja rada: jak nie wiesz o czym piszesz to nie pisz bo ludzi, którzy się uczą Óczysz glupot
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.