Odświeżanie

Forum przeznaczone dla MySql - bazy danych.

Odświeżanie

Postprzez tajger » wtorek, 14 sierpnia 2012, 23:56

Hej!
Kupiłem dzisiaj u ciebie kursik MySQL i nauczyłeś już mnie sporo w tych 3 lekcjach. Dzięki wielki. :) Żeby nie offtopować przejdę do problemu:
Stworzylem sobie bazę danych kursmysql i tabelę angielski. Chcialem stworzyć sobie taki mini słowniczek do angielskiego gdzie wpisujesz dane słowo w formularz, jego znaczenie i wymowę a potem wysylasz te dane do bazy, żeby je zapisac w tabeli angielski.
Kod: Zaznacz cały
CREATE TABLE angielski
(
id INT UNSIGNED AUTO_INCREMENT,
word TINYTEXT NOT NULL,
meaning TINYTEXT NOT NULL,
pronunciation TINYTEXT NOT NULL,
PRIMARY KEY(id)
)


A tutaj kod:
Kod: Zaznacz cały
<!DOCTYPE html>
<head>     
        <meta charset="utf-8" >
         <title>Test</title>
         <style>
td {text-align:center;}
         </style>
</head>
<body>
   
<?php
$mysqlConnection = @mysql_connect("localhost", "root", "vertrigo") or  die(mysql_error());
mysql_select_db("kursmysql") or die(mysql_error());
mysql_set_charset("utf8");
?>

<form action='index.php' method='post'>
    <table>
        <tr>
            <td>Słówko</td>
            <td>Znaczenie</td>
            <td>Wymowa</td>
            <td></td></tr>
        <tr>
            <td><input type="text" name="slowko" /></td>
            <td><input type="text" name="znaczenie" /></td>
            <td><input type="text" name="wymowa" /></td>
            <td><input type="submit" value="Dodaj słówko" /></td>
        </tr>
    </table>   
</form>
   
<?php
if (isset($_POST['slowko']) && isset($_POST['znaczenie']) && isset($_POST['wymowa']))
    if (!empty($_POST['slowko']) && !empty($_POST['znaczenie']) && !empty($_POST['wymowa']))
    {
        $slowko = filter_var($_POST['slowko'], FILTER_SANITIZE_SPECIAL_CHARS);
        $znaczenie = filter_var($_POST['znaczenie'], FILTER_SANITIZE_SPECIAL_CHARS);
        $wymowa = filter_var($_POST['wymowa'], FILTER_SANITIZE_SPECIAL_CHARS);
       
        $queryAdd =
        ("   
        INSERT INTO angielski (word, meaning, pronunciation)
        VALUES
        ('$slowko', '$znaczenie', '$wymowa')
        ");


        mysql_query($queryAdd) or die(mysql_error());
        echo "Słówko <b>$slowko</b> zostało dodane!";
       
    }
    else
    {
        echo "Nie uzupełniłeś wszystkich pól.";
    }   

mysql_close($mysqlConnection);

?>
   
</body>
</html>


Wszystko jest super, działa jak należy, dodaje mi do bazy itd. Kiedy dodam słówko, na dole będzie wypisany komunikat, że "Słówko <słówko> zostało dodane!", ale jak zacznę spamować F5 to w bazie zaczną się pojawiać te same słówka. Jak to cholerstwo ominąć? W PHP miałem problem taki sam z tymi plikami co ostatnio pisałem i nie rozwiązałem tego problemu. Cały czas te same dane zostają przesyłane. Nie wiem jak to ominąć.
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
 
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland

Re: Odświeżanie

Postprzez Morfidon » środa, 15 sierpnia 2012, 11:08

Hej :)

Jeśli nie chcesz aby słowo zostało powtórzone to albo ustaw daną kolumnę tak aby przyjmowała tylko unikalne nazwy. Ustaw indeks unikalny.

Albo sprawdź czy występuje takie słowo przy pomocy SELECTa, jeśli nie to dodaj, jeśli tak to pomiń zapytanie INSERT ;)

Pozdrawiam
Morfidon
Administrator
Administrator
 
Posty: 1324
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Odświeżanie

Postprzez tajger » środa, 15 sierpnia 2012, 14:00

Dzięki za podpowiedź. Zrobiłem od nowa tabelę z tym tylko nie wiem, czy będzie ona prawidłowa. Otóż:
Kod: Zaznacz cały
id - wrzucilem tutaj INTa, UNSIGNED, A_I .. i nie dawałem indeksowania
word - tutaj varchar(40), ideksowanie:UNIQUE
meaning - tutaj varchar(40)
pronuciation - tutaj varchar(40)


1. po stworzeniu przez PHPMyAdmin wydaje mi się, że ID i tak dostał PRIMARY KEYA bo w opcjach WIĘCEJ nie można go zaznaczyć, i teraz pytanie czy wogóle opłaca się robić pole ID jak będziemy po słowie wyszukiwać, które nie będzie się powtarzać i tak ?
2. nie zaszedłem jeszcze dalej nić 3 lekcja, a pewnie to tam będzie, ale próbowałem wypisać wszystkie dane z tabeli w PHP:
Kod: Zaznacz cały
$queryWrite =
("
SELECT * FROM angielski
");
mysql_query($queryWrite) or die(mysql_error());

Nie wiem czy to dobrze robię.

Z tym sprawdzaniame takiej samej nazwy słówek do bardzo dobry sposób. Dzięki jeszcze raz wielkie. ;)
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
 
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland

Re: Odświeżanie

Postprzez tajger » czwartek, 16 sierpnia 2012, 14:24

Kurde chyba nie można mieć 2 zapytań mysql_query, bo mi z DELETE też dzisiaj nie działało.. jak wrócę to sprawdzę pojedynczo bo ja cał czas w kodzie mam jeszcze INSERT TO, a inne przykłady sobie dodaje niżej, dlatego może nie działało
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
 
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland

Re: Odświeżanie

Postprzez Morfidon » czwartek, 16 sierpnia 2012, 18:08

Można mieć tyle mysql_query ile zechcesz. Najpierw pobierz dane. Sprawdź warunkiem w php czy istniał rekord, a następnie na tej podstawie dodaj lub też nie nowe słowo.
Morfidon
Administrator
Administrator
 
Posty: 1324
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Odświeżanie

Postprzez tajger » piątek, 17 sierpnia 2012, 12:15

W 6 lekcji aktualizacja rekordów w minucie: 3:30 stosujesz operator AND, musi być chyba OR, chyba się pomyliłeś .. nie może być chyba coś takiego:
UPDATE klienci SET wiek=wiek+1 where id = 130 AND id = 131
..moglibyśmy tam dopisać zamiast id AND login='lukas'
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
 
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland

Re: Odświeżanie

Postprzez Morfidon » sobota, 18 sierpnia 2012, 23:18

tak id w tym samym momencie nie może być równe 130 i 131, popełniłem błąd, ale nie wykonałem tego zapytania od razu zmazałem...
Morfidon
Administrator
Administrator
 
Posty: 1324
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Odświeżanie

Postprzez tajger » czwartek, 13 września 2012, 17:12

Czy można używać np. LIMIT = 1 w zapytaniu SELECT, DELETE ? Czy tyczy sie to tylko np. INSERTA?
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
 
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland

Re: Odświeżanie

Postprzez Morfidon » czwartek, 13 września 2012, 17:56

Można używać również w select i delete:
http://php.about.com/od/mysqlcommands/g/Limit_sql.htm
Morfidon
Administrator
Administrator
 
Posty: 1324
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48


Powrót do MySql

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

cron