php
  • .htaccess
  • url
  • post
  • url-rewriting
  • 2017-04-27 7 views 0 likes 
    0

    Ich habe eine Seite, die ich bei mysite.com/pagePHP senden POST-Daten neu geschrieben URL

    Auf dieser Seite befindet sich bin der Entwicklung der Benutzer einen Benutzernamen und ein Passwort eingeben:

    <form method="post"> 
        <div class='form-group'> 
         <label for='username'>Username</label> 
         <input class='form-control' id='spreadsheet-form-username' name='username' placeholder='Username'> 
        </div> 
        <div class='form-group'> 
         <label for='password'>Password (optional - required to edit)</label> 
         <input type='password' class='form-control' name='password' id='spreadsheet-form-password' placeholder='Password'> 
        </div> 
        <button type='submit' class='btn btn-default'>Submit</button> 
    </form> 
    

    Wenn der Benutzer klickt einreichen , sie die Daten BEITRÄGE und die URL neu geschrieben mysite.com/page/exampleUser oder dem Äquivalent von mysite.com/page?username=exampleUser

    wenn der Benutzer nur einen Benutzernamen nachzuschlagen einreicht, ich möchte, dass sie nur in der Lage sein, die Daten auf mysite.com/page/exampleUser anzuzeigen, und wenn sie auch ein korrektes Passwort einreichen, können sie die Daten bearbeiten.

    Ich kann die richtige URL bekommen, aber ich habe Schwierigkeiten zu finden, wie man überprüft, ob der Benutzername und das Passwort beide gesendet wurden (und was ihre Werte sind) auf der mysite.com/page/exampleUser Seite. Ich möchte in der Lage sein zu sagen, ob sie die Daten auf dieser Seite bearbeiten dürfen oder nicht.

    habe ich versucht, diesen Code:

    $mode = "view"; 
    
    if (isset($_POST["password"])) { 
        if (hashOfPassword matches password submitted) { 
         $mode = "edit"; 
        } 
    } 
    if (isset($_POST["username"])) { 
        $username = $_POST["username"]; 
        header("Location: /spreadsheet/" . $username); 
    } 
    

    aber ich kann nicht scheinen zu können, die $ _POST [ „password“] Daten während der umgeschriebenen URL zu erhalten. Es ist nur verfügbar, bevor die URL neu geschrieben wird.

    Ich muss nicht unbedingt in der Lage sein, das Passwort zu senden, aber ich möchte in der Lage sein, ein paar Informationen zu senden, die mich darüber informieren, ob die Seite sichtbar oder editierbar sein soll. Ich kann es auch nicht über die URL senden (Beispiel: mysite.com/page/exampleUser/edit), da ich nicht möchte, dass Benutzer die Daten anderer Benutzer bearbeiten können, indem sie einfach die URL ändern.

    Hier ist, wie ich mit url befasse umschreibt:

    // Trim leading slashes 
    $path = ltrim($_SERVER['REQUEST_URI'], '/'); 
    
    // Split url on slashes 
    $elements = explode('/', $path); 
    
    if ($elements[0] == "page" && sizeof($elements) == 1) { 
        // do nothing, there wasn't a username submitted  
    } 
    else { 
    
        switch(array_shift($elements)) 
        { 
         case 'page': 
          echo "username: " . $elements[1]; 
          echo "password: " /* not sure what to put here*/; 
          break; 
         default: 
          header("/404.php"); 
          break; 
        } 
    } 
    

    und meine .htaccess:

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^\.]+)$ $1.php [NC] 
    
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ 404.php [L] 
    

    Jede Hilfe wäre sehr geschätzt!

    +0

    Sie könnten ein 'session' beginnen, das Passwort vor der URL-Rewrite bestätigen und der Sitzung eine Art‚Genehmigung‘geben, die dann nach der URL-Rewrite überprüft wird. – Luke

    Antwort

    0

    Sie könnten das Passwort und eine Art von Kennung in der Sitzung speichern. Im folgenden Beispiel habe ich einen uniqid() verwendet, um einen Schlüssel zu generieren. Sie können diese ID sicher in die Weiterleitungs-URL eingeben.

    Später können Sie die ID überprüfen und das in der Sitzung gespeicherte Passwort verwenden, wenn es übereinstimmt.

    // Remove if session is already started at this point 
    session_start(); 
    $mode = "view"; 
    
    if (isset($_POST["password"])) { 
        if (hashOfPassword matches password submitted) { 
         $mode = "edit"; 
        } 
    } 
    if (isset($_POST["username"])) { 
        $username = $_POST["username"]; 
    
        $passwordId = uniqid(); 
        $_SESSION['spreadsheetPasswordId'] = $passwordId; 
        // Password should be hashed before writing it to session. 
        $_SESSION['spreadsheetPassword'] = $_POST["password"]; 
    
        header("Location: /spreadsheet/" . $username . "/" . $passwordId); 
    } 
    

    und später

    // Remove if session is already started at this point 
    session_start(); 
    // Trim leading slashes 
    $path = ltrim($_SERVER['REQUEST_URI'], '/'); 
    
    // Split url on slashes 
    $elements = explode('/', $path); 
    
    // we need at least three elements 
    if ($elements[0] == "page" && sizeof($elements) < 3) { 
        // do nothing, there wasn't a username submitted  
    } 
    else { 
    
        switch(array_shift($elements)) 
        { 
         case 'page': 
          echo "username: " . $elements[1]; 
          echo "password: " . (
           $_SESSION['spreadsheetPasswordId'] == $elements[2] ? 
           $_SESSION['spreadsheetPassword'] : 
           'Access key is invalid or has expired.'); 
          break; 
         default: 
          header("/404.php"); 
          break; 
        } 
    } 
    
    Verwandte Themen