2016-11-20 15 views
-1

私は入門クラスを取って、基本的なPHP/MySQLの経験を持っています。私の知識は、文字通り、次のPHPコードに制限されます。MySQLに重複しない値を挿入するためのPHPコード

if(!($stmt = $mysqli->prepare...) 
if(!($stmt->bind_param...) 
if(!$stmt->execute...) 

私は現在、ユーザーは新しいパスワードを入力することができ、およびデータベース内の既存のパスワードに対してパスワードをチェックするプログラムを書くことをしようとしています。ここで

は私が持っているものです。

<?php 
foreach($Password){ 
    $dupesql = "SELECT PasswordID Passwords WHERE (Password = '$Password')"; 
    $duperaw = mysql_query($dupesql); 
    if(mysql_num_rows($duperaw){ 
     echo nl2br("$Password has already been used \n"); 
    } 
    else{ 
     echo "Password added \n"; 
    } 
} 
?> 

私はこの記事からコードを得た:私は、コード自体に問題があるかはわからないか、私は何かを追加する必要がある場合Check for duplicates before inserting

を私のPHPコードは、現在、 "エラー500"を生成しているので、これを動作させます。

+0

はあなたを提供したコードから判断し、パスワードを保存するための 'password_hashを()'を使用してくださいあなたが決して行うべきではないクリアテキストとしてあなたのパスワードを保管してください。 – mazedlx

+0

あなたはmysql_とmysqli_を混在させていませんか?あなたは与えられたコメント/答えをチェックするつもりですか、あなたの一部に活動があるまでここに立つべきですか? 500エラーはサーバーエラーです。あなたのログを確認してください。ポスト&ゴー/リーブの回答はここでは受け入れられません。 –

+1

とあなたの 'foreach($ Password)';あまり実際にはありません。あなたはそれについてRTMしましたか? http://php.net/manual/en/control-structures.foreach.php私はそれを取ることはありません。 –

答えて

0

パスワード列を一意に設定する全く別のルートに進むことにしました。

それから私、ユーザが重複して追加しようとした場合、エラーを促す簡単なINSERTんでした:

<?php 
     if(!($stmt = $mysqli->prepare("INSERT INTO Heroes(HeroName, FirstName, LastName, Age, HomeCountry, RoleID) VALUES (?,?,?,?,?,?)"))){ 
      echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
     } 
     if(!($stmt->bind_param("sssisi",$_POST['HeroName'],$_POST['FirstName'],$_POST['LastName'],$_POST['Age'],$_POST['HomeCountry'],$_POST['RoleID']))){ 
      echo "Bind failed: " . $stmt->errno . " " . $stmt->error; 
     } 
     if(!$stmt->execute()){ 
      echo "Execute failed: " . $stmt->errno . " " . $stmt->error; 
     } else { 
      echo "Added " . $stmt->affected_rows . " row to Heroes."; 
     } 
?> 
1

MySQLの拡張機能は推奨されておらず、PHP 7.0が削除されている可能性があります。 MySQLiまたはPDOにコードを書き直してください。 MySQLiに変換する方法については、この質問をチェックしてください:How could I change this mysql to mysqli?

また、あなたのコードはパスワードを(決して)追加しません。おそらく、あなたは "パスワードが追加されました"というメッセージの前にそれを追加することを期待していますが、存在するためにパスワードをチェックして追加する間に競合状態になるリスクがあるため、使用したいソリューションは理想的ではありません。つまり、パスワードを2回追加することができます。

この問題を解決するには、トランザクションを使用することができます。詳細については、この質問に記載されています。PHP + MySQL transactions examples

+1

私は、あなたがこの質問のかなり深いウサギの穴に落ちているかもしれないことを恐れています。それはあまり意味がありません。特にそれらのforeachです。彼らの質問の下に残したコメントも見てください。 –

+0

@ Fred-ii-まあ、あなたはおそらく正しいでしょう。しかし、他の人には役に立つかもしれないので、私はここで答えを続けます。少なくとも競合状態の問題に言及する点では。 –

+0

* \ * sigh \ ** - ええ、私は恐れているのでデニスです。ああ、彼らはあなたの答えとコメントに与えられていることを続けていくのに十分です。 –

関連する問題