Редактиране на новини

pro12

Registered
Това ми е кода.
PHP:
<?php
include ('conf.php');

$id = (int)$_GET['id'];
if(isset($_POST['submit'])){
$ime = $_POST['ime'];
$ime = htmlspecialchars($ime);
$info = $_POST['info'];
$info = htmlspecialchars($info); 
$nowina = $_POST['nowina'];
$tmp_name = $_FILES['plugin']['tmp_name'];
$filename = $_FILES['plugin']['name'];
$format = end(explode(".", $filename));
$size=$_FILES['program']['size'];
if($format != "jpg" && $format != "JPG" && $format != "png") {
echo "Формата, който сте избрали е непозволен!";
exit;
}
elseif ($size> 500000) {
    echo "Sorry, your file is too large.";
    exit;
}
if($ime== NULL){  
echo "Попълнете име"; 
exit; 
} 
elseif($info== NULL){  
echo "Попълнете Кратко описание"; 
exit; 
} 
elseif($nowina==NULL){ 
echo "Попълнете новина"; 
exit; 
} 
$img= 'upload/'.$filename.'';
move_uploaded_file($tmp_name, $img);
$sql = ("UPDATE `news` SET name='$name',info='$info',new='$new', img='$img' WHERE id='$id'");
if (mysqli_query($conn, $sql)) {
echo "<br />
Ще бъдете пренасочени към страницата с новините след 5 секунди!
   <META http-equiv='REFRESH' content='5; url=index.php'>";
   } else {
    echo "Error updating record: " . mysqli_error($conn);
}
}
$db = ("SELECT * FROM `news` WHERE id='$id'");
$result = mysqli_query($conn, $db);
$row = mysqli_fetch_array($result);
$ime = $row['name'];
$info = $row['info'];

$nowina = $row['new'];
mysqli_close($conn);

?>
Как да направя така, че когато снимката няма да се променя да прескача проверките за снимка?
 
Като гледам кода ти първо ми обясни какво искаш да правиш и на база какво и съм убеден, че ще го драснем много по-добре като логика. В момента ти куца много логиката. На база на коя променлива трябва да променяш снимката? Ако в полето снимката я имаш вече ли какво? Не си дал никакво обяснениу.
 
Значи имам записана снимка, име, новина и инфо. И ако искам да редактирам примерно новината без друго. Но сега ми излиза това“Формата, който сте избрали е непозволен“ ако не съм избрал снимка. Разбра ли ме сега?
 
pro12 каза:
Значи имам записана снимка, име, новина и инфо. И ако искам да редактирам примерно новината без друго. Но сега ми излиза това“Формата, който сте избрали е непозволен“ ако не съм избрал снимка. Разбра ли ме сега?

Нещо такова ли ?
PHP:
<?php
include ('conf.php');

$id = (int)$_GET['id'];
if(isset($_POST['submit'])){
	$ime = htmlspecialchars($_POST['ime']);
	$info = htmlspecialchars($_POST['info']);
	$nowina = $_POST['nowina'];
	$tmp_name = $_FILES['plugin']['tmp_name'];
	$filename = $_FILES['plugin']['name'];
	$format = end(explode(".", $filename));
	$size = $_FILES['program']['size'];
	
	$error = 0;
	$errString = '';
	
	if ($_FILES) {
		if ($format != "jpg" && $format != "JPG" && $format != "png") {
			$errString .= "<br>Формата, който сте избрали е непозволен!";
			$error++;
		}
		if ($size> 500000) {
			$errString .= "<br>Sorry, your file is too large.";
			$error++;
		}
	}
	if ($ime== NULL) {  
		$errString .= "<br>Попълнете име"; 
		$error++;
	} 
	 if ($info== NULL) {  
		$errString .= "<br>Попълнете Кратко описание"; 
		$error++; 
	} 
	if ($nowina==NULL) { 
		$errString .= "<br>Попълнете новина"; 
		$error++; 
	} 
	if ($error == 0) {
		if ($_FILES) {
			$img= 'upload/'.$filename.'';
			move_uploaded_file($tmp_name, $img);
			$sql = ("UPDATE `news` SET name='$name',info='$info',new='$new', img='$img' WHERE id='$id'");
		} else {
			$sql = ("UPDATE `news` SET name='$name',info='$info',new='$new' WHERE id='$id'");
		}
		if (mysqli_query($conn, $sql)) {
			echo "<br />
			Ще бъдете пренасочени към страницата с новините след 5 секунди!
			<META http-equiv='REFRESH' content='5; url=index.php'>";
		} else {
			echo "Error updating record: " . mysqli_error($conn);
		}
	} else {
		print $errString;
	}
}
$db = ("SELECT * FROM `news` WHERE id='$id'");
$result = mysqli_query($conn, $db);
$row = mysqli_fetch_array($result);
$ime = $row['name'];
$info = $row['info'];

$nowina = $row['new'];
mysqli_close($conn);

?>
 
Ако редактирам и снимката няма проблем, но ако редактирам само заглавието не става. Излиза това Формата, който сте избрали е непозволен!
 
Как мога да прескоча проверките за големина и формат на снимката? Ако не се налага промяна на снимката. Тоест ако не съм избрал снимка да прескача проверките за снимка.
 
pro12 каза:
Как мога да прескоча проверките за големина и формат на снимката? Ако не се налага промяна на снимката. Тоест ако не съм избрал снимка да прескача проверките за снимка.
PHP:
<?php
include ('conf.php');

$id = (int)$_GET['id'];
if(isset($_POST['submit'])){
        $ime = htmlspecialchars($_POST['ime']);
        $info = htmlspecialchars($_POST['info']);
        $nowina = $_POST['nowina'];
        $tmp_name = $_FILES['plugin']['tmp_name'];
        $filename = $_FILES['plugin']['name'];
        $format = end(explode(".", $filename));
        $size = $_FILES['program']['size'];
        
        $error = 0;
        $errString = '';
        
        if (!$_FILES) {
                if ($format != "jpg" && $format != "JPG" && $format != "png") {
                        $errString .= "<br>Формата, който сте избрали е непозволен!";
                        $error++;
                }
                if ($size> 500000) {
                        $errString .= "<br>Sorry, your file is too large.";
                        $error++;
                }
        }
        if ($ime== NULL) {  
                $errString .= "<br>Попълнете име"; 
                $error++;
        } 
         if ($info== NULL) {  
                $errString .= "<br>Попълнете Кратко описание"; 
                $error++; 
        } 
        if ($nowina==NULL) { 
                $errString .= "<br>Попълнете новина"; 
                $error++; 
        } 
        if ($error == 0) {
                if (!$_FILES) {
                        $img= 'upload/'.$filename.'';
                        move_uploaded_file($tmp_name, $img);
                        $sql = ("UPDATE `news` SET name='$name',info='$info',new='$new', img='$img' WHERE id='$id'");
                } else {
                        $sql = ("UPDATE `news` SET name='$name',info='$info',new='$new' WHERE id='$id'");
                }
                if (mysqli_query($conn, $sql)) {
                        echo "<br />
                        Ще бъдете пренасочени към страницата с новините след 5 секунди!
                        <META http-equiv='REFRESH' content='5; url=index.php'>";
                } else {
                        echo "Error updating record: " . mysqli_error($conn);
                }
        } else {
                print $errString;
        }
}
$db = ("SELECT * FROM `news` WHERE id='$id'");
$result = mysqli_query($conn, $db);
$row = mysqli_fetch_array($result);
$ime = $row['name'];
$info = $row['info'];

$nowina = $row['new'];
mysqli_close($conn);

?>
 
pro12 каза:
Сега става. Но ако искам да промена снимката нищо не се полючава.
Добре де, защо не си направиш две различни форми? Тук като цяло логиката ти куца. Провери кои проверки ти изкарва, кое точно не става. В момента се проверява. Най-лесно е да си направиш две форми.
 
Ето ти елементарен пример как трябва да го направиш за да се получи това което искаш. На мястото на echo-то слагаш заявка към базата данни, като всяка заявка трябва да ъпдейтва само съответното поле. Например за името ще е така UPDATE `news` SET name='$_POST['ime']' и т.н. Още по-просто ще обясня. В първия иф аз казвам: ако е натиснат бутона субмит направи проверките. Вътре в ифа проверявам, ако полето с име file НЕ Е празно, ъпдейтни базата и вкарай новия файл. После ако полето с име ime не е празно ъпдейтни базата и вкарай новото име и т.н. Един вид колкото полета избереш, толкова ще ъпдейтне. Ако не избереш нито едно поле нищо няма да ъпдейтне. Надявам се че схващаш логиката. Всяко поле трябва да има заявка към базата само за него за да работи. Вече ти във всеки от тези ифове можеш да си правиш допълнителни проверки, за формат за дължина и за каквото искаш.

Код:
<form method="post" enctype="multipart/form-data">
                <input type="file" name="file" /><br><br>
                <input type="text" name="ime" /><br><br>
                <input type="text" name="opisanie" /><br><br>
                <textarea name="novina"></textarea><br><br>
                <input type="submit" name="submit" value="submit" />
            </form>

            <?php
            if (isset($_POST['submit'])) {

                if ($_FILES['file']['tmp_name'] != null) {
                    echo 'vkarvame FAILA v bazata danni <br>';
                }

                if ($_POST['ime'] != null) {
                    echo 'vkarvame IMETO v bazata danni <br>';
                }
                
                if ($_POST['opisanie'] != null) {
                    echo 'vkarvame OPISANIETO v bazata danni <br>';
                }
                
                if ($_POST['novina'] != null) {
                    echo 'vkarvame NOVINATA v bazata danni <br>';
                }
            }
            ?>
 
Друг начин, който аз използвам е да зареждам информацията в полето директно, когато отворя формата и после ъпдейтвам само полетата, които са променени..

Иначе казано, когато събмитвам формата ако поле 'Име' примерно не е променени то си остава същото.. ако е променено-записва се новото в таблицата.
 
Да обаче на полета от тип file не можеш да им зададеш value, а и е ненужно да презаписваш нещо ако няма да се променя.
 
teroristd каза:
Да обаче на полета от тип file не можеш да им зададеш value, а и е ненужно да презаписваш нещо ако няма да се променя.

За снимката просто проверявам ако няма събмитната снимка изпълнявам заявка без ъпдейт на снимката...
Код:
if ($fileName != null && $fileName != '')
 {
             // ъпдейт със снимка
 }
else
{
            //ъпдейт без снимка
 				   
}
 

Back
Горе