• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sql, PHP - przesłanie danych

Object Storage Arubacloud
0 głosów
463 wizyt
pytanie zadane 6 czerwca 2016 w PHP przez Alterwar Dyskutant (7,650 p.)

Witam.

Otóż, mam kilka podstron w php mających prawie identyczny kod i bez problemu przesyła dane z formularza. Jednak tutaj występuję błąd i nie mogę go zlokalizować.

Wystapil blad: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Jeśli ktoś mógłby rzucić okiem będę wdzięczny. Przy próbie wywołania zmiennych w "updateKonf" nic się nie wyświetla. http://pastebin.com/d8Ctq829

komentarz 6 czerwca 2016 przez Boshi VIP (100,240 p.)
Jakiś błąd składniowy przy zapytaniu.

2 odpowiedzi

+2 głosów
odpowiedź 6 czerwca 2016 przez xandros Nałogowiec (29,450 p.)
wybrane 6 czerwca 2016 przez Alterwar
 
Najlepsza

Co jest w zmiennej $prefix?

Możesz użyć "`":

$query = "SELECT * FROM `{$prefix}Konferencje` WHERE 1"

Jeśli prefix to nazwa bazy, to zapomniałeś '.':

$query = "SELECT * FROM `{$prefix}`.`Konferencje` WHERE 1"

 


 

Jak już chcesz używać mysql, to:

$query = sprintf("UPDATE %s%s SET Tytul = %s, Tresc= %s, DataOd= %s, DataDo = %s, Lokalizacja = %s, Termin = %s WHERE ID = %s",
    $prefix,
    'Konferencje',
    mysql_real_escape_string($Nowytytul),
    mysql_real_escape_string($Nowykomentarz),
    mysql_real_escape_string($NowydataOd),
    mysql_real_escape_string($NowydataDo),
    mysql_real_escape_string($Nowylokalizacja),
    mysql_real_escape_string($Nowytermin),
    mysql_real_escape_string($id)
);

http://php.net/manual/en/function.mysql-real-escape-string.php
http://php.net/manual/en/function.sprintf.php

Oraz radzę walidować dane z GETa. 
Pierwszy lepszy zestaw walidatorów z githuba: https://github.com/Respect/Validation

Lepiej byłoby użyć mysqli/pdo lub jakiegoś ORMa. (może nie jest jakoś wybitnie dobry, ale na początek i do nauki może wystarczy: http://redbeanphp.com )
Minusem ORMów jest to, że mają słabszy performance niż zwykłe sql no i nie nauczysz się sqla. Zaletami to oczywiście wygoda i obiektówka.

A dlaczego nie mysql? Oto jeden z powodów:

Warning

This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:

 

komentarz 6 czerwca 2016 przez Alterwar Dyskutant (7,650 p.)

Po spróbowaniu Twojego sposobu dostałem informację:
 

Wystapil blad: UPDATE command denied to user 'bazalocal'@'localhost' for table 'Konferencje'

Przy moim zapisie dostaję cały czas:

UPDATE `tabNew_Konferencje` SET Tytul = '', Tresc='', DataOd='', DataDo ='', Lokalizacja ='', Termin ='' WHERE ID =''

Więc chyba dane nie są przesyłane. Bardzo dziwne, bo na innych podstronach działa bez problemu

W prefixie trzymam prefix tabeli. Np : tbl_

komentarz 6 czerwca 2016 przez xandros Nałogowiec (29,450 p.)

> W prefixie trzymam prefix tabeli. Np : tbl_

no to:

$query = "SELECT * FROM `{$prefix}Konferencje` WHERE 1"


Wystapil blad: UPDATE command denied to user 'bazalocal'@'localhost' for table 'Konferencje'

Znaczy, że masz kolejny błąd w updateKonf.php. Zaraz przeanalizuję. I sprawdź uprawnienia usera, czy w ogóle może używać UPDATE na tej tabeli.

komentarz 6 czerwca 2016 przez Alterwar Dyskutant (7,650 p.)
edycja 6 czerwca 2016 przez Alterwar

Może używać UPDATE.

Jeśli w zapytaniu update na koncu dam = WHERE ID =".$id.""); dostaję błąd

Wystapil blad: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

A jeśli dam WHERE ID ='$id' "); dostaję:

UPDATE `tabNew_Konferencje` SET Tytul = '', Tresc='', DataOd='', DataDo ='', Lokalizacja ='', Termin ='' WHERE ID =''

komentarz 6 czerwca 2016 przez xandros Nałogowiec (29,450 p.)

po pierwsze:

 

Jak już chcesz używać mysql, to:
 

$query = sprintf("UPDATE %s%s SET Tytul = %s, Tresc= %s, DataOd= %s, DataDo = %s, Lokalizacja = %s, Termin = %s WHERE ID = %s",
    $prefix,
    'Konferencje',
    mysql_real_escape_string($Nowytytul),
    mysql_real_escape_string($Nowykomentarz),
    mysql_real_escape_string($NowydataOd),
    mysql_real_escape_string($NowydataDo),
    mysql_real_escape_string($Nowylokalizacja),
    mysql_real_escape_string($Nowytermin),
    mysql_real_escape_string($id)
);

http://php.net/manual/en/function.mysql-real-escape-string.php
http://php.net/manual/en/function.sprintf.php

Ale lepiej byłoby użyć mysqli/pdo lub nawet tego ORMa.
Minusem ORMów jest to, że mają słabszy performance niż zwykłe sql no i nie nauczysz się sqla. Zaletami to oczywiście wygoda i obiektówka.

I radzę walidować dane z GETa. 
Pierwszy lepszy zestaw walidatorów z githuba: https://github.com/Respect/Validation

Edit: zaraz wrzucę to do "odpowiedzi"

komentarz 6 czerwca 2016 przez Alterwar Dyskutant (7,650 p.)
ok dziękuję za pomoc. Muszę się wziąć za PDO, bo widzę że nic z tego nie będzie :)
komentarz 6 czerwca 2016 przez Alterwar Dyskutant (7,650 p.)
Znalazłem durny błąd. Wysyłałem postem, odbierałem getem. Tyle czasu na tak durny błąd.

P.S dzięki jeszcze raz:)
0 głosów
odpowiedź 6 czerwca 2016 przez CzikaCarry Szeryf (75,340 p.)

Sprawdź czy tak nie działa 

$zapytanie = mysql_query("SELECT * FROM '$prefix' Konferencje" );

 

komentarz 6 czerwca 2016 przez Alterwar Dyskutant (7,650 p.)
niestety nie działa.
komentarz 6 czerwca 2016 przez CzikaCarry Szeryf (75,340 p.)

A tak: 

$zapytanie = mysql_query('SELECT * FROM "$prefix" Konferencje' );

Kiedyś też miałem taki problem i pamiętam, że coś z tymi cudzysłowiami było nie tak.

1
komentarz 6 czerwca 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

No nie za bardzo, lepiej nie zgaduj tylko zobacz jaka jest różnica między ' a "

https://php-kurs.gitbooks.io/phpkurs/content/czesc-i/Zmienne/Typy%20zmiennych/String.html

I mysql_ jest już dawno zdeprecjonowane i usunięte... http://php.net/manual/en/function.mysql-query.php

Podobne pytania

0 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 28 kwietnia 2019 w PHP przez manager96 Bywalec (2,050 p.)
0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 20 marca 2017 w PHP przez Gun3R Nowicjusz (120 p.)
+1 głos
1 odpowiedź 425 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...