Autor Zpráva
Michal Zet
Profil *
Ahojte. Snažím sa na web nainštalovať redakčný systém a stále tam píše:

Parse error: syntax error, unexpected T_STRING in /home/users/gagalady/topnazor.4fan.cz/web/vystupni_funkce.php on line 11

Takto vizerá kód stránky vystpnu_funkce.php

<?php

function zkrátitČlánek($nášText, $mez=500, $hledaný_text="\n", $počet=2) {
  $pozice = 0;
  $oseknuto = FALSE;
  for ($i = 1; $i <= $počet; $i++) {
    if ($tmp = strpos($nášText, $hledaný_text, $pozice+1)) {
      $pozice = $tmp;
      $oseknuto = TRUE;
    } else {
      $pozice = strlen($nášText) – 1;
      $oseknuto = FALSE;
      break;
    }
  }
  $nášText = substr($nášText, 0, $pozice);

  if (strlen($nášText) > $mez) {
    $nášText = substr($nášText, 0, $mez);
    $nášText = substr($nášText, 0, strrpos($nášText,' '));
    $oseknuto = TRUE;
  }
  if ($oseknuto) $nášText .= '…';
  return $nášText;
}

function zobrazitČlánek($článek, $jen_výstřižek=FALSE) {
  global $spojení;

  if ($článek) {
    $sql = "SELECT ar.*, usr.name " .
           "FROM cms_articles ar " .
           "LEFT OUTER JOIN cms_users usr " .
           "ON ar.author_id = usr.user_id " .
           "WHERE ar.article_id = ". $článek;
    $výsledek = mysql_query($sql,$spojení);

    if ($řádek = mysql_fetch_array($výsledek)) {
      echo "<h3>". htmlspecialchars($řádek['title']). "</h3>\n";
      echo "<h5><div class=\"byline\">Autor: " .
           htmlspecialchars($řádek['name']) .
           "</div>";
      echo "<div class=\"pubdate\">";
      if ($řádek['is_published'] == 1) {
        echo date("d.m.Y",strtotime($řádek['date_published']));
      } else {
        echo "nepublikováno";
      }
      echo "</div></h5>\n";
      if ($jen_výstřižek) {
        echo "<p>\n";
        echo nl2br(htmlspecialchars(zkrátitČlánek($řádek['body'])));
        echo "</p>\n";
        echo "<h4><a href=\"zobrazit_clanek.php?id_clanku=" .
             $řádek['article_id']. "\">Celý článek…</a></h4><br>\n";
      } else {
        echo "<p>\n";
        echo nl2br(htmlspecialchars($řádek['body']));
        echo "</p>\n";
      }
    }
  }
}

function zobrazitKomentáře($článek, $zobrazit_odkaz=TRUE) {
  global $spojení;
  if ($článek) {
    $sql = "SELECT is_published " .
           "FROM cms_articles " .
           "WHERE article_id=". $článek;
    $výsledek = mysql_query($sql,$spojení)
      or die('Komentáře nelze vyhledat; '. mysql_error());

    $řádek = mysql_fetch_array($výsledek);
    $publikováno = $řádek['is_published'];

    $sql = "SELECT co.*, usr.name, usr.email " .
           "FROM cms_comments co " .
           "LEFT OUTER JOIN cms_users usr " .
           "ON co.comment_user = usr.user_id " .
           "WHERE co.article_id=". $článek .
           " ORDER BY co.comment_date DESC";
    $výsledek = mysql_query($sql, $spojení)
      or die('Komentáře nelze vyhledat; '. mysql_error());

    if ($zobrazit_odkaz) {
      echo "<h4>Celkem komentářů: ". mysql_num_rows($výsledek);
      if (isset($_SESSION['id_uživatele']) and $publikováno) {
        echo " / <a href=\"komentar.php?id_clanku=". $_GET['id_clanku'] .
             "\">Přidat nový komentář</a>";
      }
      echo "</h4>\n";
    }

    if (mysql_num_rows($výsledek)) {
      echo "<div class=\"scroller\">\n";
      while ($řádek = mysql_fetch_array($výsledek)) {
        echo "<span class=\"commentName\">" .
             htmlspecialchars($řádek['name']) .
             "</span><span class=\"commentDate\"> (" .
             date("d.m.Y H:i", strtotime($řádek['comment_date'])) .
             ")</span>\n";
        echo "<p class=\"commentText\">\n" .
             nl2br(htmlspecialchars($řádek['comment'])) .
             "\n</p>\n";
      }
      echo "</div>\n";
    }
    echo "<br>\n";
  }
}
?>

a vážne neviem kde je tam chyba :( Poradíte mi prosím niekto? Ďakujem.

Moderátor Joker:
- Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).

- Titulek „Problém s PHP - Niekde je chyba :)“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Taps
Profil
Michal Zet:
bylo by celkem vhodne nepoužívat diakritiku v kodu
Michal Zet
Profil *
Jasné. To sa dáko doladí. No tak viete mi poradiť, kde je tá chyba??? Ja som do toho fakt dutý :)
Keeehi
Profil
Michal Zet:
Problémem je to mínus na 11 řádku. Neboť to není mínus ale něco jiného, co jako mínus vypadá. ASCII znaménka mínus je 45. ASCII toho znaku co tam máte vy je 150. stačí ho smazat a nahradit normálním mínusem.
Michal Zet
Profil *
Strašne ďakujem Keehi.
Ešte je tam ale jedna chyba... :( Je to tu

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '–2 ORDER BY title' at line 1

Je to MySql 5.1 a fakt neviem kde je chyba. Takto vizerajú tabuľky:
<?php
require_once 'spojeni.php';

$sql = <<<EOS
CREATE TABLE IF NOT EXISTS cms_access_levels (
  access_lvl tinyint(4) NOT NULL auto_increment,
  access_name varchar(50) NOT NULL default '',
  PRIMARY KEY (access_lvl)
)
EOS;
$výsledek = mysql_query($sql)
  or die(mysql_error());

$sql = "INSERT IGNORE INTO cms_access_levels " .
       "VALUES (1,'Uživatel'), " .
       "(2,'Zprostředkovatel'), " .
       "(3,'Správce')";
$výsledek = mysql_query($sql)
  or die(mysql_error());

$sql = <<<EOS
CREATE TABLE IF NOT EXISTS cms_articles (
  article_id int(11) NOT NULL auto_increment,
  author_id int(11) NOT NULL default '0',
  is_published tinyint(1) NOT NULL default '0',
  date_submitted datetime NOT NULL default '0000-00-00 00:00:00',
  date_published datetime NOT NULL default '0000-00-00 00:00:00',
  title varchar(255) NOT NULL default '',
  body mediumtext NOT NULL,
  PRIMARY KEY (article_id),
  KEY IdxArticle (author_id, date_submitted),
  FULLTEXT KEY IdxText (title, body)
) ENGINE=MYISAM
EOS;
$výsledek = mysql_query($sql)
  or die(mysql_error());

$sql = <<<EOS
CREATE TABLE IF NOT EXISTS cms_comments (
  comment_id int(11) NOT NULL auto_increment,
  article_id int(11) NOT NULL default '0',
  comment_date datetime NOT NULL default '0000-00-00 00:00:00',
  comment_user int(11) NOT NULL default '0',
  comment text NOT NULL,
  PRIMARY KEY (comment_id),
  KEY IdxComment (article_id)
)
EOS;
$výsledek = mysql_query($sql)
  or die(mysql_error());

$sql = <<<EOS
CREATE TABLE IF NOT EXISTS cms_users (
  user_id int(11) NOT NULL auto_increment,
  email varchar(255) NOT NULL default '',
  passwd varchar(50) NOT NULL default '',
  name varchar(100) NOT NULL default '',
  access_lvl tinyint(4) NOT NULL default '1',
  PRIMARY KEY (user_id),
  UNIQUE KEY uniq_email (email)
)
EOS;
$výsledek = mysql_query($sql)
  or die(mysql_error());

$email_správce = "spravce@vasweb.cz";
$heslo_správce = "spravce";
$jméno_správce = "Správce";

$sql = "INSERT IGNORE INTO cms_users " .
  "VALUES (NULL, '$email_správce', '$heslo_správce', '$jméno_správce', 3)";
$výsledek = mysql_query($sql)
  or die(mysql_error());

echo "<html><head><title>Tabulky systému pro správu obsahu byly vytvořeny" .
     "</title></head><body>";
echo "Tabulky systému pro správu obsahu byly vytvořeny. ". 
     "Toto jsou vaše pověření:\n";
echo "<ul><li><strong>Přihlašovací jméno</strong>: ". $email_správce. 
     "</li>\n";
echo "<li><strong>heslo</strong>: ". $heslo_správce. "</li></ul>\n";
echo "<a href=\"prihlasit.php\">Přihlásit se</a> do systému.";
echo "</body></html>"
?>


Ďakujem za vaše rady
Joker
Profil
Michal Zet:
Jak vypadá SQL dotaz, ze kterého ta chyba pochází?
Michal Zet
Profil *
Zrejme myslíš toto: Chybová správa sa objaví vždy, keď chcem vytovriť nový článok....

<?php
session_start();
require_once 'spojeni.php';
require_once 'http.php';

if (isset($_REQUEST['akce'])) {
  switch ($_REQUEST['akce']) {
    case 'Odeslat nový článek':
      if (isset($_POST['titul'])
          and isset($_POST['text_článku'])
          and isset($_SESSION['id_uživatele']))
      {
        $sql = "INSERT INTO cms_articles " .
               "(title,body, author_id, date_submitted) " .
               "VALUES ('". $_POST['titul'] .
               "','". $_POST['text_článku'] .
               "',". $_SESSION['id_uživatele']. ",'" .
               date("Y-m-d H:i:s", time()). "')";

        mysql_query($sql, $spojení)
          or die('Článek se nepodařilo odeslat; '. mysql_error());
      }
      přesměrovat('index.php');
      break;

    case 'Upravit':
      přesměrovat('sestavit.php?a=upravit&id_clanku='. $_POST['id_článku']);
      break;

    case 'Uložit změny':
      if (isset($_POST['titul'])
          and isset($_POST['text_článku'])
          and isset($_POST['id_článku']))
      {
        $sql = "UPDATE cms_articles " .
               "SET title='". $_POST['titul'] .
               "', body='". $_POST['text_článku']. "', date_submitted='" .
               date("Y-m-d H:i:s", time()). "' " .
               "WHERE article_id=". $_POST['id_článku'];

        if (isset($_POST['id_autora'])) {
          $sql .= " AND author_id=". $_POST['id_autora'];
        }

        mysql_query($sql, $spojení)
          or die('Článek nelze aktualizovat; '. mysql_error());
      }

      if (isset($_POST['id_autora'])) {
        přesměrovat('ovl_panel.php');
      } else {
        přesměrovat('hodnotit.php');
      }
      break;

    case 'Zveřejnit':
      if ($_POST['id_článku']) {
        $sql = "UPDATE cms_articles " .
               "SET is_published=1, date_published='" .
               date("Y-m-d H:i:s",time()). "' " .
               "WHERE article_id=". $_POST['id_článku'];
        mysql_query($sql, $spojení)
          or die('Článek nelze zveřejnit; '. mysql_error());
      }
      přesměrovat('hodnotit.php');
      break;

    case 'Stáhnout':
      if ($_POST['id_článku']) {
        $sql = "UPDATE cms_articles " .
               "SET is_published=0, date_published='0000-00-00 00:00:00' " .
               "WHERE article_id=". $_POST['id_článku'];
        mysql_query($sql, $spojení)
          or die('Článek nelze stáhnout; '. mysql_error());
      }
      přesměrovat('hodnotit.php');
      break;

    case 'Vymazat':
      if ($_POST['id_článku']) {
        $sql = "DELETE FROM cms_articles " .
               "WHERE is_published=0 " .
               "AND article_id=". $_POST['id_článku'];
        mysql_query($sql, $spojení)
          or die('Článek nelze vymazat; '. mysql_error());
      }
      přesměrovat('hodnotit.php');
      break;

    case 'Odeslat komentář':
      if (isset($_POST['id_článku'])
          and $_POST['id_článku']
          and isset($_POST['komentář'])
          and $_POST['komentář'])
      {
        $sql = "INSERT INTO cms_comments " .
               "(article_id,comment_date,comment_user,comment) " .
               "VALUES (". $_POST['id_článku']. ",'" .
               date("Y-m-d H:i:s", time()) .
               "',". $_SESSION['id_uživatele'] .
               ",'". $_POST['komentář']. "')";
        mysql_query($sql, $spojení)
          or die('Komentář nelze přidat; '. mysql_error());
      }
      přesměrovat('zobrazit_clanek.php?id_clanku='. $_POST['id_článku']);
      break;

    case 'Odebrat':
      if (isset($_GET['id_clanku'])
          and isset($_SESSION['id_uživatele']))
      {
        $sql = "DELETE FROM cms_articles " .
               "WHERE article_id=". $_GET['id_clanku'] .
               " AND author_id=". $_SESSION['id_uživatele'];
        mysql_query($sql, $spojení)
          or die('Článek nelze odebrat; '. mysql_error());
      }
      přesměrovat('ovl_panel.php');
      break;
  }
} else {
  přesměrovat('index.php');
}
?>
Joker
Profil
Michal Zet:
Zrejme myslíš toto: Chybová správa sa objaví vždy, keď chcem vytovriť nový článok
Ne, myslím:
Jak vypadá SQL dotaz, který to hlášení vyvolá?

To hlášení je mysql_error(), ale jaký je předcházející SQL dotaz? Nechte si na daném místě vypsat $sql (pravděpodobně).
Michal Zet
Profil *
Žiaľ neviem ako sa vypisuje SQL, ale dúfam, že toto pomôže. Takto vizerá ten formulár na odosielanie článkov a potom keď kliknem na odoslať, tak sa objaví tak chyba a pri zozname článkov nieje napísané nič.

<?php
require_once 'spojeni.php';

$titul = '';
$text_článku = '';
$id_článku = '';
$id_autora = '';
if (isset($_GET['a'])
    and $_GET['a'] == 'upravit'
    and isset($_GET['id_clanku'])
    and $_GET['id_clanku']) {
  $sql = "SELECT title,body,author_id FROM cms_articles " .
         "WHERE article_id=". $_GET['id_clanku'];
  $výsledek = mysql_query($sql, $spojení)
    or die('Nelze najít podklady článku; '. mysql_error());

  $řádek = mysql_fetch_array($výsledek);

  $titul = $řádek['title'];
  $text_článku = $řádek['body'];
  $id_článku = $_GET['id_clanku'];
  $id_autora = $řádek['author_id'];
}
require_once 'zahlavi.php';
?>

<form method="post" action="transakce_clanek.php">

<h2>Napsat článek</h2>

<p>
  Titul:<br>
  <input type="text" class="title" name="titul" maxlength="255"
    value="<?php echo htmlspecialchars($titul); ?>">
</p>
<p>
  Text článku:<br>
  <textarea class="body" name="text_článku" rows="10" cols="60"><?php
    echo htmlspecialchars($text_článku); ?></textarea>
</p>
<p>
<?php
echo '<input type="hidden" name="id_článku" value="'. $id_článku. "\">\n";

if ($_SESSION['oprávnění_uživatele'] < 2) {
  echo '<input type="hidden" name="id_autora" value="'. $id_autora. "\">\n";
}

if ($id_článku) {
  echo '<input type="submit" class="submit" name="akce" ' .
       "value=\"Uložit změny\">\n";
} else {
  echo '<input type="submit" class="submit" name="akce" ' .
       "value=\"Odeslat nový článek\">\n";
}
?>
</p>
</form>

<?php require_once 'pata.php'; ?>
Michal Zet
Profil *
Prepáčte doplietol som to :( Ešte raz... Mrzí ma to.... Chyba sa objaví len vtedy, keď načítam stránku hodnotit.php


 <?php
require_once 'spojeni.php';
require_once 'zahlavi.php';

$stavy_článku = array(
  "Nezveřejněné" => "submitted",
  "Zveřejněné" => "published"
);

echo "<h2>Dostupnost článku</h2>\n";
$i = –1;
foreach ($stavy_článku as $klíč => $hodnota) {
  $i++;
  echo "<h3>". $klíč. " články</h3>\n";
  echo "<p>\n";
  echo " <div class=\"scroller\">\n";

  $sql = "SELECT article_id, title, date_". $hodnota .
         " FROM cms_articles " .
         "WHERE is_published=". $i .
         " ORDER BY title";

  $výsledek = mysql_query($sql, $spojení)
    or die('Nelze načíst seznám článků ve frontě; '. mysql_error());

  if (mysql_num_rows($výsledek) == 0) {
    echo "  <em>Žádné ". strtolower( $klíč ). " články</em>";
  } else {
    while ($řádek = mysql_fetch_array($výsledek)) {
      echo '  <a href="hodnotit_clanek.php?id_clanku=' .
           $řádek['article_id']. '">' .
           htmlspecialchars($řádek['title']) .
           "</a> (". ($hodnota == "submitted"? "odesláno": "zveřejněno" ) .
           " ". date("d.m.Y", strtotime($řádek['date_'.$hodnota])) .
           ")<br>\n";
    }
  }
  echo " </div>\n";
  echo "</p>\n";
}

require_once 'pata.php';
?>



A vtedy sa objaví toto hlásenie:

Dostupnost článku
Nezveřejněné články

Nelze načíst seznám článků ve frontě; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '–2 ORDER BY title' at line 1


SQL kódy tabuliek sú v článku vyššie. Ďakujem za radu.
PostCC
Profil
Michal Zet:
Protože pořád to samé - na řádku 11 je místo znaku "mínus" znak s číslem 150 ve znakové sadě.

A ta kvanta kódu jsou dost odstrašující, lépe vkládat sem skutečně relevantní ukázky, obávám se, že takhle to nikdo nebude chtít studovat...
Michal Zet
Profil *
Ďakujem vám za vašu ochotu. Všetko našťastie funguje. Hrozne pekne vám ďakujem.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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