Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie rekordów w bazie
Forum PHP.pl > Forum > PHP
Damiian
Witam serdecznie.

Jak mogę sprawdzić czy dany rekord istnieje, w bazie, jesli tak to zeby go poraz kolejny nie dodawac?

Mam kod:

  1. <form action="plik.php" method="post">
  2. imię:<br />
  3. <input type="text" name="imie" /><br />
  4. e-mail:<br />
  5. <input type="text" name="email" /><br />
  6. <input type="submit" value="dodaj" />
  7. </form>


Ogólna baza jaką zrobiłem:
  1. <?php
  2. $con = mysql_connect("xx","xxx","xxx");
  3. mysql_select_db("xxxx", $con);
  4. $sql = "CREATE TABLE test (
  5. id int( 11 ) NOT NULL AUTO_INCREMENT ,
  6. imie varchar( 100 ) NOT NULL default '',
  7. email varchar( 100 ) NOT NULL default '',
  8. PRIMARY KEY ( id )
  9. )";
  10.  
  11. // Execute query
  12. mysql_query($sql,$con);
  13.  
  14. ?>
  15.  


Dodawanie rekordu
  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4. $email = $_POST['email'];
  5.  
  6. if($imie and $email) {
  7.  
  8. $connection = @mysql_connect('xx', 'xx', 'xx')
  9. or die('Brak połączenia z serwerem MySQL');
  10. $db = @mysql_select_db('xx', $connection)
  11. or die('Nie mogę połączyć się z bazą danych');
  12.  
  13. // dodajemy rekord do bazy
  14. $ins = @mysql_query("INSERT INTO test SET imie='$imie', email='$email'");
  15.  
  16. if($ins) echo "Rekord został dodany poprawnie";
  17. else echo "Błąd nie udało się dodać nowego rekordu";
  18.  
  19. mysql_close($connection);
  20. }
  21.  
  22. ?>



I wyglada to tak:

  1. id imie email
  2. 1 Damian xxx@gmail.com



i chciałbym aby mój kod robił:

Po wpisaniu do formularza imienia i emailu i kliknięcia submit:
1. łączył się z bazą (mam)
2. sprawdzał czy w bazie nie ma takiego samego emaila jak podany w email (Nie mam)
3. jeśli jest to wyświetl error(mam:
  1. {
  2. echo 'Podany email już istnieje';
  3. }
  4. else
  5. {
  6. $ins = @mysql_query("INSERT INTO test SET imie='$imie', email='$email'");
  7. }
)
jeśli nie ma, to stwórz (kod up)
tehaha
robisz to zwykłym zapytanie SELECT, jeżeli wynik zwrócony będzie większy niż zero to znaczy, że taki rekord istnieje:
  1. $sql = "SELECT id FROM test WHERE email = $email";
  2. $result = mysql_query($sql);
  3. if(mysql_num_rows($result) > 0)
  4. {
  5. echo "taki rekord już istnieje!";
  6. } else
  7. {
  8. //dodaj rekord
  9. }


tak na marginesie to pomyliłeś składnię dla INSERT z UPDATE - http://dev.mysql.com/doc/refman/5.1/en/insert.html

i wywal te znaki @ przed funkcjami
zend
  1. $result = mysql_query("SELECT * FROM `tabela` WHERE `email` = " . addslashes($_POST['email']));
  2. if( mysql_num_rows($result) != 0)
  3. echo 'Błąd!';
Damiian
Serdecznie dziękuję!

Ps, czyli mam stosować:
  1. $ins = mysql_query("INSERT INTO `test` (`id`, `imie`, `email`) VALUES (null, '$imie', '$email')");

?
tehaha
tak i najlepiej jeszcze dodawać, to przynajmniej wywali Ci błąd jak źle skonstruujesz zapytanie (oczywiście to tylko w procesie debugowania):
  1. mysql_query("INSERT INTO `test` (`id`, `imie`, `email`) VALUES (null, '$imie', '$email')") or die(mysql_error());
, poza tym bardziej zalecane jest używanie funkcji mysql_real_escape_string() niż addslashes() do zabezpieczania bazy danych
Damiian
Dziękuje za szybkie odpowiedzi smile.gif

Mam jeszcze jedno pytanie, jak mam wyzerować ID w phMyAdmin?
Bo moja tabela miała 32 rekordy. usunelem wszystkie , ale gdy dodaje kolejne to dolicza do starego id i jest 33 a nie 1.
marcio
Cytat(Damiian @ 2.06.2010, 01:34:19 ) *
Dziękuje za szybkie odpowiedzi smile.gif

Mam jeszcze jedno pytanie, jak mam wyzerować ID w phMyAdmin?
Bo moja tabela miała 32 rekordy. usunelem wszystkie , ale gdy dodaje kolejne to dolicza do starego id i jest 33 a nie 1.

  1. ALTER TABLE nazwa_tabeli AUTO_INCREMENT = 1
Damiian
Coś nie działa:

zrobiłem to tak, narazie samo sprawdzanie maila:

  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4. $email = $_POST['email'];
  5.  
  6. if($imie and $email) {
  7.  
  8. // łączymy się z bazą danych
  9. $connection = mysql_connect('mysql.cba.pl', 'xxx', 'xxx')
  10. or die('Brak połączenia z serwerem MySQL');
  11. $db = mysql_select_db('xxx', $connection)
  12. or die('Nie mogę połączyć się z bazą danych');
  13.  
  14.  
  15.  
  16.  
  17. $result = mysql_query("SELECT * FROM `test` WHERE `email` = " . mysql_real_escape_string($_POST['email']));
  18.  
  19. if( mysql_num_rows($result) != 0)
  20. {
  21. echo 'Błąd!';
  22. }
  23.  
  24.  
  25. mysql_close($connection);
  26. }
  27.  
  28. ?>


i dostaje pusty ekran...

// Edit 11:47

Zrobiłem to tak i działa:

  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4. $mail = $_POST['email'];
  5.  
  6. if($imie and $mail) {
  7.  
  8. $connection = mysql_connect('xx', 'Xxx', 'xxx')
  9. or die('Brak połączenia z serwerem MySQL');
  10. $db = mysql_select_db('xXxXxXx', $connection)
  11. or die('Nie mogę połączyć się z bazą danych');
  12.  
  13.  
  14. $email = mysql_real_escape_string($mail);
  15. $result = mysql_query("SELECT email FROM test WHERE email = '$email'");
  16. $num = @mysql_num_rows($result);
  17. if ($num> 0) {
  18. echo 'juz jest';
  19. }
  20. else
  21. {
  22. echo 'brawo! nie ma!';
  23. }
  24.  
  25. mysql_close($connection);
  26. }
  27.  
  28. ?>


Mozna to zrobic jakos prosciej? bo probowalem podkladac '.mysql_real_escape_string($mail).' w miejsce '$email' ale nie działało.
zend
A nie pomyślałeś że pusty ekran jest wynikiem braku błędu? Drugi kod różni się od pierwszego tylko warunkiem else
Damiian
Mam w bazie:
id: 1
Nick: Damian
email :email@a.pl

Wklejam ten kod:

  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4. $email = $_POST['email'];
  5.  
  6. if($imie and $email) {
  7.  
  8. // łączymy się z bazą danych
  9. $connection = mysql_connect('mysql.cba.pl', 'xxx', 'xxx')
  10. or die('Brak połączenia z serwerem MySQL');
  11. $db = mysql_select_db('xxx', $connection)
  12. or die('Nie mogę połączyć się z bazą danych');
  13.  
  14.  
  15.  
  16.  
  17. $result = mysql_query("SELECT * FROM `test` WHERE `email` = " . mysql_real_escape_string($_POST['email']));
  18.  
  19. if( mysql_num_rows($result) != 0)
  20. {
  21. echo 'Błąd!';
  22. }
  23.  
  24.  
  25. mysql_close($connection);
  26. }
  27.  
  28. ?>


I wpisuje w pola:
Damian
email@a.pl

I powinienem dostać 'błąd!', a dostaje czysty ekran...
thek
Jest temat o zadawaniu pytań. tam masz napisane jak debugować skrypt. Poczytaj a na pewno bez pomocy innych dojdziesz gdzie mogą być błędy smile.gif
zend
Wykonaj sobie w phpMyAdminie to zapytania, sprawdż czy tam działa
  1. echo "SELECT * FROM `test` WHERE `email` = " . mysql_real_escape_string($_POST['email']));

Do warunków if, dodaj też warunki else
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.