2016-09-13 13 views
1

私はリダイレクト先のサイトをドロップダウンメニュー&から選択してからリダイレクトするためのボタンをクリックしました。phpフォームhtmlボタン

私は自分のパソコンにウイルスがありますが、&は古いバックアップから復元されています。ショートストーリー;ここでのサイトはもはや機能しますが..コードです:

HTML:

<form method="post" name="form1" id="form1" action="process.php"> 
     <select name="taskOption" id="taskOption2"> 
     <option value="Select">Please select a site</option> 
     <option value="http://www.Itslearning.com">Itslearning</option> 
     <option value="http://www.NDLA.no">NDLA</option> 
     </select> 
    </form> 

    <button onclick="FormSubmit()" class="button button1 button1:hover">Take me there</button> 

PHP:

<?php 
$taskOption $_POST["taskOption"]; 
if ($taskOption) { 
    header("Location: $taskOption"); 

} 
else { 
    echo "Venligst velg en side."; 
    exit; 
} 



?> 

JAVASCRIPT:

function FormSubmit() { 
document.form1.submit(); 
} 
+0

この特定のサービスを悪用するのはかなり簡単です。残念ながら、何千もの悪意のある偽のリクエストの起点となる可能性があります。 selectメニューで使用しているURLがdbのものである場合、実際のURLではなく、URLを示す一意のidまたはハッシュが良いでしょう(id/hashが 'process.php'で確認され、正しいURL) – RamRaider

+0

どうしたら起こるかわからないけど、これは学校のプロジェクトのためだけだから、だれかがそれを虐待するのではないかと疑っています..私に教えてくれてありがとうございます:)そして、どういうわけか、 – MartinTheNob

+0

投稿したデータ( '$ _POST')が最初に設定されていることを確認してから、特定の値に合っているかどうかを確認することができます。 –

答えて

1

まず第一には、「あなたのように見えますあなたのPHPに代入演算子(=)がありません。

それは次のようになります。

<?php 
$taskOption = $_POST["taskOption"]; 
if ($taskOption) { 
    header("Location: $taskOption"); 

} 
else { 
    echo "Venligst velg en side."; 
    exit; 
} 

?> 
+0

これは解決したようです:DIは今はとても愚かですが、あなた:) – MartinTheNob

+0

心配しないでください。このような小さな構文エラーが強調表示されるように、コードエディタでリンターを設定したいかもしれません:) – IainChambers

+0

これは "linter"を追加してください。どのようなテキストエディタをお勧めしますか?私は現在 "Atom"を使用しています。 – MartinTheNob

2

表示されるエラーとは何ですか?

<?php 
$taskOption = $_POST["taskOption"]; 
if ($taskOption) { 
    header("Location: $taskOption"); 
} else { 
    echo "Venligst velg en side."; 
    exit; 
} 
?> 

2行目に「=」があることに注意してください。

+0

"="を使ってテストしましたが、うまくいきました:)エラーは "sitename"があなたの要求を処理できない "ありがとう:) – MartinTheNob

1
Simple table to store urls: 

create table `urls` (
    `id` int(10) unsigned not null auto_increment, 
    `url` varchar(255) not null default '0', 
    `hash` varchar(16) not null default '0', 
    `hits` smallint(5) unsigned not null default '0', 
    primary key (`id`), 
    unique index `hash` (`hash`) 
) 
engine=innodb; 



Gives this structure: 

+-------+----------------------+------+-----+---------+----------------+ 
| Field | Type     | Null | Key | Default | Extra   | 
+-------+----------------------+------+-----+---------+----------------+ 
| id | int(10) unsigned  | NO | PRI | NULL | auto_increment | 
| url | varchar(255)   | NO |  | 0  |    | 
| hash | varchar(16)   | NO | UNI | 0  |    | 
| hits | smallint(5) unsigned | NO |  | 0  |    | 
+-------+----------------------+------+-----+---------+----------------+ 



Populated with dummy urls & unique hashes: 

+----+--------------------------------+------------------+------+ 
| id | url       | hash    | hits | 
+----+--------------------------------+------------------+------+ 
| 1 | http://www.example.com/page/1 | 53abc566010de29a | 45 | 
| 2 | http://www.example.com/page/2 | 8664d7fca34963d2 | 83 | 
| 3 | http://www.example.com/page/3 | fe06dca79d3d0415 | 49 | 
| 4 | http://www.example.com/page/4 | 3913aaaef701ecad | 35 | 
| 5 | http://www.example.com/page/5 | eb2eddc3ca2406c3 | 93 | 
| 6 | http://www.example.com/page/6 | acc809b96c6a42d9 | 50 | 
| 7 | http://www.example.com/page/7 | 63a4e53b1b374fcb | 90 | 
| 8 | http://www.example.com/page/8 | d9c13a146fc7c69a | 18 | 
| 9 | http://www.example.com/page/9 | eaa944c7e9a4ef7c | 76 | 
| 10 | http://www.example.com/page/10 | 59f9d294a29601c9 | 13 | 
+----+--------------------------------+------------------+------+ 



In the php page that displays the menu for the user to choose from 

<?php 

    $dbhost = 'localhost'; 
    $dbuser = 'xxx'; 
    $dbpwd = 'xxx'; 
    $dbname = 'xxx'; 
    $db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname); 

    $sql='select * from `urls` order by `id`;'; 
    $result=$db->query($sql); 

    if($result){ 

     $html=array(); 
     $html[]="<form name='launcher' method='post' action='process.php'>"; 
     $html[]="<select name='taskOption'>"; 

     while($rs=$result->fetch_object()){ 
      $html[]="<option value='{$rs->hash}'>{$rs->url}"; 
     } 

     $result->close(); 
     $db->close(); 

     $html[]="</select>"; 
     $html[]="<input type='submit' value='Go' />"; 
     $html[]="</form>"; 

     echo implode(PHP_EOL, $html); 
    } 


?> 





<?php 
    /* process.php */ 

    /* 

     Rather than sending the actual URL via POST we only send a hash 
     which is then used in the sql to find the real url from the database. 

    */ 

    $errors=array(); 
    $url=false; 

    if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['taskOption'])){ 

     /* rudimentary sanitisation of the string */ 
     $hash = filter_input(INPUT_POST, 'taskOption', FILTER_SANITIZE_STRING); 

     /* db credentials */ 
     $dbhost = 'localhost'; 
     $dbuser = 'xxx'; 
     $dbpwd = 'xxx'; 
     $dbname = 'xxx'; 
     $db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname); 

     /* construct statement to find the url */ 
     $sql='select `url` from `urls` where `hash`=?'; 
     $stmt=$db->prepare($sql); 
     if($stmt){ 

      /* bind the variable - hash */ 
      $stmt->bind_param('s', $hash); 
      $result=$stmt->execute(); 

      /* */ 
      if($result){ 
       $stmt->store_result(); 
       $stmt->bind_result($url); 
       $stmt->fetch(); 
       $stmt->free_result(); 

       if(!$url) $errors[]='Unable to locate url'; 

       $sql='update `urls` set `hits`=`hits`+1 where `hash`=?'; 
       $stmt=$db->prepare($sql); 

       if($stmt){ 
        $stmt->bind_param('s',$hash); 
        $stmt->execute(); 
        $stmt->free_result(); 

       } else { 
        $errors[]='sql error updating hit count'; 
       } 
      } else { 
       $errors[]='No result found in database'; 
      } 
     } else { 
      $errors[]='sql error whilst preparing initial statement'; 
     } 

     $stmt->close(); 
     $db->close(); 





     /* Redirect the user if all went well otherwise show an error message */ 
     if(empty($errors)) exit(header("Location: $url")); 
     else exit("There were errors processing your request."); 

    } 

    /* only accept POST requests */ 
    exit('Bad foo - wrong method'); 
?> 
+0

これは、私はこのサイトが欲しいよりもはるかに複雑ですが、私はこれまで便利なことがあります同じ機能を持つ別のサイトを作る場合:Pありがとう:) – MartinTheNob