przekazanie znaku ' z fomularza do bazy

0

Cześć, miałem problem z dodawaniem pewnego tekstu do bazy danych i krok po kroku doszedłem czemu nie chce się dodawać lecz nie mam pomysłu na rozwiązanie.
W panelu zarządzania jest formularz do dodawania NEWSów - plik dodajAktualnosc.php

<form class="form-style-7" method="post" action="DATABASE_dodajAktualnosc.php">
				<ul>
				<li>
					<label for="tytulArtykulu">Tytul artykułu</label>
					<input type="text" name="tytulArtykulu" maxlength="100">
					<span>Tutaj wpisz tytuł artykułu</span>
				</li>
				<li>
					<label for="autorArtykulu">Autor artykułu</label>
					<input type="text" name="autorArtykulu" maxlength="100">
					<span>Tutaj wpisz autora artykułu</span>
				</li>
				<li>
					<label for="trescArtykulu">Treść artykułu</label>
					<textarea name="trescArtykulu" onkeyup="adjust_textarea(this)"></textarea>
					<span>Tutaj wpisz treść artykułu</span>
				</li>
				<li>
					<input type="submit"  value="Dodaj artykuł" >
				</li>
				</ul>
			</form>

W DATABASE_dodajAktualnosc chce dodac ten tekst przekazany z textarea

 
MKS Stal Poniatowa w meczu 9 kolejki Lubelskiej Klasy  Okręgowej podejmowała drużynę Lubelskiego Sygnału. Pierwsza połowa to zdecydowana przewaga Stali  w kreowaniu sytuacji strzeleckich jednak  nie przełożyło się to na gola i na przerwę gracze obu zespołów schodzili przy wyniku 0:0. Doskonałe okazje zmarnowali Damian Miazga, Konrad Gąsiorowski i Sylwester Parada , który w sytuacji sam na sam  z bramkarzem uderzył w słupek bramki gości. W drugiej części  spotkania na boisku pojawili się Michał Czarnecki i Jarosław Wyroślak co spowodowało , że przewaga gospodarzy była jeszcze bardziej widoczna.   W jednej z sytuacji  tuż przed polem karnym Michał Czarnecki  wyłożył piłkę Konradowi Gąsiorowskiemu , który  strzelił pierwszego gola dla Stali. Kolejne minuty to dominacja zawodników Stalówki , którzy raz po raz zagrażali bramce gości . Pomimo kilkunastu stworzonych sytuacji przez gospodarzy wynik na tablicy nie zmieniał się aż do 90 minuty kiedy sędzia dopatrzył się zagrania ręką w polu karnym jednego z obrońców Stali , dyktując rzut karny. Zawodnik gości płaskim strzałem w dolny róg doprowadził do remisu co było szokiem dla kibiców zgromadzonych na stadionie, gdyż wcześniej gospodarze mieli kilkanaście szans na podwyższenie prowadzenia. Na szczęście zaraz po wznowieniu gry w ostatniej minucie spotkania Paweł Pikuła efektownie minął dwóch zawodników gości na lewym skrzydle  ,wpadł w pole karne, dograł do Michała Czarneckiego , który plasowanym strzałem umieścił piłkę w siatce i zapewnił pierwsze trzy punkty Stali na swoim obiekcie. 

Stal:
Rybarczyk , Charmast ,Węgorowski, Pyda, Pikuła, Parada (80' Nowak)Radziejewski , Wawer (60' Wyroślak ) , Miazga , Kucharczyk (55' Czarnecki ), Gąsiorowski

lecz w ostatnich linijkach znajdują się 80',60' i 55' ktore stwarzają problem tekst bez apostrofow zostaje dodany do bazy

<?php
$tytulArtykulu = $_POST["tytulArtykulu"];
$trescArtykulu = $_POST["trescArtykulu"];
$autorArtykulu = $_POST["autorArtykulu"];

echo $tytulArtykulu . "<br/>";
echo $autorArtykulu . "<br/>";
echo $trescArtykulu . "<br/>";

$mysqli = new mysqli("host","user","pass", "database");

if (mysqli_connect_errno())
{
	echo "Wystąpił błąd połączenia z bazą";	
}
$mysqli->set_charset("utf8");
$sqlQuery= "INSERT INTO `aktualnosci`
			VALUES ('','$tytulArtykulu','$trescArtykulu','NOW()','$autorArtykulu')";

$wynik = mysqli_query($mysqli,$sqlQuery);
	
if ($wynik === TRUE) 
{
	echo "<script type= 'text/javascript'>alert('New record created successfully');</script>";
} 
else 
{
	echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}

?>

dodany tekst jest Od razu widoczny jest jako nowa aktualność.

Jak rozwiązac problem z apostrofem ?

0

Poczytaj o PDO.

0

Ja myślę, ze poza PDO warto poczytać o sql injection.

Możesz użyć funkcji: mysqli_real_escape_string (http://php.net/manual/en/mysqli.real-escape-string.php)

Lub:

<?php
$tytulArtykulu = $_POST["tytulArtykulu"];
$trescArtykulu = $_POST["trescArtykulu"];
$autorArtykulu = $_POST["autorArtykulu"];
 
echo $tytulArtykulu . "<br/>";
echo $autorArtykulu . "<br/>";
echo $trescArtykulu . "<br/>";
 
$mysqli = new mysqli("host","user","pass", "database");
 
if (mysqli_connect_errno())
{
    echo "Wystąpił błąd połączenia z bazą";    
}
$mysqli->set_charset("utf8");
$stmt = $mysqli->prepare("INSERT INTO `aktualnosci` VALUES ('',?,?,NOW(),?)");
$stmt->bind_param('sss', $tytulArtykulu,$trescArtykulu,$autorArtykulu);

$stmt->execute();

if ($stmt->affected_rows > 0) 
{
    echo "<script type= 'text/javascript'>alert('New record created successfully');</script>";
} 
else 
{
    echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}
$stmt->close();
?>

Mogą być błędy, tu masz manuala: http://php.net/manual/en/mysqli-stmt.bind-param.php

0

Tak jak wyżej, poczytaj o injection, napisz sobie funkcje która używa real_escape_string z htmlentities i powinno działać, przynajmniej u mnie tak jest.

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