2017-10-09 25 views
-1

3 개의 다른 값에 대해 동일한 코드를 재현해야하는 필요를 피하기 위해이 코드를 어떻게 단순화 할 수 있습니까? 예를 들어, 현재 코드에서 3 개의 URL 주소를 구문 분석하여 올바른 목적지로 연결되도록하여 사람들이 다양한 미친 URL 주소를 설정하지 않도록합니다. 하지만 앞으로는 더 많은 소셜 미디어 URL로 확장 될 것이며 코드를 반복해서 반복하는 것이 지루할 것입니다. 시간 내 줘서 고마워! 예를 foreach에 대한PHP 간단 코드

if(isset($_POST['submit'])){ 

$facebook = strtolower($_POST['facebook']); 
$twitter = strtolower($_POST['twitter']); 
$youtube = strtolower($_POST['youtube']); 



$fb_exp = explode("facebook.com", $facebook); 
$tw_exp = explode("twitter.com", $twitter); 
$yt_exp = explode("youtube.com", $youtube); 



if(($fb_exp[0] == 'http://' || $fb_exp[0] == 'http://www.' || $fb_exp[0] == 'https://' || $fb_exp[0] == 'https://www.' || $fb_exp[0] == '') && $facebook != ''){ 

    $facebook = 'https://www.facebook.com'.$fb_exp[1]; 

    $fb = 1; 

}elseif($facebook == ''){ 

    $facebook = ''; 

    $fb = 1; 

}else{ 

    echo 'Not a Valid Facebook Page !'; 

} 



if(($tw_exp[0] == 'http://' || $tw_exp[0] == 'http://www.' || $tw_exp[0] == 'https://' || $tw_exp[0] == 'https://www.' || $tw_exp[0] == '') && $twitter != ''){ 

    $twitter = 'https://www.twitter.com'.$tw_exp[1]; 

    $tw = 1; 

}elseif($twitter == ''){ 

    $twitter = ''; 

    $tw = 1; 

}else{ 

    echo 'Not a Valid Twutter Page !'; 

} 



if(($yt_exp[0] == 'http://' || $yt_exp[0] == 'http://www.' || $yt_exp[0] == 'https://' || $yt_exp[0] == 'https://www.' || $yt_exp[0] == '') && $youtube != ''){ 

    $youtube = 'https://www.youtube.com'.$yt_exp[1]; 

    $yt = 1; 

}elseif($youtube == ''){ 

    $youtube = ''; 

    $yt = 1; 

}else{ 

    echo 'Not a Valid YouTube Page !'; 

} 



if($fb == 1 && $tw == 1 && $yt == 1){ 

    $text= '<?php $title="'.$_POST['title'].'"; 
      $subtitle="'.$_POST['subtitle'].'"; 
      $email="'.$_POST['email'].'"; 
      $tel="'.$_POST['tel'].'"; 
      $add="'.$_POST['add'].'"; 
      $facebook="'.$facebook.'"; 
      $twitter="'.$twitter.'"; 
      $youtube="'.$youtube.'"; 
      '; 
    $fp = fopen('text.ini','w'); 
    fwrite($fp,$text); 
    fclose($fp); 
    header('Location: http://somesite.com/index.php'); 

} 

}

+1

함수를 작성한 다음 url 주소를 매개 변수로 전달하십시오. 따라서 url 주소를 파싱 할 필요가있을 때마다 함수를 호출하면됩니다. – Jixone

답변

1

사용 루프 : 대신 많은 조건의

if(isset($_POST['submit'])){ 
    $valid = true; 
    $links = []; 
    $list = ['facebook' => 'facebook.com', 'twitter' => 'twitter.com', 'youtube' => 'youtube.com']; 
    foreach($list as $key => $domain) { 
    if(isset($_POST[$key])) { 
     $exp = explode($domain, strtolower($link)); 
     if($link != '' && ($exp[0] == 'http://' || $exp[0] == 'http://www.' || $exp[0] == 'https://' || $exp[0] == 'https://www.' || $exp[0] == '')){ 
      $links[$key] = 'https://www.'.$domain.$exp[1]; 
     }elseif($link == ''){ 
      $links[$key] = ''; 
     }else{ 
     echo 'Not a Valid '.ucfirst($key).' Page !'; 
     $valid = false; 
     } 
    } 
    } 

    if($valid) { 
    $text = '<?php $title="'.$_POST['title'].'"; 
      $subtitle="'.$_POST['subtitle'].'"; 
      $email="'.$_POST['email'].'"; 
      $tel="'.$_POST['tel'].'"; 
      $add="'.$_POST['add'].'"; 
      $facebook="'.$links['facebook'].'"; 
      $twitter="'.$links['twitter'].'"; 
      $youtube="'.$links['youtube'].'"; 
      '; 
    $fp = fopen('text.ini','w'); 
    fwrite($fp,$text); 
    fclose($fp); 
    header('Location: http://somesite.com/index.php'); 
    } 
} 

정규 표현식은 :

foreach($list as $key => $domain) { 
    if(isset($_POST[$key]) && preg_match('#^(?:https?://(?:www\.)?)?('.$domain.'.*)$#i', strtolower($_POST[$key]), $matches)) { 
    $links[$key] = 'https://www.' . $matches[1]; 
    } else { 
    echo 'Not a Valid '.ucfirst($key).' Page !'; 
    $valid = false; 
    } 
} 
+0

가장 좋은 해결책 :) $ link = $ _POST [$ key];에서 $ link를 정의하는 것을 잊었습니다. 정규 조건은 내 눈을 아프게하지만 좋은 선택입니다. D – user1286956

+0

또한 strtolower는 URL이 목록의 항목과 일치해야하므로 쓸모 없게됩니다. youtube의 경우 링크 유형은 대소 문자를 구분합니다! 따라서 제거하면 두 가지 상황이 모두 해결됩니다. – user1286956

1

당신이 처리하는 루프를 사용하여 parse_url으로 단순화 할 수 배열 :

$smPass = 0; 
$correctUrls = array('facebook'=>'https://www.facebook.com','twitter'=>'https://www.twitter.com','youtube'=>'https://www.youtube.com'); 
$output = array('facebook'=>'','twitter'=>'','youtube'=>''); 
foreach($_POST as $social=>$value){ 

    if(in_array($social, array_keys($correctUrls))) { 

     if(empty($value)){ 
      $smPass += 1; 
     } 
     else { 

      if($urlParts = parse_url($value)) { 

       if(in_array($urlParts['host'], array_keys($correctUrls))) { 
        $output[$social] = $correctUrls[$social].$urlParts['path'].'?'.$urlParts['query']; 
        $smPass += 1; 
       } 
       else { 
        echo 'Invalid '.$social; 
       } 
      } 
      else { 
       echo 'Invalid '.$social; 
      } 
     } 

    } 

} 
if($smPass == 3){ 

    $text= '<?php $title="'.$_POST['title'].'"; 
      $subtitle="'.$_POST['subtitle'].'"; 
      $email="'.$_POST['email'].'"; 
      $tel="'.$_POST['tel'].'"; 
      $add="'.$_POST['add'].'"; 
      $facebook="'.$output['facebook'].'"; 
      $twitter="'.$output['twitter'].'"; 
      $youtube="'.$output['youtube'].'"; 
      '; 
    $fp = fopen('text.ini','w'); 
    fwrite($fp,$text); 
    fclose($fp); 
    header('Location: http://somesite.com/index.php'); 

} 
+0

우아한 선택^_ ^ – user1286956