Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z wpisaniem danych do bazy
Forum PHP.pl > Forum > Przedszkole
piotrekk
Witam,
mam niecodzienny problem z wpisaniem danych do bazy danych. Skrypt jest identyczny jak wcześniej i wszędzie działa, jednak tym razem dochodzi do pewnego momentu i wyskakuje mi błąd. O to część kodu:
  1. <?php
  2. if (!($connection = @mysql_connect($host, $login, $haslo)) || !($db = @mysql_select_db($db, $connection)))
  3.    {
  4.        $_SESSION['error'] = "Problem z polączeniem z baza danych, prosimy powiadomić o tym administratora serwisu.";
  5.        header("Location: ../function/error.php");
  6.        exit;
  7.    }
  8.    
  9. $sql = "select max(id) from $tabela";
  10.            
  11. if(!($result = mysql_query($sql, $connection)))
  12.    {
  13.        $_SESSION['error'] = "Problem z pobieraniem danych z tabeli: ".$tabela.".Prosimy skontaktować się z Administratorem ";
  14.        header("Location: ../function/error.php");
  15.        exit;
  16.    }
  17.    
  18. $nowaNazwa = $result['max(id)'] + 1;
  19.  
  20. /* !! do tego momentu wszystko gra i nagle wywala mi błąd. Nie mogę ani włączyć polskich znaków za pomocą tego, a jak to usunę i zostawię
  21. poniższa $query to i tak i tak tu wszystko siada i nie przechodzi dalej. */
  22.  
  23. if(!(mysql_query("SET names utf8", $connection))); //
  24.    {
  25.        $_SESSION['error'] = "Nie udało się włączyć polskich znaków.";
  26.        header("Location: ../function/error.php");
  27.        exit;
  28.    }
  29.    
  30. $query = "insert into $tabela SET id=$nowaNazwa, cena=$cena, material=$material";
  31.    
  32. if(!(mysql_query($query, $connection)))
  33.    {
  34.        $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
  35.        header("Location: ../function/error.php");
  36.        exit;
  37.    }
  38. ?>


Tworząc baze danych ustawiłem na dostęp na wszystkie możliwości. Nie mam pojecią co się dzieje, czy ktos widzi błąd?

prosze o pomoc exclamation.gif

dzieki
Kildyt
Cytat
if(!(mysql_query("SET names utf8", $connection))); //
{

Skąd wziął Ci się tutaj apostrof i po co Ci pusty komentarz?

PS Czytaj ze zrozumieniem to co ci wywala php, a jak wiesz za mało: error_reporting().
blooregard
$query = "insert into $tabela SET id=$nowaNazwa, cena=$cena, material=$material";

Pomieszałeś INSERT z UPDATE smile.gif

Powinno byc:

Kod
$query = "insert into $tabela (id,cena,material) values ($nowaNazwa,$cena,$material)";


Swoją drogą ciekawe, jak to mogło działać wcześniej...
Kildyt
@blooregard, ja bym się z tym nie zgodził.

Cytat
$query = "insert into $tabela SET id=$nowaNazwa, cena=$cena, material=$material";

Cytat
$query = "insert into $tabela (id,cena,material) values ($nowaNazwa,$cena,$material)";


To są dwie różne sposoby zapisania tego samego działania. Oba kody są poprawne.
blooregard
Faktycznie. Nigdy wcześniej nie używałem tego zapisu i dlatego wydał mi się cokolwiek dziwny smile.gif

Ale sprawdziłem z ciekawości, działa takie coś.

Zwracam honor, błąd nie był w tym miejscu. 
piotrekk
wygląda tak jakbym nie mógł wykonać polecenia insert itd. Wszystko działa i select pobiera wartość, natomist jak już chce cos wstawic to wywala błąd. Wydaje mi się ze moze cos na serwerze jest zle ustawione? choc jak tworzylem baze danych to dodałem wszystkie mozliwosci wraz z insert i update.

nie wiem jak skorzystać z funkcji error_reporting. Jak tobie echo error_reporting(); daje mi informacje : 6143. Nic mi to jednak nie mowi. Jakieś sugestie ?
Kildyt
Usunąłeś apostrof? Podaj co wywala Ci php. Jaki błąd? Nie jesteśmy jasnowidzami.

Następnym razem polecam www.php.net . Tam się dowiesz jak działa funkcja error_reporting.
piotrekk
Nie wiem do końca co masz na myśli z tymi apostrofami.

Kod wygląda teraz tak:

  1. <?php
  2. $cena = '100';
  3. $material = 'glazura';
  4. $tabela = 'kolczyki';
  5.  
  6. /*--------- łączenie z bazą aby pobrać najwiekszy id do nazy i zapisu */
  7.  
  8. if (!($connection = @mysql_connect($host, $login, $haslo)) || !($db = @mysql_select_db($db, $connection)))
  9.    {
  10.        $_SESSION['error'] = "Problem z polączeniem z baza danych, prosimy powiadomić o tym administratora serwisu.";
  11.        header("Location: ../function/error.php");
  12.        exit;
  13.    }
  14.    
  15. $sql = "select max(id) from $tabela";
  16.            
  17. if(!($result = mysql_query($sql, $connection)))
  18.    {
  19.        $_SESSION['error'] = "Problem z pobieraniem danych z tabeli: ".$tabela.".Prosimy skontaktować się z Administratorem ";
  20.        header("Location: ../function/error.php");
  21.        exit;
  22.    }
  23.    
  24. $nowaNazwa = $result['max(id)'] + 1; // pobranie id i zwiększenie o jeden
  25.  
  26. $sql = "SET names utf8";
  27. if(!(mysql_query($sql, $connection)));
  28.    {
  29.        $_SESSION['error'] = "Nie udało się włączyć polskich znaków.";
  30.        header("Location: ../function/error.php");
  31.        exit;
  32.    }
  33.    
  34. $query = "insert into $tabela SET id=$nowaNazwa, cena=$cena, material=$material";
  35.    
  36. if(!(mysql_query($query, $connection)))
  37.    {
  38.        $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
  39.        header("Location: ../function/error.php");
  40.        exit;
  41.    }
  42. ?>


Nadal nie działa. Dochodzi do miejsca z SET names i pada. Jak usunę całą tą linijke to to samo dzieje się na zapytaniu $query.

jezeli chodzi o error_reporting to probowałem takie opcje, nie wiem do końca czy dobrze.

error_reporting(E_ALL);
error_reporting(1);
echo error_reporting(E_ALL);
error_reporting(1);
error_reporting();

Nie zwracają nic. poza numerem 6143.

I co o tym myślicie?
Kildyt
if(!(mysql_query($sql, $connection)));

Kurcze, ale zawaliłem. Co mi z apostrofami się walnęło? :/
Chodziło mi o średnik. Sory wielkie.
piotrekk
Tu jest błąd, ale dlaczego questionmark.gifquestionmark.gifquestionmark.gif? może wiesz jak to powinno wyglądać?

  1. <?php
  2. $cena = strip_tags($_POST['cena']);
  3. $material = strip_tags($_POST['material']);
  4. $tabela = $_SESSION['tabela'];
  5. $nowaNazwa = $result['max(id)'] + 1;
  6.  
  7. $query = "insert into $tabela SET id = '$nowaNazwa', cena = '$cena', material = '$material'";
  8.    
  9. if(!(mysql_query($query, $connection)))
  10.    {
  11.        $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
  12.        header("Location: ../function/error.php");
  13.        exit;
  14.    }
  15. ?>


to oczywiśćie wycinek, ale tu jest bład jeżeli wyglada tak:

  1. <?php
  2. $query = "insert into nazwa SET id = '1', cena = '2', material = '3";
  3.    
  4. if(!(mysql_query($query, $connection)))
  5.    {
  6.        $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
  7.        header("Location: ../function/error.php");
  8.        exit;
  9.    }
  10. ?>


to wszystko działa.

jak myslicie ?
Kildyt
Kod
if(!(mysql_query($query, $connection)))
   {
       $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
       header("Location: ../function/error.php");
       exit;
   }


Wstawiasz nawias przed wykrzyknikiem. Po co?

Kod
if(!mysql_query($query, $connection))

jest chyba poprawne.

Usunąłeś średnik z
Kod
if(!(mysql_query($sql, $connection)));
   {
       $_SESSION['error'] = "Nie udało się włączyć polskich znaków.";
       header("Location: ../function/error.php");
       exit;
   }
?

PS Dla mnie kod jest niezrozumiały. Może ja inaczej piszę? Ja nigdy nie wstawiam w warunkach nawiasów bez podania funkcji, czy dodaje średniki.
Czy ja o czymś nie wiem? sad.gif
piotrekk
usunąłem średnik. Jeżeli chodzi o wykrzyknik przed nawiasem to w sumie pisze w taki sposób, ponieważ w książce , z której się uczyłem tak było.

Nie wiem czemu, ale błąd jest w zapytaniu $query

  1. $query = "INSERT INTO $tabela SET id = '$nowaNazwa', cena = '$cena', material = '$material'";


Jeżeli wszystko zapisane jest w takiej formie to działa:

  1. $query = "INSERT INTO nazwa SET id = '1', cena = '2', material = '3'";


Nie znam przyczyn niestety.
Lion_87
Cytat
$query = "INSERT INTO $tabela SET id = '$nowaNazwa', cena = '$cena', material = '$material'";


a dlaczego nie mozesz tak?
  1. <?php
  2. $query = "INSERT INTO $tabela VALUES('$nowaNazwa', '$cena', '$material')";
  3. ?>
piotrekk
tak nadal nie działało, też próbowałem. Problemem okazło się że nie przepuszczalem przez mysql_fetch_array. Rozwiązanie:

  1. <?php
  2. if (!($connection = @mysql_connect($host, $login, $haslo)) || !($db = @mysql_select_db($db, $connection)))
  3.    {
  4.        $_SESSION['error'] = "Problem z polączeniem z baza danych, prosimy powiadomić o tym administratora serwisu.";
  5.        header("Location: ../function/error.php");
  6.        exit;
  7.    }
  8.    
  9. $sql = "select max(id) from $tabela";
  10.            
  11. if(!($result = mysql_query($sql, $connection)))
  12.    {
  13.        $_SESSION['error'] = "Problem z pobieraniem danych z tabeli: ".$tabela.".Prosimy skontaktować się z Administratorem.";
  14.        header("Location: ../function/error.php");
  15.        exit;
  16.    }
  17.  
  18. $row = mysql_fetch_array($result);
  19.  
  20. $nowaNazwa = $row["max(id)"] + 1;
  21.  
  22. if(!(mysql_query("SET names utf8", $connection)))
  23.    {
  24.        $_SESSION['error'] = "Nie udało się włączyć polskich znaków.";
  25.        header("Location: ../function/error.php");
  26.        exit;
  27.    }
  28.  
  29.  
  30. $query = "INSERT INTO $tabela SET id='$nowaNazwa', cena='$cena', material='$material'";
  31.    
  32. if(!(mysql_query($query, $connection)))
  33.    {
  34.        $_SESSION['error'] = "Nie udało się zapisać danych w bazie danych, powiadom o tym administratora strony. Dziekuję.";
  35.        header("Location: ../function/error.php");
  36.        exit;
  37.    }
  38. ?>
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.