INSERT nie działa w php, działa w czystym sql - prosta sprawa

0

Dziwna sprawa, bo taki kod jak poniżej, który POST dostaje z formularza i robi zapytanie sql, nie działa zwyczajnie przez $db->query(); a przez samego sqla w db browserze zadziałało. Skopiowałem to samo zapytanie które się wyświetliło w echo i to dałem do db browsera i nic. Używam sqlite. Zamknąłem db browesera, nic nie pomogło, nadal nie działa. Za każdym razem jest error z ifa na dole
@hopaj @jurek1980 @czysteskarpety

if(isset($_POST['submit']))
{
	$id = $_POST['id'];
	$date = $_POST['date']; 
	$time = $_POST['time']; 
	$title = $_POST['title']; 
	$content = $_POST['content'];
	$tags = $_POST['tags']; 

	$sql_insert = "INSERT INTO $sqltable(`ID`,`Date`,`Time`,`Title`,`Content`,`Tags`) VALUES ($id,$date,$time,$title,$content,$tags)";

	//echo $sql_insert;

	if ($db->query($sql_insert) === TRUE) {
    echo "Dodano pomyślnie!";
	} else {
    echo "Error: " . $sql_insert . "!<br>";
	}
	
}
0

Co Ci wyświetliło echo $sql_insert? Bo wg mnie masz problem z tworzeniem zapytania, źle mieszasz string z zmiennymi

0

@Mjuzik Wyświetliło mi zapytanie, to zapytanie jest dobre, bo w db browserze zadziałało. Nie wiem, może chodzi o te ``````````` znaki?

Dodałem ```` nic nie pomogło. Tak wygląda error, jak wezmę zapytanie do sqla to działa.

Error: INSERT INTO SimplestCMS(ID,Date,Time,Title,Content,Tags) VALUES (5,1231,2123,213123,1232131,1223)!

2
CodeRZ napisał(a):

@Mjuzik Wyświetliło mi zapytanie, to zapytanie jest dobre, bo w db browserze zadziałało. Nie wiem, może chodzi o te ``````````` znaki?

Dodałem ```` nic nie pomogło. Tak wygląda error, jak wezmę zapytanie do sqla to działa.

Error: INSERT INTO SimplestCMS(ID,Date,Time,Title,Content,Tags) VALUES (5,1231,2123,213123,1232131,1223)!

Tylko tyle mówi błąd? Żadnego "syntax error" albo "database connection error", nic?

coś mi się zdaje, że średnika w zapytaniu brakuje :) SQLite z tego co pamiętam nie wyróżnia się i wymaga aby zapytania kończyć średnikami ;)

0

A może to po prostu kwestia nazw kolumn, Date przecież jest zarezerwowanym słowem kluczowym języka. Użyj tam *Date*

0

To $db to jakiś powszechnie znany interfejs?
Jeśli tak, to poszukaj jak w nim odczytać komunikat błędów.
Inaczej, zajrzyj tutaj: http://www.sqlitetutorial.net/sqlite-php/insert/
http://php.net/manual/en/pdo.error-handling.php

0

Daj show create table SimplestCMS bo coiś mi się zdaje, że typy się nie zgadzają...

0
  1. Pokaż więcej kodu (tam gdzie deklarujesz $db)
  2. Pobierając dane POSTEM powienieneś się zabezpieczyć przed SQl INJECTION. Gdybym znał adres twojej strony mógłbym bez problemu wywalić Ci całą bazę danych
  3. Nie wiem czy zrobiłeś odpowiednie typy dla kolumn w bazie danych, bo widzę że do każdej wrzucasz liczbę (title, content, tags)
  4. Prawdopodobnie masz metody, za pomoca których możesz przygotowac zapytanie sql. tutaj masz przykład: https://gist.github.com/bladeSk/6294d3266370868601a7d2e50285dbf5
  5. Sprawdziłbym też połączenie z bazą danych robiąc prosty select, jeśli wypluje dane to jest ok.
0

@Mjuzik

  1. Dobra już problem dalej do rozwiązania dzięki @vpiotr ,uzyłem
try {
    $db = new PDO('sqlite:SimplestCMS.db');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

i teraz pięknie pokazuje błąd. "Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 no such table: SimplestCMS in E:\programs\xammp2\htdocs\simplestcms\admin\new.php:50 Stack trace: #0 E:\programs\xammp2\htdocs\simplestcms\admin\new.php(50): PDO->query('INSERT INTO `Si...') #1 {main} thrown in E:\programs\xammp2\htdocs\simplestcms\admin\new.php on line 50"

2.Wiem, ale to jest tylko dla admina, a przecież admin nie będzie sam sobie, niszczył bazy. W przyszłości zrobię, na razie nie chce mieszać zbytnio
3. No, ale można wrzucić liczbę przecież.
5.W pliku index.php mam selecta i działa, połączenie jest. Ten plik mam w /admin/new.php

0
CodeRZ napisał(a):

@Mjuzik

2.Wiem, ale to jest tylko dla admina, a przecież admin nie będzie sam sobie, niszczył bazy. W przyszłości zrobię, na razie nie chce mieszać zbytnio

Nawet jeśli, to tylko pod warunkiem, że reszta aplikacji jest odpowiednio zabezpieczona i nikt nieuprawniony nie dostanie dostępu do rzeczy "tylko dla admina" :) jeśli robisz to w jakimś konkretnym celu, a nie do portfolio, to lepiej porządnie przetrzep wszystko jakimś Burp Suitem albo innym OWASP ZAPem, kto wie jakie jeszcze kwiatki mogą się znaleźć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1