Проблем с if / elseif / else

fbian

Registered
Значи пиша си един администраторски панел,който да ползвам в моите проекти.Кода,който ще дам по-долу,показва примерната структура на проверките ми,при редактиране на новините.Написах го така,за да е по-лесно да ми помогнете евентуално.Идеята е да видите само структурата на проверките,без другите действия.
PHP:
$title = "asd";
$img = "asd.jpg";
$size = 1000;
$exist = "n";
$content = "asd";
$intro = "asd";
if($title == "") {
        echo "No title";
}
elseif($content == "") {
	echo "No content";
}
elseif($intro == "") {
	echo "No intro";
}
elseif($img == "") { 
        echo "No image"; 
}
elseif(isset($img) && ($img !== "")) {
	if($size > 2000) {
		echo "Problem size";
	}
	elseif(substr($img,4,7) !== "png") {
		echo "Problem format";
	}
	elseif($exist == "y") {
		echo "Problem exist";
	}
	else {
		$update = true;
		$upload = true;
	}
}
else {
	$update = true;
}
if(($update) || ($update && $upload)) {
	echo "Success";
}
else {
	echo "Problem";
}
И сега идеята е следната:
Ако съм избрал изображение,то се качва и новината се обновява.Ако пък не съм избрал,новината само се обновява.И проблема е следния - когато избера изображение и натисна бутона за обновяване,ако не е изпълнено едно от условията,хем ми дава грешката(примерно - непозволен формат),но изпълнява кода и надолу и ми дава и грешката - Problem(Тази грешка искам да се показвам само,ако не се е случило обновяването или качването и обновяването).Искам,когато има проблем с изображението да ми изписва само грешката,какъв е той,без нещата надолу.
Надявам се,че сте ме разбрали.Не ме бива да обяснявам много,много.
Ако нещо не е ясно - питайте.
 
За да спираш изпълнението на кода при грешка трябва да слагаш exit() die() или дрги функции дето спират изпълнение но в този случеи ако направиш така си трошиш кода от там от кадето е активирана грепката затова вместо echo приобщаваме съобщението за грешка към една променнлива $error например. Там където кода извършва някъкво действие SELECT INSERT UPDATE правим проверка, ако броя на $error е равен на нула продължаваме ако ли не значи имаме някаде активиран $error и нама да продължим с изпълнение на кода.

И след това там кадето искаш да ти се изписват грешките извеждаш стойноста на $error

PHP:
if (isset($error)){
   echo $error
}

Долу съм дал пример но мисля че ще схванеш идеята.

PHP:
$title = "asd";
$img = "asd.jpg";
$size = 1000;
$exist = "n";
$content = "asd";
$intro = "asd";
if($title == "") {
        $error = "No title";
}
elseif($content == "") {
        $error = "No content";
}
elseif($intro == "") {
        $error = "No intro";
}
elseif($img == "") { 
       $error = "No image"; 
}
elseif(isset($img) && ($img !== "")) {
        if($size > 2000) {
                $error = "Problem size";
        }
        elseif(substr($img,4,7) !== "png") {
               $error = "Problem format";
        }
        elseif($exist == "y") {
                $error = "Problem exist";
        }
        else {
          if (count($error) == 0)
                $update = true;
                $upload = true;
              )
        }
}
else {
        $update = true;
}
if(($update) || ($update && $upload)) {
        echo "Success";
}
else {
        echo "Problem";
}

if (isset($error)){
   echo $error
}
 
Моят код е точно така.Извинявам се,че съм пропуснал да го покажа.
Значи ако някое условие не е изпълнено сетвам променливата:
Пример:
PHP:
if($content == "") {
 $err = error("Problem");
}
error() - това е моя функция,която "облича" грешката в един див с class и най-отдолу или където искам показвам променлива $err с echo:
PHP:
function error($msg) {
	return "<div class='err'>$msg</div>";
}
И въпреки всичко отново ми дава 2-ре грешки едновременно.Някакви други идеи?
 
PHP:
$title = "asd";
$img = "asd.jpg";
$size = 1000;
$exist = "n";
$content = "asd";
$intro = "asd";
if($title == "") {
        echo "No title";
}
if($content == "") {
	echo "No content";
}
if($intro == "") {
	echo "No intro";
}
if($img == "") { 
        echo "No image"; 
}
if(isset($img) && ($img !== "")) {
	if($size > 2000) {
		echo "Problem size";
	}
	if(substr($img,4,7) !== "png") {
		echo "Problem format";
	}
	if($exist == "y") {
		echo "Problem exist";
	}
	else {
		$update = true;
		$upload = true;
	}
}
else {
	$update = true;
}
if(isSet($update) || (isSet($update) && isSet($upload))) {
	echo "Success";
}
else {
	echo "Problem";
}
 
Това също не работи.Така ще се показват да речем по 2 грешки наведнъж,ако 2 условия не са изпълнени.И другото - струва ми се,че не е вярно откъм логика.Обновяването и качването на изображението ще се изпълнят само,ако последното условие при проверката на изображението е вярно.Извинявам се,ако греша за второто ми твърдение.
Моля за още идеи / предложения.
 
fbian каза:
Това също не работи.Така ще се показват да речем по 2 грешки наведнъж,ако 2 условия не са изпълнени.И другото - струва ми се,че не е вярно откъм логика.Обновяването и качването на изображението ще се изпълнят само,ако последното условие при проверката на изображението е вярно.Извинявам се,ако греша за второто ми твърдение.
Моля за още идеи / предложения.
Замени тази част така и пробвай дали ще се получи :

PHP:
if(($update) || ($update && $upload)) {
	echo "Success";
}
else if(($update == false) || ($update == false && $upload == false))
{
	echo "Problem";
}
 
PHP:
$title = "asd";
$img = "asd.jpg";
$size = 1000;
$exist = "n";
$content = "asd";
$intro = "asd";
if($title == "") {
        echo "No title";
}
else if($content == "") {
	echo "No content";
}
else if($intro == "") {
	echo "No intro";
}
else if($img == "") { 
        echo "No image"; 
}
else if(isset($img) && ($img !== "")) {
	if($size > 2000) {
		echo "Problem size";
	}
	else if(substr($img,4,7) !== "png") {
		echo "Problem format";
	}
	else if($exist == "y") {
		echo "Problem exist";
	}
	else {
		$update = true;
		$upload = true;
		if($update && $upload) {
			echo "Success";
		}
		else 
		{
			echo "Problem";
		}
	}
}
else {
	$update = true;
	if($update) {
		echo "Success";
	}
	else 
	{
		echo "Problem";
	}
}
 

Back
Горе