2017-10-09 17 views
-1

Wie kann ich diesen Code vereinfachen, um die Notwendigkeit zu vermeiden, den gleichen Code für die 3 verschiedenen Werte zu reproduzieren? Im aktuellen Code analysiere ich zum Beispiel die drei URL-Adressen, um sicherzustellen, dass sie an das richtige Ziel weitergeleitet werden, sodass die Leute nicht verschiedene verrückte URL-Adressen einrichten. Aber in Zukunft könnte ich auf mehr Social-Media-URLs erweitern und es wäre mühsam, den Code immer wieder zu wiederholen. Vielen Dank für Ihre Zeit!PHP simplyfy Code

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

Versuchen Sie, eine Funktion zu erstellen, und übergeben Sie dann die URL-Adressen als Parameter. Wann immer Sie die URL-Adressen analysieren müssen, müssen Sie nur die Funktion aufrufen. – Jixone

Antwort

1

Verwenden Schleife, zum Beispiel foreach:

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'); 
    } 
} 

Regulärer Ausdruck statt vielen Bedingungen:

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

Beste Lösung :) Sie haben vergessen, $ link wie in $ link = $ _POST [$ key] zu definieren; Der normale Zustand schmerzt meine Augen tho, aber ist auch eine gute Wahl: D – user1286956

+0

Strtolower wird auch veraltet, da die URLs mit denen in der Liste übereinstimmen müssen, und im Falle von Youtube, die Link-Stämme Groß-und Kleinschreibung! So löst das Entfernen beide Situationen. – user1286956

1

Sie könnten mit parse_url vereinfachen und Loops zu handhaben Arrays:

$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

Elegante Wahl^_ ^ – user1286956