Autor Zpráva
Baly
Profil *
zdravím, nevěděl jsem přesně kam tento příspěvek směřovat, protože to mám napůl php a napůl javascript problém. Problém je v ukládání mezer (<br>) do databáze. Načítání stránky jsem si nedávno udělal pomocí ajaxu a všiml jsem si, že php přestalo odesílat <br> do databáze, prostě to vynechává. Předtím když jsem to měl jen php tak v tom nebyl problém.

Stránka ze které se odesíla do databáze:
<?php
header('Content-Type: text/html; charset=utf-8');
include("connect.php");
include("nopermision.php");
include("timeout.php");
include("banned.php");
  $idd = $_GET['id'];
  $novypredmet = $_GET['predmet'];
  $novytext = $_GET['novinka'];
  $newtext = htmlspecialchars("$novytext", ENT_QUOTES);
  $message = eregi_replace(chr(13),"<br>",$novytext);
  $newtext = htmlspecialchars("$novypredmet", ENT_QUOTES);
$novypredmet = eregi_replace(chr(13),"<br>",$newtext);
  echo "<span class=\"text2\">Novinka byla Úspesne Editována!</span>";
  mysql_query ("UPDATE news SET predmet = '$novypredmet' WHERE id = '$idd'") or die (mysql_error());
  mysql_query ("UPDATE news SET obsah = '$message' WHERE id = '$idd'") or die (mysql_error());
?>


Ajax funkce na provedení:
function newsedit() {
var id = document.editform.id.value;
var predmet = document.editform.predmet.value;
var novinka = document.editform.novinka.value;
editnews.open("GET","newsedit.php?id="+id+"&predmet="+predmet+"&novinka="+novinka, true);
editnews.send(null);
editnews.onreadystatechange = function() {
if (editnews.readyState == 4) {
obsah.innerHTML=editnews.responseText;
}
}
return false;
}


Stránka kde se novinky ukazují:
<?
header('Content-Type: text/html; charset=utf-8');
include("connect.php");
include("nopermision.php");
include("timeout.php");
include("banned.php");
?>
<?
$ip = $_SERVER['REMOTE_ADDR'];
$vysledek = mysql_query ("SELECT ip, name FROM onlinecheck WHERE ip = '$ip'") or die (mysql_error());
while($odpoved = mysql_fetch_array($vysledek)) {
$jmenoo = $odpoved[name];
}
$vysledek = mysql_query ("SELECT jmeno, admin FROM balyphpzkousk WHERE jmeno = '$jmenoo'") or die (mysql_error());
while($odpoved = mysql_fetch_array($vysledek)) {
  $admin = $odpoved[admin];
}
    echo '<div class="podnadpis">NOVINKY</span></div><br /><br />';
$vysledek = mysql_query ("SELECT * FROM news ORDER BY id DESC") or die (mysql_error());
while($odpoved = mysql_fetch_array($vysledek)) {
    if ($admin == "0") {
    echo "<span class=\"adminname\">$odpoved[jmeno]</span>";
    echo "<hr /><span class=\"texto2\">$odpoved[predmet]</span><br /><br /><span class=\"text1\">$odpoved[obsah]</span><br /><br />";
}
    if ($admin == "2" or $jmenoo == $odpoved[jmeno]) {
      echo "<form method=\"post\" action=\"?zmena=ano\" id=\"$odpoved[id]\" onSubmit=\"return newszmenit($odpoved[id])\"><span class=\"adminname\">$odpoved[jmeno]</span>
      <select class=\"selectpole\" size=\"1\" id=\"news\" >
      <option selected=\"selected\" value=\"Zmenit\">Zmenit</option>
      <option value=\"$odpoved[id]\">Smazat</option>
      </select>
      <input type=\"hidden\" id=\"zmena\" value=\"$odpoved[id]\" />
      <input class=\"button\" type=\"submit\" value=\"Provést\" />
      </form>";
      echo "<hr /><span class=\"texto2\">$odpoved[predmet]</span><br /><br /><span class=\"text1\">$odpoved[obsah]</span><br /><br />";
    }
      echo "<div align=\"right\"><div class=\"malytext\">$odpoved[datum]<hr /></span></div>&nbsp;<br /><br /></div>";
}
?>
</div>


Mezi ajaxovou a php stránkou na ukládání do databáze je ještě jedna, ale ta vás nemusí zajímat, akorát se přes ní pošlou dále nějaká data, v ní jsem problém neviděl.

Dodatečné informace:
# MySQL charset: UTF-8 Unicode (utf8)
# MySQL connection collation: utf8_czech_ci
AM_
Profil
Baly:
$message = eregi_replace(chr(13),"<br>",$novytext);
fujtajbl,
1) ereg_ už se nepoužívají, místo nich se používají preg_
2) tady žádný regulární výraz nemáš, takže str_replace, ne ereg ani preg ani žádný jiný reg
3) tohle umí funkce nl2br(), takže toto vypisovat je zbytečné, nepotřebuješ tedy vůbec žádný replace.
Tady taky může být příčina problému, ty nahrazuješ jen znak 13, tedy CR neboli \r. Unix (tedy např. Linux) pro odřádkování používá pouze \n (narozdíl od Windows, které používají sekvenci \r\n, a Macu, který používá \r), takže na Unixových systémech tvůj skript pochopitelně fungovat nemůže - znak 13 se s největší pravděpodobností v textu neobjeví vůbec (a i kdyby - v linuxu nemá význam odřádkování).


$newtext = htmlspecialchars("$novytext", ENT_QUOTES);
proč je ta proměnná v uvozovkách?

$odpoved[name];
špatně. Správně je $odpoved['$name'];
Baly
Profil *
ok, díky. Jo a $odpoved[name] funguje taky bez problému, používám ji už dlouho :o)
AM_
Profil
Baly:
Jo a $odpoved[name] funguje taky bez problému, používám ji už dlouho :o)
Funguje to, protože name je nedefinovaná konstanta a PHP za nedefinované konstanty dosazuje řetězec s hodnotou jejich názvu.
Ale:
1) je to hnus a bude to házet E_NOTICE chyby (teď nevím, jestli dokonce ne warning, ale to je vcelku jedno); a potlačování chyb, aby si schoval špatně napsaný kód, je taky hnus - nevšimneš si jiných chyb, které mají také opodstatnění.
2) až se jednou v programu rozhodneš definovat konstantu name (nebo někdo jiný, kdo ho po tobě bude upravovat), bude(š) se hrozně divit, proč to najednou přestalo fungovat

Pokud ti jde o ušetřené dva znaky, radši ušetři uvozovky okolo proměnné, tedy "$neco", to taky funguje, ale je to taky hnus.
Baly
Profil *
změnil jsem to na
  $newtext = htmlspecialchars($novytext, ENT_QUOTES);
  $message = nl2br($newtext);
  $newtext = htmlspecialchars($novypredmet, ENT_QUOTES);
$novypredmet = nl2br($newtext);


Stále to <br> nechce odesílat do databáze, nevíte v čem může být problém? Není to tím že to otevírám přes ajax? Zjistil jsem že se moje stránky začaly chovat dost jinak od té doby co jsem je začal otevírat pomocí ajaxu... Některé věci nefungovaly.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: