ďťż
Podstrony
|
telcocafePojawia mi się następujący błąd: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 'images/emots/smile.gif' alt='smile'> :) ' at line 1 Funkcja emoSet() która zmienia tekst przed zapisem: function emoSet($str) { $chr = array(":)",";)",":(",";(",":[ ",";[",":]",";]",":P",";P",";p" ,":p",":D",";D",";d",":d",":|"," ;|",":/",";/","lol","LOL"); $chrt = array("<img src='images/emots/smile.gif' alt='smile'>","<img src='images/emots/smile.gif' alt='smile'>","<img src='images/emots/sad.gif' alt='sad'>","<img src='images/emots/sad.gif' alt='sad'>","<img src='images/emots/angry.gif' alt='angry'>","<img src='images/emots/angry.gif' alt='angry'>","<img src='images/emots/happy.gif' alt='happy'>","<img src='images/emots/happy.gif' alt='happy'>","<img src='images/emots/tongue.gif' alt='tongue'>","<img src='images/emots/tongue.gif' alt='tongue'>","<img src='images/emots/tongue.gif' alt='tongue'>","<img src='images/emots/tongue.gif' alt='tongue'>","<img src='images/emots/veryhappy.gif' alt='very happy'>","<img src='images/emots/veryhappy.gif' alt='very happy'>","<img src='images/emots/veryhappy.gif' alt='very happy'>","<img src='images/emots/veryhappy.gif' alt='very happy'>","<img src='images/emots/startled.gif' alt='startled'>","<img src='images/emots/startled.gif' alt='startled'>","<img src='images/emots/dry.gif' alt='dry'>","<img src='images/emots/dry.gif' alt='dry'>","<img src='images/emots/lol.gif' alt='lol'>","<img src='images/emots/lol.gif' alt='lol'>"); $stro = str_replace($chr,$chrt,$str); return $stro; } Co jest źle? Bo nie wiem za bardzo co to za błąd ;/ A jak wygląda zapytanie? Być może tam się wszystko wysypuje, bo na pierwszy rzut oka wszystko tutaj jest dobrze. Poza tym, najpierw zamiast wykonywać zapytanie razem z wynikiem tej funkcji sprawdz jak ono wygląda - po prostu je sobie wyświetl. Poza tym - dziwny masz styl. Poprawny html wymaga by atrybuty były pisane w cudzysłowiu a nie apostrofie. Natomiast w php lepiej stosować apostrofy, gdyż szybciej "mieli" te zmienne. zamiast "<img src='images/emots/smile.gif' alt='smile'>", lepiej dać '<img src="images/emots/smile.gif" alt="smile">', $con = emoSet($_POST['content']); $dat = $_POST['date']; mysql_query("INSERT INTO portfolio_news VALUES ( NULL, '$tit' , '$con' , '$dat' );") or die(mysql_error()); Oto kod... Tabela ma pola po kolei id, n_title, n_content, n_date więc wszystko jest dobrze. Nie wiem co jest niepoprawnie bo inne (bez emotów) się dodają. Więc się domyślam że przy takim dokładnie kodzie, i treści powiedzmy "blabla :)" otrzymamy takie cudo: INSERT INTO portfolio_news VALUES ( NULL, '[tytul]' , 'blabla <img src='images/emots/smile.gif' alt='smile'>' , '$dat' ); czyli spójrzmy uważnie co się dzieje po '[tytul]', ': Skrypt do zapytania wstawia blabla <img src= - w tym momencie pojawia się apostrof który zamyka poprzednio wprowadzony, ograniczający tą część zapytania - wszystko po tym apostrofie będzie traktowane jak część zapytania, a nie dana. images/emots/smile.gif będzie więc traktowane jako polecenie mysql! Następnie jednak znów otwiera się apostrof, i dodaje kolejny kawałek tekstu - alt= - i znowu zamyka się apostrof i znowu smile będzie potraktowane jako polecenie mysql. Później otwiera się apostrof, dodaje tekst > i zamyka apostrof, przecinek. Widzisz już gdzie jest błąd? Rozwiązanie -> mój pierwszy post. I zmień w zapytaniu cudzysłowia na apostrofy i wzajemnie - i pisz w takiej formie, wygodniej i szybciej (optymalizacja). Teraz niech to wygląda tak: mysql_query('INSERT INTO portfolio_news VALUES ( NULL, "'.$tit.'" , "'.$con.'" , "'.$dat.'" );') or die(mysql_error()); Btw - zrób też filtrowanie danych wprowadzonych przez użytkownika, bo w takiej formie jesteś narażony na sql injection. Użytkownik Einzeinbleth edytował ten post 17 listopad 2006, 11:26 Spoko, dzieki, nie zauwazylem tego :) A tak btw. to jest kawałek mojego 'admina' więc nikt oprócz mnie tych treści nie wprowadza. Chociaz lepiej dam htmlspecialchars i pare innych ;] Jak dasz htmlspecialchars to Ci kod html nie zadziala, mysle ze w tym przykladzie w panelu admina to wazne. Uzywaj addslashes i stripslashes Wcale nie chce kodu html używać, zrobiłem tylko pare znaczników bbcode ;) Temat do zamknięcia |
|||
Sitedesign by AltusUmbrae. |