2016-12-11 25 views
0

私は学校プロジェクト用のウェブサイトを作っていて、変数の取得に問題があります。mysqlクエリを実行する必要があります。行171の$ username変数は定義されていませんが、別のPHPコードから変数を取得する方法

<?php 
session_start(); 
$_SESSION['visited']=false; 
require_once ('../php/dblink.php');  
?> 
<html> 
<head> 
<link href="../css/style.css" rel="stylesheet" type="text/css" media="screen" /> 
<meta charset="UTF-8"> 
<title>test</title> 
</head> 
<body> 
<div id = "logo"> 

    </div> 

    <div id = "header"> 

    </div> 

    <div id = "login"> 
     <?php 
     $rConn = mysql_connect('localhost', 'root' , ''); 
require_once ('../php/dblink.php'); 
if((false === is_resource($rConn)) || (false === mysql_select_db('accounts', $rConn))) 
{ 
    echo mysql_error(); 
    exit; 
} 
     if(isset($_POST['login'])) 
{ 
    if(!empty($_POST['benutzername']) && !empty ($_POST['passwort'])) 
    { 

    mysql_select_db("accounts");  
    $username = mysql_real_escape_string($_POST['benutzername']);  
    $pw = mysql_real_escape_string($_POST['passwort']); 
     $result = mysql_query("SELECT * FROM benutzer where benutzer_name='$username'and password = '$pw' LIMIT 1"); 
     if(!$result) 
     { 
      die(mysql_error()); 
     }else 
     { 
      $row = mysql_fetch_array($result); 

       if ($row['benutzer_name']==$username && $row['password']==$pw) 
      { 
       echo"login erfolgreich !!!"; 

       echo"Willkommen"; 
       echo" "; 
       echo"$username"; 
       $_SESSION['visited']=true; 

        echo $row['benutzer_name']; 

      } 
      else 
      { 
       echo"falsche daten"; 
       $_SESSION['visited']=false; 
      } 
     } 

    } 
    else 
    { 
     echo"bitte Benutzernamen und Passwort eingeben !"; 
    } 
} 
?> 

     <?php 
      echo "<form method='post'>"; 
      if ($_SESSION['visited']==true) 
      { 
       echo "<center><button type='submit' name='Logout'>Auslogen</button></center>"; 
       IF(isset($_POST['Logout'])) 
       { 
        $_SESSION['visited']=false; 
        session_destroy(); 

       } 
      } 
      else{ 
      ?> 

    <form method='post'> 

     <label>Benutzername:</label> <input type='text' name='benutzername' /><br /> 
     <label>Vorname:</label> <input type='text' name='vorname' /><br /> 
     <label>Passwort:</label> <input type='password' name='passwort' /><br /> 

     <input type='submit' name='speichern' value='Registrieren' /> 
     </form> 

     <form method='post' action="../html/index.php"> 

     <label>Benutzername:</label> <input type='text' name='benutzername' /><br /> 
     <label>Passwort:</label> <input type='password' name='passwort' /><br /> 

     <input type='submit' name='login' value='Login' /> 

    </form> 
    <?php 
    } 
    if(isset($_POST['speichern'] )) 
    { 

     $vorname = $_POST['vorname']; 
     $benutzername = $_POST['benutzername']; 
     $passwort = $_POST['passwort']; 

     // $sql = 'UPDATE person SET name="'.$name.'" WHERE benutzername="1"'; 
     $sql = 'INSERT INTO benutzer (benutzer_name, vorname, password) 
     VALUES (
     "'.mysqli_real_escape_string($db_link, $benutzername).'", 
     "'.mysqli_real_escape_string($db_link, $vorname).'", 
     "'.mysqli_real_escape_string($db_link, $passwort).'" 
     )'; 

     $db_erg = mysqli_query($db_link, $sql); 
     $error_meld = mysqli_error($db_link);  
     $dublikat = strpos($error_meld, "Duplicate") !== false; 

     if($db_erg == 1) 
     { 
      echo "<span style='color:darkgreen;'>Neuer Benutzer ".$benutzername." angelegt!</span>"; 
     } 
     else 
     { 
      if($dublikat) 
       echo "<span style='color:darkred;'>".$benutzername." ist schon vorhanden!</span>";    
      else 
       echo "<span style='color:darkred;'>Fehler!</span>"; 
     } 
    } 
    ?> 

    </div> 


    <div id = "links_mid"> 

    </div> 

    <div id = "rechts_mid"> 

    </div> 

    <div id = "textarea"> 

    <?php 
     echo '<pre>';print_r($_SESSION);print_r($_POST);echo '</pre>'; 

     if ($_SESSION['visited']==true) // Hier ist Content für Leute die eingeloggt sind ! 
      { 

       echo"<form action='?aendern=1' method='post'>"; 

     echo"<label>Passwort Ändern :</label> <input type='password' name='new_pw' /><br />"; 

     echo"<input type='submit' name='change' value='aendern' />"; 
     echo"</form>"; 

      } 
      IF(isset($_POST['change'])) 
     { 
     $neues_psw = $_POST['new_pw']; 

     $ch_query=mysql_query("update benutzer set password='$neues_psw' where benutzer_name='$username'"); 
     $db_erg = mysqli_query($db_link , $ch_query); 

     if(! $db_erg) 
     { 
     die(mysql_error()); 
     }else 
     { 
     echo"Passwort wurde geändert"; 
     } 

     } 
      ?> 


    </div> 
    <div id = "footer"> 
    <address> 
    test 
    </address> 
    </div> 
</body> 
</html> 
+0

強盗のルール:あなたがそれを防ぐことができるならば、関数は単一のスクリーンの高さより長くならないべきです。あなたのコードは現在の状態では追いつくのが本当に難しいです。 – arkascha

+0

それとは別に、廃止予定の古い「mysql」拡張機能を使用しています。最新の 'mysqli'または' PDO'拡張モジュールに切り替えると、PHPをアップグレードする瞬間にコードが動作しなくなります。また、 "prepared statements"と "parameter binding"を使うことのメリットについても読んで学びましょう。これは現在行っている手動エスケープの必要性を取り除きます。 – arkascha

+0

次に、1つのデータベースにパスワードを格納しません。平文ではなく、「暗号化されていない」。あなたが保存するものは、パスワードの_ハッシュです。次に、認証時に、提供されたログインパスワードを再度ハッシュし、パスワードではなく、両方のハッシュを比較します。そうすれば、誰かがあなたのデータベースの詳細を取得しても、あなたのユーザーアカウントを妥協することはありません。 – arkascha

答えて

-1
:私の先生はとても私を助けることができない私は多分誰かが私のコードを見てみると考えていた.Even私は( $ch_query=mysql_query("update benutzer set password='$neues_psw' where benutzer_name='$username'");)を使用することはできませんなぜ私は理解していないので、同じのindex.phpファイル

実際のユーザーのデータを含むサイトを作成する前に、mysqlクエリをmysqliまたはPDOプリペアドステートメントに置き換えることが重要です。 (Hints on how to prevent SQL injection

3つのことは、あなたの$username変数が最初の場所に設定されるために発生する必要があります。

  1. isset($_POST['login'])は真でなければなりません。 (ユーザーはログインボタンをクリックしてこのページにアクセスします)
  2. !empty($_POST['benutzername'])がtrueである必要があります。 (フォームのname="benutzername"入力フィールドに何かを入力しておく必要があります)
  3. !empty($_POST['benutzername'])がtrueである必要があります。 (上記#2を参照してください)

私はさらに読むためにVariable Scopeをお勧めします。

+1

これは本当は答えではありません。それは明らかな事実をいくつか引用していますが、その問題を解決するものではありません。だからコメントだったはずです。 – arkascha

+0

フィードバックいただきありがとうございます。あなたが正しい。私は高校のコンピュータサイエンスの教師です。この質問は私の教えから魚へのアプローチではなく、魚からのアプローチであった。 –

+0

まあ、あなたはあなたの質問を編集し、正確なソリューションを追加するすべての時間を持っている! ;-) – arkascha

関連する問題