SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Проблем с елементарен код на php

borisov87

New member
Привет имам базови познания по php, реших да си направя сам една елементарна система за новини общо взето за да си тествам познанията.
ОБщо взето това е кода на страницата от която ще се добавят новини
Създал съм таблиците с този файл cmstables.php
PHP:
<?php
require_once 'conn.php';

$sql = <<<EOS
CREATE TABLE IF NOT EXISTS news (
  id int(11) NOT NULL auto_increment,
  title varchar(255) NOT NULL default '',
  date datetime NOT NULL default '0000-00-00 00:00:00',
  body mediumtext NOT NULL,
  PRIMARY KEY (id)
)
EOS;
$result = mysql_query($sql) 
  or die(mysql_error());

echo "<html><head><title>Database sucess created!</title></head><body>Database sucess created!</body></html>";
?>
    ?>

Това е файла чрез който искам да добавя новини compose.php
PHP:
<!DOCTYPE html>
<?php require_once 'conn.php'; ?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Система за новини</title>
</head>
<body>
<form action="compose.php" method="POST">
Заглавие:<br />
<input size="50" maxlength="60" type="text" name="title"><br />
 
Съдържание:<br />
<textarea name="body" cols="40" rows="10"> </textarea> <br />
    <input type="Submit" name="submit" value="Добави">
</form>
</body>
<?php
 if (strlen(trim($_POST['title']))>5 and strlen(trim($_POST['body']))>5)           
     {
$date=date("Y-m-d H:i:s");



    $query = "INSERT INTO news (title, body, date) VALUES($_POST[title], $_POST[body], $date)";
        $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());

 
        }
 else {
            echo 'Моля попълнете всички полета, дължината и името на статията трябва да са поне 6 символа.';
 }
    ?>
след като попълня полетата за title и body и щракна на бутона добави браузъра връща следната грешка
"Error in query: INSERT INTO news (title, body, date) VALUES(novina 1 , sudurjanie na novina, 2012-09-08 21:46:09). 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 '1 , sudurjanie na novina, 2012-09-08 21:46:09)' at line 1"
прегледах няколко пъти кода, но не мога да си открия сам грешката моля някой да помогне.
 
За: Проблем с елементарен код на php

За: Проблем с елементарен код на php

PHP:
$query = "INSERT INTO news (title, body, date) VALUES('$_POST[title]', '$_POST[body]', '$date')";
Ето така би трябвало да няма проблем, където е съдържанието трябва да имат апостроф " ' "
 
Re: Проблем с елементарен код на php

Направих си по елементарен начин стрраници за изтриване и преглед. Затрудних се със страницата за редактиране. Страницата получава 'id' на новината чрез GET, изтегля във формуляра текущите стойности на Title и Body на новината, но след като ги редактирам и дам обнови, те си остават същите. Ето и кода на тази страница
edit.php
PHP:
<?php require_once 'header.php';
if (!isset($_GET[id]))
{
    header('Location: index.php');
}
    else
{
 
    // изпълнява query
    $query = "SELECT * FROM news WHERE id = '$_GET[id]'";
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    
    // ако е извикан резултат
    if (mysql_num_rows($result) > 0)
    {
        // преобразуваме в обект
        $send = mysql_fetch_object($result);
?>
 
Edit News Post
<form action="edit.php" method="POST">
<input type="hidden" name="id" value="<?php echo htmlspecialchars($send->id) ?>">
Заглавие:<br />
<input size="50" maxlength="250" type="text" name="title" value="<?php echo htmlspecialchars($send->title) ?>"><br />
Съдържание:<br />
<textarea name="content" cols="40" rows="10"><?php echo htmlspecialchars($send->body) ?></textarea><br />
 <input type="Submit" name="submit" value="Обнови">
</form>
 
<?php
if (strlen(trim($_POST['title']))>5 and strlen(trim($_POST['body']))>5) 
        // изпълнява query
        $query = "UPDATE news SET title = '$_POST[title]', body = '$_POST[body]', WHERE id = '$_GET[id]";
        $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
 
        // принтира резултатите
        echo '<font size=-1>Update successful. <a href=index.php>Go back to the main menu</a></font>';
    }
    else
{
        echo 'Моля попълнете всички полета, името на статията и нейното съдържание трябва да са поне 6 символа.';
    }

}
require_once 'footer.php';
?>
 
За: Проблем с елементарен код на php

За: Проблем с елементарен код на php

PHP:
$query = "UPDATE news SET title = '$_POST[title]', body = '$_POST[body]' WHERE id = '$_GET[id]";

Преди WHERE не трябва да има запетая :)
 
Re: За: Проблем с елементарен код на php

Re: За: Проблем с елементарен код на php

PHP:
$query = "UPDATE news SET title = '$_POST[title]', body = '$_POST[body]' WHERE id = '$_GET[id]";

Преди WHERE не трябва да има запетая :)
Оправих го това но проблема продължава, променям статията и след като дам обнови тя остава същата.
 
Re: Проблем с елементарен код на php

Новак съм и нямам много знания мерси за инфото, по нататък ще попрочета и за сигурноста, няма проблем кода няма да се използва на реален сайт, засега просто се упражнявам, но още не мога да оправя този проблем, с редактирането на статия, променям всичко и като дам обнови данните са същите :D
 
Re: Проблем с елементарен код на php

бях пропуснал след '$_GET[id] , единичната кавичка , оправх това но проблема продължава, променям новината и след като дам обнови няма промяна, ще се радва ако нкой помогне за проблема , тъкмо и аз да знам за напред ;p
 
За: Проблем с елементарен код на php

За: Проблем с елементарен код на php

Хммм логиката бяга по диагонала.
Има и по - дълго обяснение, но като за начало я пробвай следното:
Този код <form action="edit.php" method="POST"> го замени с този
<form action="edit.php?id=<?php echo $_GET['id']; ?>" method="POST">
и кажи какво става.
 
Re: За: Проблем с елементарен код на php

Re: За: Проблем с елементарен код на php

Хммм логиката бяга по диагонала.
Има и по - дълго обяснение, но като за начало я пробвай следното:
Този код <form action="edit.php" method="POST"> го замени с този
<form action="edit.php?id=<?php echo $_GET['id']; ?>" method="POST">
и кажи какво става.

Само да допълня, че така ще се получи дупка за XSS атака. Не особено голяма, но достатъчна за малки мизерии.
 
За: Re: За: Проблем с елементарен код на php

За: Re: За: Проблем с елементарен код на php

Само да допълня, че така ще се получи дупка за XSS атака. Не особено голяма, но достатъчна за малки мизерии.

Съгласен - ама баш голяма беля може да стане :)
На първо време да го подкарваме и после ще secure-ваме :)
 
Re: Проблем с елементарен код на php

отпечатай генерираната заявка преди изпълнението и виж какво се получава, после копирай отпечатаното и го изпълни направо през PHPMyAdmin или го пусни тук, за да видим какво точно се случва
 

Горе