problem z polskimi znakami w bazie danych i na stronie

0

cześć wszystkim.
Proszę o podpowiedź co powinienem dodać do kodu żeby dane zapisywane do bazy danych miały polskie znaki, oraz co powinienem zrobić żeby polskie znaki mi się wyświetlały na stronie?

W bazie ustawiłem kodowanie utf8_polish_ci i gdy zmieniam litery na polskie znaki to strony nie moge odczytać, pojawiają mi się krzaczki, dodałem do pliku, poniższy kod, to nie za bardzo pomogło.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
kod 
</body>
</html>

Gdy wyświetlam stronę w php to niestety kod powyżej kompletnie nie działa.
Poniżej kod odczytujący dane z bazy danych

read_template.php

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.4.0/bootbox.min.js"></script>
<?php

echo "<div class='right-button-margin'>";
    echo "<a href='../standar.php' class='btn btn-primary pull-right'>";
    echo "<span class='glyphicon glyphicon'></span> powrót";
    echo "</a>";
echo "</div>";

if($total_rows>0){
	        echo "<div class='page-header'>
                <h4>5 ostatnio dodanych instrukcji</h4>
            </div>";
 echo "<div>";
    echo "<table class='table table-hover table-responsive table-bordered'>";
        echo "<tr>";
            echo "<th>Nazwa</th>";
            echo "<th>Data</th>";
			echo "<th>Funkcja</th>";
        echo "</tr>";
 
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
 
            extract($row);
            echo "<tr>";
			echo "<td>{$name}</td>";
			echo "<td>{$modified}</td>";
		
                echo "<td>";
 
                    echo "<a href='read_one.php?id={$id}' class='btn btn-primary left-margin'>";
                        echo "<span class='glyphicon glyphicon-list'></span> Odczytaj";
                    echo "</a>";
                echo "</td>";
            echo "</tr>";

			}
		echo "</table>";
	echo "</div>";	

 }
// tell the user there are no users
else{
    echo "<div class='alert alert-danger'>No instructions found.</div>";
}

	        echo "<div class='page-header'>
                <h4>Filtr Instrukcji i regulaminów</h4>
            </div>";
?>	
<div>
    <table class='table table-hover table-responsive table-bordered'>
 	<form method="post">
            <tr>
                <td>
				<select id="category-select" name="cat_id_select" class="clear-right">
					<option value="0" >Wyszukaj</option>					
					<option value="1">Programy szkolne</option>
	

				</select>
				</td>
            	<td> 
                <button type="submit" class="btn btn-primary">Wyszukaj Kategorii</button>
            	</td>
            	</tr>
		</form>
		<form method="post">
		<tr>
			<td>
				<select id="subcategory-select" name="subcat_id_select" class="clear-right">
				<option value="0">Wyszukaj</option>
        	<optgroup label="Programy szkolne">
        		<option value="1">profilaktyczny</option>

    
				</select>
				
			</td>
			<td>
				<button type="submit" class="btn btn-primary">Wyszukaj podkategorii</button>
			</td>
			
		</tr>
		</form>
</table>
</div>

Tworzenie instrukcji

<?php
class Instruction{
 

    private $conn;
    private $table_name = "instructions";
 
    public $id;
    public $name;
    public $description;
    public $category_id;
	public $subcategory_id;
	public $image;
    public $timestamp;
 
    public function __construct($db){
        $this->conn = $db;
    }
 
    // create user
    function create(){
		// insert query
$query = "INSERT INTO " . $this->table_name . "
            SET name=:name,description=:description,
                category_id=:category_id, subcategory_id=:subcategory_id, image=:image, created=:created";
 
        $stmt = $this->conn->prepare($query);
 
        // posted values
        $this->name=htmlspecialchars(strip_tags($this->name));
        $this->description=htmlspecialchars(strip_tags($this->description));
        $this->category_id=htmlspecialchars(strip_tags($this->category_id));
        $this->subcategory_id=htmlspecialchars(strip_tags($this->subcategory_id));
		$this->image=htmlspecialchars(strip_tags($this->image));
 
        // to get time-stamp for 'created' field
        $this->timestamp = date('Y-m-d H:i:s');
 
        // bind values 
        $stmt->bindParam(":name", $this->name);
        $stmt->bindParam(":description", $this->description);
        $stmt->bindParam(":category_id", $this->category_id);
        $stmt->bindParam(":subcategory_id", $this->subcategory_id);
		$stmt->bindParam(":created", $this->timestamp);
		$stmt->bindParam(":image", $this->image);
		
 
        if($stmt->execute()){
            return true;
        }else{
            return false;
        }
 
    }
	function readAll($from_record_num, $records_per_page){
 
    $query = "SELECT
                id, name, description, category_id, modified, created
            FROM
                " . $this->table_name . "
            ORDER BY
                created DESC
            LIMIT
                {$from_record_num}, {$records_per_page}";
 
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();
 
    return $stmt;
}
	// used for paging users
public function countAll(){
 
    $query = "SELECT id FROM " . $this->table_name . "";
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();
    $num = $stmt->rowCount();
    return $num;
}
	function readOne(){
 
    $query = "SELECT name, description, category_id, subcategory_id, image, created, modified 
        FROM " . $this->table_name . "
        WHERE id = ?
        LIMIT 0,1";
 
    $stmt = $this->conn->prepare( $query );
    $stmt->bindParam(1, $this->id);
    $stmt->execute();
 
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
 
    $this->name = $row['name'];
    $this->description = $row['description'];
    $this->category_id = $row['category_id'];
	$this->subcategory_id = $row['subcategory_id'];
	$this->created = $row['created'];
	$this->modified = $row['modified'];	
	$this->image = $row['image'];
	
	}
	function update(){
 
    $query = "UPDATE
			" . $this->table_name . "
			SET
				name = :name,
				description = :description,
				category_id = :category_id,
				subcategory_id = :subcategory_id,
				modified = :modified
			WHERE
			id = :id";
 
    $stmt = $this->conn->prepare($query);
 
    $this->name=htmlspecialchars(strip_tags($this->name));
    $this->description=htmlspecialchars(strip_tags($this->description));
    $this->category_id=htmlspecialchars(strip_tags($this->category_id));
    $this->subcategory_id=htmlspecialchars(strip_tags($this->subcategory_id)); 
	$this->id=htmlspecialchars(strip_tags($this->id));
		        $this->timestamp = date('Y-m-d H:i:s');

		
    $stmt->bindParam(':name', $this->name);
    $stmt->bindParam(':description', $this->description);
    $stmt->bindParam(":category_id", $this->category_id);
    $stmt->bindParam(":subcategory_id", $this->subcategory_id);
	$stmt->bindParam(":modified", $this->timestamp);
	$stmt->bindParam(':id', $this->id);
    if($stmt->execute()){
        return true;
    }
    return false;
} 
}

?>
0

W edytorze gdzie tworzyłeś stronę UTF-8 bez BOM?
W całej bazie, tabelach masz utf8_polish_ci?

0

Oooooo faktycznie ...... Zapomniałem o tym że ma być bez BOM.
Polish_ci ma tylko w poszczególnych tabelach. W pozostałych mam inne.

1

I przestań z gównianym sposobem INSERT INTO ... SET .... Nie wiem, co brał gościu, który to zaprojektował...

0

a jak powinienem to dodać?

0
czysteskarpety napisał(a):

W edytorze gdzie tworzyłeś stronę UTF-8 bez BOM?
W całej bazie, tabelach masz utf8_polish_ci?

poprawiłem pliki na UTF-8 bez BOM, ale ciągle masz hasz na stronie

0

dodałem do połączenia z bazą array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES 'UTF8'') i działa

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