2016-01-13 57 views
0

我是PHP中的一个完整的newb,我得到这个目标的唯一原因是因为我试图猜测每件事都做了什么。我想我很幸运,它迄今为止工作。如何将用户名添加到此代码?

所以基本上,我使用的是PHP Wake On LAN代码,我找到here来创建一个简单的页面,我登录到远程打开我的电脑。我决定添加一个用户名,而不仅仅是一个密码,所以也许我可以有多个用户。除了一件事外,我已经成功完成了所有事情。当我登录时,检查我的电脑,然后点击“唤醒所有选择的”,它立即将我注销并且不发送魔法数据包。关于我可以改变以解决这个问题的任何提示?只要我在if语句中删除'和'以及用户名和用户名以检查用户和传递是否正确,它就会起作用。但是之后没有用户并且通过验证。我在说的if语句是第二个,如果在===测试密码保护===部分。

您可以在我的网站上演示代码以查看此处的操作问题:http://trivisionzero.com/wol/ 只需使用'user','pass'即可。 (重建它,选择任何一台计算机,然后按唤醒​​按钮)

全部到目前为止的代码:

<center> 
<br><br><br><br><br> 
<?php 
/* ============================== Configuration settings ====================================== */ 

/* List of PCs that may be woken */ 
$config_network_data_array[] = array("name" => "Shane-EPC", "MAC" => "changed for security", "IP" => "changed for security", "WakeIP" => 
"changed for security"); 
$config_network_data_array[] = array("name" => "Demo", "MAC" => "changed for security", "IP" => "changed for security", "WakeIP" => 
"changed for security"); 
$config_network_data_array[] = array("name" => "Demo", "MAC" => "changed for security", "IP" => "changed for security", "WakeIP" => 
"changed for security"); 

// Port number where the computer is listening. Usually, any number between 1-50000 will do. Normally people choose 7 or 9. 
$socket_number = "7"; 

$my_password = 'pass'; 
$my_username = 'user'; 

$html_title = '<H2>TrivisionZero PC Waker</H2>'; 

$config_table_columns = array('name', 'IP', 'MAC', 'links'); 

# The following function is copied (with some edits, to suppress output and return TRUE or an error message) from: 
# http://www.hackernotcracker.com/2006-04/wol-wake-on-lan-tutorial-with-bonus-php-script.html 

# Wake on LAN - (c) [email protected], upgraded by Murzik 
# Modified by Allan Barizo http://www.hackernotcracker.com 

flush(); 

function WakeOnLan($addr, $mac,$socket_number) { 

    $separator = ':'; 
    if (strstr ($mac, '-')) { 
     $separator = '-'; 
    } 
    $addr_byte = explode($separator, $mac); 

    $hw_addr = ''; 
    for ($a=0; $a <6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a])); 
    $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); 
    for ($a = 1; $a <= 16; $a++) $msg .= $hw_addr; 
    // send it to the broadcast address using UDP 
    // SQL_BROADCAST option isn't help!! 
    $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
    if ($s == false) { 
//  echo "Error creating socket!\n"; 
//  echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s)); 
     return "Error creating socket!\nError code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_erro 
($s)); 
//  return FALSE; 
     } 
    else { 
     // setting a broadcast option to socket: 
     $opt_ret = socket_set_option($s, 1, 6, TRUE); 
     if($opt_ret <0) { 
//   echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n"; 
     return "setsockopt() failed, error: " . strerror($opt_ret) . "\n"; 
//   return FALSE; 
     } 
     if(socket_sendto($s, $msg, strlen($msg), 0, $addr, $socket_number)) { 
//   echo "Magic Packet sent successfully!"; 
     socket_close($s); 
     return TRUE; 
     } 
     else { 
//   echo "Magic packet failed!"; 
     return "Magic packet failed!"; 
//   return FALSE; 
     } 
     } 
    } 

/* ============================== some predefined texts ====================================== */ 

$display_sent = 'Magic Packet sent successfully!'; 
$button_text = 'Wake!'; 
$button_text2 = 'Wake all selected'; 

//this is where I added my username part 
$username_element = "<P>Username: <input type=\"text\" name=\"username\" />"; 
$password_element = "<P>Password: <input type=\"password\" name=\"password\" /><input type=\"submit\" name=\"submit\" value = \"Login\" />"; 


$table_html = "<TABLE border=\"2\">\n"; 
$logout_html = ''; 

/* ========================= Test for password protection ==================================== */ 
$wake_MAC_array = array(); 

if (!isset ($_POST['logout'])) { 
    $input_password = $_POST['password']; 
    $input_username = $_POST['username']; 

} 
//($my_password === '') is if you want no password 
if (($input_password === $my_password) and ($input_username === $my_username)) { 
    $logged_in = TRUE; 
    $hidden_login = "<input type=\"hidden\" name=\"password\" value=\"$my_password\"/>"; 
    if ($my_password !== '') { 
     $logout_html = "\n<P><input type=\"submit\" name=\"logout\" value=\"Log Out\"/>\n"; 
    } 
    if ((isset ($_POST['tickbox'])) and (is_array($_POST['tickbox']))) { 
     $checkbox_array = $_POST['tickbox']; 
     foreach ($checkbox_array as $mac_address => $tickbox_setting) { 
     $wake_MAC_array[$mac_address] = $tickbox_setting; 
     } 

    } 

} else { 
    $logged_in = FALSE; 
    $hidden_login = ''; 
    $table_html_user = $username_element; 
    $table_html = $password_element; 
} 

/* ================================ LOGGED-IN users only ===================================== */ 
/* ======================= construct table for listing of devices ============================ */ 

if ($logged_in == TRUE) { 
    $table_row = "\n<TR>"; 
    foreach ($config_table_columns as $key => $column_heading) { 
     $table_row .= '<TD>' . $column_heading . '</TD>'; 
    } 
    $table_row .= '<TD>Wake Up!</TD>'; 
    $table_row .= '<TD>status</TD>'; 
    $table_html .= $table_row . "</TR>\n"; 
    foreach ($config_network_data_array as $device_key => $device_values) { 
     $table_row = "\n<TR>"; 
     $mac = $device_values['MAC']; 
     $device_name = $device_values['name']; 
     $status_cell = '<TD>&nbsp;</TD>'; 
     foreach ($config_table_columns as $key => $column_heading) { 
     if (isset ($device_values[$column_heading])) { 
      $value = $device_values[$column_heading]; 
      if ($column_heading == 'MAC') { 
/* special coding for MAC address column; prepare clickable button */ 
       $this_MAC = $value; 
       $value = "<input type=\"submit\" name=\"wake_MAC\" value = \"$value\" />"; 

       if (($_POST['wake_MAC'] === $this_MAC) or (array_key_exists ($this_MAC, 
$wake_MAC_array))) { 
        $status = WakeOnLan ($device_values['WakeIP'], $this_MAC, $socket_number) ; 
        if ($status === TRUE) { 
        $status = $display_sent; 
        } 
        $status_cell = "<TD>$status</TD>"; 
       } 
      } 
     } elseif ($column_heading == 'links') { 
/* special coding for links column; prepare clickable links from $config_network_links_array */ 
      $value = ''; 
      if (isset ($config_network_links_array[$device_name])) { 
       foreach ($config_network_links_array[$device_name] as $link_title => $link_URL) { 
        if ($value !== '') { 
        $value .= '<BR />'; 
        } 
        $value .= '<A HREF="' . $link_URL . '">' . $link_title . '</A>'; 
       } 
      } 
     } else { 
      $value = ''; 
     } 
     if ($value === '') { 
     $value = '&nbsp;'; 
     } 
     $table_row .= '<TD>' . $value . '</TD>'; 
     } 
/* now add a checkbox to wake up this device */ 
     $table_row .= '<TD>' . "<input type=\"checkbox\" name=\"tickbox[$this_MAC]\" />" . '</TD>'; 
/* now add the status message (if applicable) for the attempt to send a packet to this device */ 
     $table_row .= $status_cell; 
     $table_html .= $table_row . "</TR>\n"; 
    } 
    $table_html .= "</TABLE>\n"; 
    $table_html .= "<P><input type=\"submit\" name=\"wake all\" value = \"$button_text2\" />\n"; 
} 
/* =========================================================================================== */ 
/* ======================= Now output the html that we've built ============================== */ 

echo $html_title; 

echo "<FORM name=\"input\" action=\"" .$_SERVER['PHP_SELF'] . "\" method=\"post\">"; 
echo '<P>'; 
echo $table_html_user; 
echo $table_html; 
echo $hidden_login; 
echo $logout_html; 
echo "</FORM>\n"; 

?> 
</center> 

回答

1

当您登录,然后提交表格来唤醒机器,你是路过的密码一个隐藏的字段,但不是用户名。

由于您未通过用户名,因此$input_username = null和支票if (($input_password === $my_password) and ($input_username === $my_username))变为if (('pass' === 'pass') and (null === 'user'))这是错误的,这就是您注销的原因。

+0

那么我该如何解决这个问题?我要更改哪部分以使其包含用户并在唤醒按钮中传递? –

+0

最好的方法是使用会话,但为了您的目的,您有'$ hidden_​​login =“” ;'你还需要包含一个隐藏字段,其中包含用于重新提交表单的用户名。 – Dezza

+0

好的,无论何处有$ hidden_​​login,我都将它复制到$ hidden_​​login_user并将其设置为密码并且它可以工作!非常感谢! –

相关问题