Редактиране на запис...чрез PHP

Msecurity

Registered
Здравейте отново :D нещо взе да ми става навик маиче :D
Написах си едно скриптче за новини (благодарение на вас за помоща) но когато стигнах до редактиране и изтриване на новина го окъсах... четох и четох... но нищо... и та въпроса ми ако може да ми съдеиствате по някакъв начин... независимо дали със код или със някакво обяснение как може да стане...
Ето ги и двата ми файла който съм направил:
news.php
PHP:
<?php
include("config.php");

$query = 'SELECT * FROM news';
$news=mysql_query($query) or die ('Не успяхме да ви покажем никакви новини: '. mysql_error());

echo "<H3>Новини</H3><br>";
while ($line=mysql_fetch_array($news, MYSQL_ASSOC)) {
    echo "<b>Новина <i>№ </b></i>";
    foreach ($line as $col_value) {
        echo "$col_value<br>\n";
        }
        echo "\t\n<br>";
    }
echo "\n<b>Край на емисията...</b>";

mysql_free_result($news);



?>

news-add.php
PHP:
<?php
// Връзка с базата данни
include("config.php");

// Проверка дали всички полета са попълнени
if(isset($_POST['submit'])) {
if(isset($_POST['news_title'], $_POST['news_text'], $_POST['news_author'], $_POST['news_date'])) {
$ntitle=trim($_POST['news_title']);
$ntext=trim($_POST['news_text']);
$nauthor=trim($_POST['news_author']);
$ndate=trim($_POST['news_date']);
}
else {
$ntitle="";
$ntext="";
$nauthor="";
$ndate="";
}
if (!$ntitle || !$ntext || !$nauthor || !$ndate) {
echo "Не сте попълнили всички полета";
}
else {
mysql_query("INSERT into news VALUES (NULL, '$ntitle', '$ntext', '$nauthor', '$ndate');") or die (mysql_error());
echo "Новината е добавена успешно";
}
}
else {
?>
<form method="post">
<p></p><b>Добавете новина</b><br/>
Заглавие:<br/><input type="text" name="news_title" /><br/>
Текст:<br/><textarea name="news_text" cols="30" rows="5" ></textarea><br/>
Автор:<br/><input type="text" name="news_author" /><br/>
Дата:<br/><input type="date" name="news_date" /><br/></p>
<input name="submit" type="submit" value="Добави новината" />
</form>
<?php
}
?>
 
Аз ти предлагам да направиш нова система за новини.. Ето какво трябва да направиш:
За показване на новините :
Код:
<?php 
include("config.php"); 
$kolko = 10 //Колко новини да показва
$runq = mysql_query("SELECT * FROM `news` ORDER BY id DESC LIMIT $kolko");
while($row = mysql_fetch_assoc($runq)) {

    echo '<center><h2>
'.$row['name'].'</h2></center><br />

<center>
 '.$row['new'].'
</center>
<hr>
<center><b>Публикувано на  '.$row['date'].' </center></b></a><hr>
					  ';
}
?>

За добавяне на новини(add_new.php):
Код:
<form method="post" action="">
             Заглавие<br />
            <input type="text" name="title" style="width: 505px;"><br />
			Автор<br />
            <input type="text" name="author" style="width: 160px;"> <br />			
			 <br />
            Текст<br />
            <textarea name="new" style="width: 505px; height: 220px; margin-left: 0;"> </textarea> <br /> <br />
            <input type="submit" name="addnew" value="Публикувай новината">
        </form>
   
  <?
include("config.php"); 
        if($_POST['addnew']) {
        $title = htmlspecialchars($_POST['title']);
        $author = htmlspecialchars($_POST['author']);
        $opisanie = $_POST['new'];
		$image = $_POST['image'];
        $date = date("d/F/Y");
        $sql = "INSERT INTO `news` (name, new, image, author, date) VALUES ('$title', '$opisanie', '$image', '$author', '$date')";
        $result = mysql_query($sql);
        echo "<div class='success'>Новината е добавена успешно, върнете се на началната страница: <a href='index.php'> Начало </a></div>";
        }
        ?>

За изтриване на новина (del_news.php):
Код:
<?php
include("config.php"); 
$id = (int)$_GET['id'];
$sql = "DELETE FROM `news` WHERE id='$id'";
$result=mysql_query($sql);
header("Location: index.php");
?>

За редактиране на Новина(edit_news.php):
Код:
<center>
<?php
include("config.php"); 
$id = $_GET['id'];
$author = $_GET['author'];
if(isset($_POST['submit'])){
$name = $_POST['name'];
$new = $_POST['new'];
$image = $_POST['image'];
$update = mysql_query("UPDATE news SET name='$name',new='$new',image='$image' WHERE id='$id'");
echo "<br />
Ще бъдете пренасочени към страницата с новините след 5 секунди!
   <META http-equiv='REFRESH' content='5; url=index.php'>";
}
$db = ("SELECT * FROM news WHERE id='$id'");
$results = mysql_query($db);
$row = mysql_fetch_array($results);
$name = $row['name'];
$new = $row['new'];
$author = $row['author'];
$image = $row['image'];
?>	
            <form method="post" action="">
             Заглавие<br />
            <input type="text" name="name" value='<? echo"$name"; ?>' style="width: 505px;"> <div class="hr"></div>             
			Автор<br />
            <input type="text" name="author" readonly="readonly" value='<? echo"$author"; ?>' style="width: 160px;"> <div class="hr"></div>
			Снимка<br />
			<img src="<?php echo $image;?>" border="0"><br />
            <input type="text" name="image" value='<? echo"$image"; ?>' style="width: 360px;"> <br />
            Текст<br />
            <textarea name="new" style="width: 505px; height: 220px; margin-left: 0;"><? echo"$new"; ?></textarea><br />
            <input type="submit" name="submit" value="Редактирай новината"><br>
        </form>
		

</center>

Ето и sql на "системата":
Код:
CREATE TABLE IF NOT EXISTS `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `new` text NOT NULL,
  `date` varchar(15) NOT NULL,
  `author` varchar(15) NOT NULL,
  `image` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
Мерси много, има малко грешки който ще коригирам :)
Но идеята ми не е да взема нещо готово и просто да си copy/paste кода, идеята ми е сам да се науча (което се мъча да направя) и когато видя кода да ми е ясно кое за какво служи а не да да гледам кода и да са чудя кое какво е :)
И за това помолих за малко помощ за това което съм направил до тук :)
 
Msecurity каза:
Мерси много, има малко грешки който ще коригирам :)
Но идеята ми не е да взема нещо готово и просто да си copy/paste кода, идеята ми е сам да се науча (което се мъча да направя) и когато видя кода да ми е ясно кое за какво служи а не да да гледам кода и да са чудя кое какво е :)
И за това помолих за малко помощ за това което съм направил до тук :)

Ще ти дам неколко съвета за напред.

Вместо да записваш толкова дълъг if else таг и да слагаш променливи $ntitle, $ntext ..

Ползвай т.н. inline if ( http://php.net/manual/bg/language.operators.comparison.php#language.operators.comparison.ternary )

$ntitle = (isset($_GET['news_title'])) ? trim($_GET['news_title']) : '';
Работи като

if(isset($_GET['news_title']))
{
$ntitle = trim($_GET['news_title']);
}
else
{
$ntitle = '';
}

Код:
(ако) ? ако да : ако не;

Записвай в базата данни винаги с функцията time().

$ntime = time(); вместо да се въвежда във формата.
Така ще можеш да си извеждаш времето във всякакъв формат.

Пример:

echo date('d.m.Y', $row['news_date']));

В случая кода не ти работи, заради логиката с if-а.

if (!$ntitle || !$ntext || !$nauthor || !$ndate)

Когато се извиква if, проверката става с булев тип (boolean), тоест преубразува 0, -1, -2 .. празно място '', null като false и останалите като true.

Ако $ntitle е равно на Тест.

$ntitle = 'Тест';

if($ntitle) е равно на true (като boolean, http://bg2.php.net/manual/en/language.types.boolean.php) и за това !$ntitle ще го обърне в false и за това не продължава кода.

За целта ползвай strlen или за кирилица mb_strlen.

Пример:

if(strlen($ntitle))
{
// има заглавие
}
else
{
// Няма заглавие.
}

Ако няма заглавие strlen ще върне 0, тя проверява колко символа има във текста и ако няма => 0, което е false.

Като съвет ще ти дам да гледаш да пишеш максимално чист и подреден код, да започнеш да четеш от http://php.net/manual/bg , започваш страниците една след друга и гледаш на разучиш логиката на php и като станеш много добър почваш да учиш и OOP. :)
 
@alex3 Мерси много за съветите. Още от утре започвам да чета :)
+1 за помоща а пък да видим какво ще се получи накрая :D
 

Back
Горе