Wyjaśnijmy sobie, że nie oszczędzasz czasu (ani nie upiększasz kodu) tworząc wiele zmiennych w jednym wierszu, naprawdę nadszedł czas, aby nacisnąć przycisk „enter” po wyrzuceniu średnika.
Powodem, dla którego nikt nie zadał sobie trudu, aby dać ci właściwą odpowiedź, jest to, że twój kod jest naprawdę trudny do odczytania.
Na początek powinieneś zacząć od lepszej struktury kodu, coś takiego również powinno być brane pod uwagę:
- Właściwie upewnij się, że coś zostało opublikowane, nie zakładaj, że $_POST['book'] istnieje.
- Pokaż nam wszystkie zmienne i funkcje, których używasz, gdy prosisz o pomoc. Wyświetlenie nam wartości $Hostname,$Username,$Password,$DatabaseName może w rzeczywistości pomóc.
- $PapierTableName? Po prostu zdefiniuj ją w zapytaniu lub przypisz nazwę do zapytania.
- Zorganizuj zapytanie jako ciąg, a następnie przygotuj ciąg, który zawiera zapytanie.
- W zapytaniu brakuje średnika.
- Używanie $rit[$i] jest bezcelowe, użycie $rit[] =działa równie dobrze z dołączaniem danych do tablicy.
- Spójrz na utf8_encode, myślę, że nadmiernie komplikujesz swój kod.
- $ret =array_merge($ret, search($rit, 4, $catlist[$i])) nadpisuje wszystko, co robisz, musisz zrobić $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));
W połączeniu, coś takiego będzie znacznie bardziej uporządkowane:
<?php
$postedBook = isset($_POST['book']) ? $_POST['book'] : false;
if($postedBook != false)
{
$Hostname = 'localhost';
$Username = 'root';
$Password = '';
$DatabaseName = 'dbName';
$book = normalize_str(htmlentities(preg_replace('/\s+/',' ', $postedBook), ENT_QUOTES,'UTF-8'));
$filecat = '../books/'.$book.'/'.$book.'.txt';
$catlist = file($filecat, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$mysqli = new mysqli($Hostname, $Username, $Password, $DatabaseName);
$stmt = $mysqli->stmt_init();
$query = "SELECT * FROM PapierTable WHERE book = ? ORDER BY position ASC, title ASC;";
$prepared = $stmt->prepare($query);
if($prepared)
{
$stmt->bind_param('s', $book);
$stmt->execute();
$result = $stmt->bind_result($iden, $title, $price, $image, $description, $category, $enrat, $rating);
if($result)
{
$rit = array();
while($stmt->fetch())
{
$rit[] = array(
invert_str(html_entity_decode($title, ENT_QUOTES, 'UTF-8')),
$price,
invert_str(html_entity_decode($image, ENT_QUOTES, 'UTF-8')),
invert_str(html_entity_decode($description, ENT_QUOTES, 'UTF-8')),
invert_str(html_entity_decode($category, ENT_QUOTES, 'UTF-8')),
$enrat,
$rating
);
}
$stmt->close();
$count = count($catlist);
$ret = array();
for($i = 0; $i < $count ; $i++)
{
$ret[] = array_merge($ret, search($rit, 4, $catlist[$i]))
}
echo json_encode($ret);
}
else
{
file_put_contents('binderror.txt', $stmt->error);
}
}
else
{
file_put_contents('connecterror.txt',$stmt->error);
}
}
?>
Nie jestem pewien, czy to rozwiąże twój problem, ale jeśli tak się nie stało, powinno być przynajmniej o wiele łatwiej dowiedzieć się, co jest nie tak.
Większość występujących błędów jest bardzo powszechna i podstawowa, ale nieustrukturyzowany kod sprawia, że trudno je znaleźć.