Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP] Wpisanie artykułu do bazy
Forum PHP.pl > Forum > Przedszkole
warzywniak365
Witam,

Nie mogę sobie poradzić z tym problemem ani znalezieniem go w internecie sad.gif. Mianowicie próbuję wpisać długi(125026 znaków) artykuł do bazy danych w pole LONGTEXT (baza danych MySQL). W programie używam klasy mysqli której obiekt jest przechowywany przez zmienną $connection. $connection->query("insert...") zwraca mi wartość odpowiadającą prawdzie (przechodzi testy if). Generalnie wszystko działa niby ładnie, ale artykuł nie pojawia się w bazie. Jak dodaje krótkie artykuły to wszystko ładnie śmiga biggrin.gif i pojawia się w bazie. Formularz przesyłam metodą POST żeby nie ucięło informacji. Proszę o pomoc i wyrozumiałość jeśli to jest na tyle trywialne, że nie ma tego w internecie biggrin.gif.
max_mcee
Jesteś pewny, że to nie problem czegoś innego? LONGTEXT jest największym typem MySQLa (ex aequo z LONGBLOB) i potrafi pomieścić do 4GB danych. Czy ten Twój artykuł zajmuje aż tyle miejsca ?
Pokaż może kod.
warzywniak365
To jest kod który generuje formularz:

function show_wizard_html(){?>
<div id=wizard>
<div id="to_new_category">
<p>Zanim wpiszesz treść artykułu zastanów się w jakiej kategorii ma się on znaleźć. <a href="category_wizard.php" onclick="return !aTarget(this)">Tutaj</a> możesz dodać nowe kategorie.
Po dodaniu kategorii, aby była ona dostępna musisz ją odświeżyć.</p>
</div>
<p>Wpisz treść artykułu w języku HTML, ewentualnie używając stylów CSS.</p>
<div id="article_wizard">
<form action="addarticle.php" method="post">
Tytuł<input type="text" name="title" />
<textarea class="ckeditor" name="article_contents" cols="150" rows="50"></textarea>
<!-- dodawanie zdjec-->
<textarea name="key_words" cols="150" rows="3"></textarea>
<select name="associated[]" multiple="multiple" size="5">
<?php //rozwiniecie listy artykulow -------------------------------------------
require_once("functions.php");
$connection=connect_db();

$result1 = $connection->query("select name from categories");
if($result1){
for(;$row1 = $result1->fetch_row() wink.gif{
echo '<optgroup label="'.$row1[0].'">';
$result2 = $connection->query("select name from articles where in_category='".$row1[0]."'");
if($result2){
for(;$row2 = $result2->fetch_row() wink.gif{
echo '<option>'.$row2[0].'</option>';
}
}
echo '</optgroup>';
}
}
//$connection.close();
?>
</select>
<select name="category">
<?php //------------------------------------------------------------------------------
$connection = connect_db();
$result1 = $connection->query("select name from categories");
if($result1){
for(;$row1 = $result1->fetch_row() wink.gif{
echo '<option>'.$row1[0].'</option>';
}
}
//$connection.close();
?>
</select>
<button type="submit">Wyślij</button>
</form>
</div>
</div>
<?php }

--------------------------------------------------------------

To jest skrypt odbierający formularz:

<?php

require_once("functions.php");
session_start();
if(!isset($_SESSION['logged'])){
echo 'Musisz być zalogwany';
header("Location: index.php");
}
$result = add_article_db($_POST);
if($result){
echo 'Dodano artykuł pomyślnie';
}else{
echo 'Nie mogłem dodać artykułu';
}


?>
---------------------------------------------------

To jest funkcja która wpisuje artykuł w bazę:

function add_article_db($form){
$connection = connect_db();
$tmp='';
foreach($form['associated'] as $link){
$tmp.=$link.' ';
}
foreach($form as $value){
echo $value.'<br/>';
}
$result = $connection->query("insert into articles (name,in_category,author,creation_date,contents,key_words,associated_with,blocka
de) values('".$form['title']."','".$form['category']."',
'".$_SESSION['logged']."','".date("Y-m-d")."','".$form['article_contents']."','".$form['key_words']."','".$tmp."',1)");
if($result){
return true;
}
return false;
}


warzywniak365
;) zamiast tych emotek
max_mcee
Używaj do prezentowania kodu odpowiednich znaczników, będzie czytelniej.
Moim zdaniem masz w tekście jakiś apostrof lub cudzysłów.
Użyj na danych addslashes na artykule wprowadzanym do bazy, powinno pomóc.
warzywniak365
jeszcze tabela w bazie:

CREATE TABLE IF NOT EXISTS articles(
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(40) NOT NULL,
in_category VARCHAR(30) NOT NULL,
author VARCHAR(30) NOT NULL,
creation_date DATE NOT NULL,
contents LONGTEXT NOT NULL,
key_words VARCHAR(300) NOT NULL,
associated_with VARCHAR(300),
blockade BIT(1) NOT NULL,
CONSTRAINT article_id PRIMARY KEY (id),
CONSTRAINT category_of_article FOREIGN KEY (in_category) REFERENCES categories (name),
CONSTRAINT author_of_article FOREIGN KEY (author) REFERENCES users (login)
)ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci AUTO_INCREMENT=0;
warzywniak365
Pomogło addslashes wielkie dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.