Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] dodawanie do bazy
Forum PHP.pl > Forum > Przedszkole
molesta
Witam mam problem....:/  mianowicie posiadam tabele o strukturze:
  1. CREATE TABLE `testy` (
  2. `fraza` varchar(25) NOT NULL,
  3. `ile` varchar(25) NOT NULL
  4. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;


oraz skrypt php:
  1. <?php 
  2. $polaczenie = @mysql_connect('localhost', 'user', 'haslo')
  3. or die('Brak połączenia z serwerem mysql. Błąd: '.mysql_error());
  4.  
  5. $db = @mysql_select_db('szukaj', $polaczenie)
  6. or die('Nie mogę połączyć się z bazą danych. Błąd: '.mysql_error());
  7.  
  8. $fraza = $_POST['fraza'];
  9. $ins = @mysql_query("INSERT INTO testy SET fraza='$fraza'");
  10. ?>


chodzi mi o to że dodawanie rekordu do bazy działa, to znaczy dodawanie wartości z formularza do pola "fraza"
problem w tym że jest jeszcze pole o nazwie 'ile" które ma za zadanie zliczać ile razy dana fraza została wysłana z formularza.....nie bardzo wiem jak to zrobić
w tej chwili działa to tak:
W formularza dajmy na to daje fraze "testowanie" i dodaje do bazy, niestety ponowne dodane tej samej frazy powoduje utworzenie kolejnego rekordu o nazwie "testowanie'
chciałbym aby podczas wysyłania skrypt sprawdzał czy fraza już nie istnieje w bazie i jesli jest to zwiekszal o 1 wartość pola "ile"
a jesli nie istnieje to dodawał nowy rekord.

Bardzo bym prosiło pomoc , troche mnie to przerasta.....sprawa jest pewnie banalna..

Będe wdzieczny
Pozdrawiam
Xniver
1. Zamień typ pola 'ile' na INT
2. Tu masz kod:
  1. <?php
  2. // ...
  3. $fraza = mysql_real_escape_string($_POST['fraza']);
  4.  
  5. $query = mysql_query('SELECT ile FROM testy WHERE fraza = "' . $fraza . '"');
  6.  
  7. if(mysql_num_rows($query))
  8. {
  9. $query = mysql_fetch_assoc($query);
  10.  
  11. mysql_query('UPDATE testy SET ile = ' . ($query['ile'] + 1) . '
  12.  WHERE fraza = "' . $fraza . '"');
  13. }
  14. else
  15. {
  16. mysql_query('INSERT INTO testy VALUES("' . $fraza . '", 1)');
  17. }
  18. ?>
molesta
działa!
Xniver dziekuje za pomoc

Mam jeszcze jedno pytanko, jak wyświetlić określoną liczke rekordów z bazy z pola "fraza" o najwielszej wartości "ile"?
Najlepiej z komentarzami aby mógł zrozumiec ten kod
Xniver
  1. <?php
  2. // Liczba rekordów do pobrania
  3. $limit = 10;
  4.  
  5. // Zapytanie pobierające x rekordów, sortowane malejąco według pola 'ile'
  6. $query = mysql_query('SELECT * FROM testy LIMIT 0, ' . $limit . ' ORDER BY ile DESC');
  7.  
  8. // Pętla while
  9. while($row = mysql_fetch_assoc($query))
  10. {
  11. // Wyświetla dane
  12. echo $row['fraza'] . ' - ' . $row['ile'] . '<br />';
  13. }
  14. ?>
molesta
to w takim razie tak to powinno wyglądać?
  1. <?php
  2. $polaczenie = @mysql_connect('localhost', 'xxx', 'xxx')
  3. or die('Brak polaczenia z serwerem mysql. Blad: '.mysql_error());
  4.  
  5. $db = @mysql_select_db('xxx', $polaczenie)
  6. or die('Nie moge polaczyc sie z baza danych. Blad: '.mysql_error());
  7.  
  8.  
  9. $fraza = mysql_real_escape_string($_POST['fraza']);
  10.  
  11. $query = mysql_query('SELECT ile FROM testy WHERE fraza = \"' . $fraza . '\"');
  12.  
  13. if(mysql_num_rows($query))
  14. {
  15.     $query = mysql_fetch_assoc($query);
  16.         mysql_query('UPDATE testy SET ile = ' . ($query['ile'] + 1) . '
  17.                  WHERE fraza = \"' . $fraza . '\"');
  18. }
  19. else
  20. {
  21.     mysql_query('INSERT INTO testy VALUES(\"' . $fraza . '\", 1)');
  22. }
  23. $limit = 10;
  24.  
  25. // Zapytanie pobierające x rekordów, sortowane malejąco według pola 'ile'
  26. $query = mysql_query('SELECT * FROM testy LIMIT 0, ' . $limit . ' ORDER BY ile DESC');
  27.  
  28. // Pętla while
  29. while($row = mysql_fetch_assoc($query))
  30.  
  31. {
  32.     // Wyświetla dane
  33.     echo $row['fraza'] . ' - ' . $row['ile'] . '
  34. ';
  35. }
  36. ?>


Jesli tak to w tej linii
while($row = mysql_fetch_assoc($query))

jest coś nie tak...wywala
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
Misiur66
Hmm... Czy tu gdzieś nie powinno być extract? Ja zawsze używałem.

@down:
Jednak pomaga w sprawdzaniu poprawności czegośtam ;D Jest w manualu
Xniver
Dodaj pomiędzy $query = mysql_query() ,a pętlą kod:
  1. <?php
  2. ?>


@Misiur66
A po co używać extract()? Nie potrzebne
molesta
teraz wywalił coś takiego

Something is wrong in your syntax obok 'ORDER BY ile DESC' w linii 1
kod wyglada tak :
  1. <?php 
  2.  
  3. $polaczenie = @mysql_connect('localhost', 'xxx', 'xxx')
  4. or die('Brak polaczenia z serwerem mysql. Blad: '.mysql_error());
  5.  
  6. $db = @mysql_select_db('xxx', $polaczenie)
  7. or die('Nie moge polaczyc sie z baza danych. Blad: '.mysql_error());
  8.  
  9.  
  10. $fraza = mysql_real_escape_string($_POST['fraza']);
  11.  
  12. $query = mysql_query('SELECT ile FROM testy WHERE fraza = "' . $fraza . '"');
  13.  
  14. if(mysql_num_rows($query))
  15. {
  16. $query = mysql_fetch_assoc($query);
  17. mysql_query('UPDATE testy SET ile = ' . ($query['ile'] + 1) . '
  18.  WHERE fraza = "' . $fraza . '"');
  19. }
  20. else
  21. {
  22. mysql_query('INSERT INTO testy VALUES("' . $fraza . '", 1)');
  23. }
  24. $limit = 10;
  25.  
  26. // Zapytanie pobierające x rekordów, sortowane malejąco według pola 'ile'
  27. $query = mysql_query('SELECT * FROM testy LIMIT 0, ' . $limit . ' ORDER BY ile DESC');
  28. // Pętla while
  29. while($row = mysql_fetch_assoc($query))
  30. {
  31. // Wyświetla dane
  32. echo $row['fraza'] . ' - ' . $row['ile'] . '<br />';
  33. }
  34. ?>
Xniver
Spróbuj tak:

  1. <?php
  2. $query = mysql_query('SELECT * FROM `testy` ORDER BY `ile` LIMIT ' . $limit);
  3. ?>
molesta
Dziekuje wam za pomoc...teraz działa poprawnie........mam jeszcze jedna prośbe......

Co było niepooprawnego że wywałał te błedy?
Chce poprostu to zrozumieć
Xniver
Szczerze to sam nie wiem, na SQLu się słabo znam. Pewnie chodziło o te znaki " ` " albo o kolejność
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.