Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] insert
Forum PHP.pl > Forum > Przedszkole
wabanek
Witam
może ktoś rzucic na to okiem, nie mogę nic już wymyślec

  1. <?php
  2. // odbieramy dane z formularza
  3. $imie = $_POST['imie'];
  4. $nazwisko = $_POST['nazwisko'];
  5. $wynik = $_POST['wynik'];
  6.  
  7. if($imie and $nazwisko and $wynik) {
  8. $con = mysql_connect("localhost","root","");
  9. if (!$con)
  10. {
  11. die('Could not connect: ' . mysql_error());
  12. }
  13.  
  14. $ins = @mysql_query("INSERT INTO wynik_konkursu SET imie='$imie', nazwisko='$nazwisko', wynik= '$wynik'");
  15.  
  16. if($ins) echo "Rekord został dodany poprawnie";
  17. else echo "Błąd nie udało się dodać nowego rekordu";
  18.  
  19. }
  20. ?>


wywala błędy
Notice: Undefined index: imie in C:\xampp\htdocs\insert.php on line 3

Notice: Undefined index: nazwisko in C:\xampp\htdocs\insert.php on line 4

Notice: Undefined index: wynik in C:\xampp\htdocs\insert.php on line 5
r4xz
ale coś nie działa...?

btw. notice != error
szym011
Nie istnieją twoje zmienne globalne. Zrób tak:
  1. $imie = isset($_POST['imie']);
  2. $nazwisko = isset($_POST['nazwisko']);
  3. $wynik = isset($_POST['wynik']);
wabanek
Cytat(szym011 @ 27.11.2011, 22:02:27 ) *
Nie istnieją twoje zmienne globalne. Zrób tak:
  1. $imie = isset($_POST['imie']);
  2. $nazwisko = isset($_POST['nazwisko']);
  3. $wynik = isset($_POST['wynik']);

Nie działa, nic nie pokazuje, nie ma błędu ale też nie dodaje wyniku do bazy
Niktoś
Nie znam się na tyle na php ,ale czy ten warunek ,można nazwać warunkiem??
if($imie and $nazwisko and $wynik)

Poza tym popatrz najpierw jak wygląda instrukcja sql -insert,raczej nie ma w niej set ,za to set jest w update.
Dominis
INSERT wyglada tak:
  1. INSERT INTO table_name (column1, column2, column3,...)
  2. VALUES (value1, value2, value3,...)


Notice, Ci daje znaki że zmienne:
  1. $imie = $_POST['imie'];
  2. $nazwisko = $_POST['nazwisko'];
  3. $wynik = $_POST['wynik'];


$_POST nie istnieja(nie sa wczesniej zadeklarowane).

Następnie z tego co widze, twoj skrypt łączy sie z mysql, ale nie wybiera żadnej bazy.

Popraw to wszystko i powinno działac.
szym011
No tak. Nie spojrzałem na zapytanie.
Poprawnie powinno być tak:
  1. $ins = @mysql_query("INSERT INTO `wynik_konkursu` (`imie`, `nazwisko`, `wynik`) VALUES ('$imie', '$nazwisko', '$wynik')");

Radzę przy pisaniu takich rzeczy nie używać znaku małpy przed funkcją, oraz użyć or die(mysql_error()) co pozwoli trafnie sprecyzować błąd w zapytaniu.

A wysyłasz coś do tego skryptu za pomocą metody POST?
Nie pokazuje (a wcześniej pokazywało błędy), ponieważ nie zostały nadesłane formularzem takie dane.
Sephirus
Ok i dodatkowo

  1. $imie = $_POST['imie'];
  2. $nazwisko = $_POST['nazwisko'];
  3. $wynik = $_POST['wynik'];
  4.  
  5. (...)
  6.  
  7. $ins = @mysql_query("INSERT INTO wynik_konkursu SET imie='$imie', nazwisko='$nazwisko', wynik= '$wynik'");
  8.  


Upewnij się, że zmienne wrzucane do zapytania są bezpieczne...
wabanek
Dalej nie działa sciana.gif

  1. <?php
  2. $imie = isset($_POST['imie']);
  3. $nazwisko = isset($_POST['nazwisko']);
  4. $wynik = isset($_POST['wynik']);
  5. if($imie and $nazwisko and $wynik) {
  6. $adres_ip_serwera_mysql_z_baza_danych = 'localhost';
  7. $nazwa_bazy_danych = 'zawody';
  8. $login_bazy_danych = 'root';
  9. $haslo_bazy_danych = '';
  10. if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,$login_bazy_danych,$haslo_bazy_danych) ) {
  11. echo 'Nie moge polaczyc sie z baza danych';
  12. exit (0);
  13. }
  14.  
  15. if ( !mysql_select_db($nazwa_bazy_danych) ) {
  16. echo 'Blad otwarcia bazy danych';
  17. exit (0);
  18. }
  19.  
  20. $ins = @mysql_query("INSERT INTO `wynik_konkursu` (`imie`, `nazwisko`, `wynik`) VALUES ('$imie', '$nazwisko', '$wynik')");
  21.  
  22. if($ins) echo "Rekord zostal dodany poprawnie";
  23. else echo "Blad nie udalo sie dodac nowego rekordu";
  24.  
  25. }
  26. ?>
pyro
  1. $imie = isset($_POST['imie']);
  2. $nazwisko = isset($_POST['nazwisko']);
  3. $wynik = isset($_POST['wynik']);


To zawsze zwróci albo true albo false. Do zmiennej przekazujesz tylko wynik isset(), a nie wartości POST.

Życzę powodzenia, jeżeli wszędzie będziesz korzystał z tak długich nazw zmiennych tongue.gif
Prym
Cytat(wabanek @ 28.11.2011, 19:09:18 ) *
Dalej nie działa sciana.gif

  1. <?php
  2. $imie = isset($_POST['imie']);
  3. $nazwisko = isset($_POST['nazwisko']);
  4. $wynik = isset($_POST['wynik']);
  5. if($imie and $nazwisko and $wynik) {
  6. $adres_ip_serwera_mysql_z_baza_danych = 'localhost';
  7. $nazwa_bazy_danych = 'zawody';
  8. $login_bazy_danych = 'root';
  9. $haslo_bazy_danych = '';
  10. if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,$login_bazy_danych,$haslo_bazy_danych) ) {
  11. echo 'Nie moge polaczyc sie z baza danych';
  12. exit (0);
  13. }
  14.  
  15. if ( !mysql_select_db($nazwa_bazy_danych) ) {
  16. echo 'Blad otwarcia bazy danych';
  17. exit (0);
  18. }
  19.  
  20. $ins = @mysql_query("INSERT INTO `wynik_konkursu` (`imie`, `nazwisko`, `wynik`) VALUES ('$imie', '$nazwisko', '$wynik')");
  21.  
  22. if($ins) echo "Rekord zostal dodany poprawnie";
  23. else echo "Blad nie udalo sie dodac nowego rekordu";
  24.  
  25. }
  26. ?>


Ale co ci zwraca za błąd? nie dodaje do bazy? (np. pustych rekordów) czy co bo tak to wygląda raczej poprawnie zmieniłbym warunek na
Kod
if(  isset($imie) && isset($nazwisko) && isset($wynik))

wabanek
Cytat(Prym @ 28.11.2011, 19:55:23 ) *
Ale co ci zwraca za błąd? nie dodaje do bazy? (np. pustych rekordów) czy co bo tak to wygląda raczej poprawnie zmieniłbym warunek na
Kod
if(  isset($imie) && isset($nazwisko) && isset($wynik))


dodaje rekord, ale w wyświetla tylko wartośc 1 albo nic a w wyniku 0! o co tu chodzi?questionmark.gif
Prym
Cytat(wabanek @ 28.11.2011, 20:36:29 ) *
dodaje rekord, ale w wyświetla tylko wartośc 1 albo nic a w wyniku 0! o co tu chodzi?questionmark.gif


Boże no tak przepraszam że napisałem że kod wygląda ok - nie wygląda. jak przekazujesz dane z POST do zmiennych to przez ten ISSET dodajesz nie wartości ale czy dane istnieja (isset sprawdza czy isntnieje post więc zwraca wynik warunku a nie wartość czyli MUSISZ zrobić w takim wypadku coś takiego:
  1. $imie = (isset($_POST['imie'])) ? $_POST['imie'] : false;
  2. $nazwisko = (isset($_POST['nazwisko'])) ? $_POST['nazwisko'] : false;
  3. $wynik = (isset($_POST['wynik'])) ? $_POST['wynik'] : false;


i musi działać smile.gif
Niktoś
A po co takie kombinacje ,nie lepiej sprawdzić czy formularz został wysłany i potem robić zwykłe $_POST['imie'];
  1. <?php
  2. if ($_POST){
  3. $imie = $_POST['imie'];
  4. $nazwisko = $_POST['nazwisko'];
  5. $wynik = i$_POST['wynik'];
  6. if($imie and $nazwisko and $wynik) {
  7. $adres_ip_serwera_mysql_z_baza_danych = 'localhost';
  8. $nazwa_bazy_danych = 'zawody';
  9. $login_bazy_danych = 'root';
  10. $haslo_bazy_danych = '';
  11. if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,$login_bazy_danych,$haslo_bazy_danych) ) {
  12. echo 'Nie moge polaczyc sie z baza danych';
  13. exit (0);
  14. }
  15.  
  16. if ( !mysql_select_db($nazwa_bazy_danych) ) {
  17. echo 'Blad otwarcia bazy danych';
  18. exit (0);
  19. }
  20.  
  21. $ins = @mysql_query("INSERT INTO `wynik_konkursu` (`imie`, `nazwisko`, `wynik`) VALUES ('$imie', '$nazwisko', '$wynik')");
  22.  
  23. if($ins) echo "Rekord zostal dodany poprawnie";
  24. else echo "Blad nie udalo sie dodac nowego rekordu";
  25.  
  26. }
  27. }
  28. ?>

niż sprawdzać istnienie każdej zmiennej?
wabanek
Cytat(Prym @ 28.11.2011, 21:51:02 ) *
Boże no tak przepraszam że napisałem że kod wygląda ok - nie wygląda. jak przekazujesz dane z POST do zmiennych to przez ten ISSET dodajesz nie wartości ale czy dane istnieja (isset sprawdza czy isntnieje post więc zwraca wynik warunku a nie wartość czyli MUSISZ zrobić w takim wypadku coś takiego:
  1. $imie = (isset($_POST['imie'])) ? $_POST['imie'] : false;
  2. $nazwisko = (isset($_POST['nazwisko'])) ? $_POST['nazwisko'] : false;
  3. $wynik = (isset($_POST['wynik'])) ? $_POST['wynik'] : false;


i musi działać smile.gif


imie nazwisko działa smile.gif, wynik wpisuje wartośc "0" sad.gif, jest blisko
Prym
Cytat(wabanek @ 28.11.2011, 22:37:41 ) *
imie nazwisko działa smile.gif, wynik wpisuje wartośc "0" sad.gif, jest blisko


hm to wygląda że post nie przekazuje danych (czyli może w formularzu nie do końca masz nazwę wartosc? (może jakiś program dał ci ść w nazwę zmiennej - mój pająk czasem mi takie psikusy robi smile.gif)
A ogólnie to ja mam zawsze dodaną taką funkcję do kodu:

  1. function testArray($co) {echo '<pre>';print_r($co);echo '</pre>';}


i sobie testuje co jest przekazywane w tablicach (równiez posty i gety) łącznie z nazwą indexu:

  1. testArray($_POST);


powyższy kod wyświetli ci co jest przekazywane. i Ponownie Jak nie masz danych w wartosc to znaczy błąd w budowie formularza (błędne name="")
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.