【解決方法】PHP登録フォームがデータベースに送信されない


「現時点ではサインアップできません。後でもう一度お試しください」というエラーコードが、誰かが試みるたびに表示され続けるので、登録してください。 何が間違っているのでしょうか?

0){
while($result = mysqli_fetch_assoc($run_query334)){
$who = $result[‘username’];
}
}それ以外{
header(“場所:index.php”);
}
}それ以外{
$who = “なし”;
}
?>
0){
$message_failure = “登録に失敗しました、もう一度試してください”;
}それ以外{
$query1 = “SELECT * FROM 登録 WHERE email=”{$email}””;
$run_query1 = mysqli_query($connection, $query1);

if(mysqli_num_rows($run_query1) > 0){
$message_failure = “電子メールはすでに存在します”;
}それ以外{
$query22 = “SELECT * FROM 登録 WHERE username=”{$username}””;
$run_query22 = mysqli_query($connection, $query22);

if(mysqli_num_rows($run_query22) > 0){
$message_failure = “ユーザー名はすでに存在します”;
}それ以外{
$query55 = “登録 (名、姓、メール、パスワード、ユーザーパス、電話、紹介、ユーザー名、ウォレット、紹介者、登録日、登録時間、ブロック) に挿入 値 (‘{$fname}’,'{$lname}’, ‘{$email}’、'{$password}’、'{$pass}’、'{$phone}’、'{$rand4}’、'{$username}’、'{$rand}’、’ {$who}’、'{$reg_date}’、'{$time2}’、'{$block}’)”;
$run_query55 = mysqli_query($connection, $query55);

if($run_query55 == true){
$query = “登録の更新 SET status=”{$online}” WHERE email=”{$email}”;
$run_query = mysqli_query($connection, $query);

$query578 = “SELECT * FROM 登録 WHERE email=”{$email}” AND username=”{$username}””;
$run_query578 = mysqli_query($connection, $query578);

$subject = “口座開設のお知らせ”;
require’phpmailer/PHPMailerAutoload.php’;
$mail = 新しい PHPMailer;

$mail->ホスト=”smtp.godaddy.com”;
$mail->ポート=465;
$mail->SMTPAuth=true;
$mail->SMTPSecure=”ssl”;
$mail->ユーザー名=”ユーザー名”;
$mail->Password=’パスワード’;

$mail->setFrom(‘support@site.com’, ‘サイト’);
$mail->addAddress($email) ;
$mail->addReplyTo(‘support@site.com’, ‘サイト’);

$mail->isHTML(true);
$mail->Subject=”ようこそ:”.$subject;
$mail->本文=’

「.$username.」様

世界をリードする企業のアカウントが正常に作成されました

私たちはあなたと一緒にこの素晴らしい道を歩むことを期待しています

©著作権「.$date78.」 全著作権所有。

‘;

if(!$mail->send()){
$message_failure = “登録に失敗しました”;
}それ以外{
while($result = mysqli_fetch_assoc($run_query578)){
$user_id = $result[‘id’];

$_セッション[‘user_id’]= $ユーザーID;
header(“場所: user_dashboard.php?p=ダッシュボード”);

/*$message = “アカウントが正常に作成されました。メールを確認してアカウントをアクティブ化してください”;

header(“場所:login.php”);*/
}
}
}それ以外{
$message_failure = “現時点ではサインアップできません。後でもう一度お試しください。”;
}
}
}
}
}
?>

私が試したこと:

考えられることはほぼ何でもあります。 今、私は憂鬱な気分です。 皆さんの助けが必要です!

解決策 1

そのコードには数多くの問題があり、それはあなたが見つけた問題から始まったものではなく、それよりもはるかに悪いものです。

「ユーザーが登録せずにデータベースを削除できるようにする」ことから始めましょう。 文字列を連結して SQL コマンドを作成しないでください。 偶発的または意図的な SQL インジェクション攻撃にさらされ、データベース全体が破壊される可能性があります。 代わりに常にパラメータ化されたクエリを使用してください。

文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

SQL に関する限り、ユーザーが追加した引用符によって文字列が終了するため、問題が発生します。 しかし、さらに悪化する可能性もあります。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL はまったく異なるコマンドを受け取ります。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

SQL では、次の 3 つの個別のコマンドとして認識されます。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全に有効な SELECT

SQL
DROP TABLE MyTable;

完全に有効な「テーブルの削除」コマンド

SQL
--'

それ以外はすべてコメントです。
つまり、一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。

したがって、常にパラメータ化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元できるように準備してください。 バックアップは定期的に取っていますよね?

サインインや登録コードでそれを行うのは、あまりにも愚かすぎて言葉にできません。

そして、パスワードを続けましょう…これは PHP コードなので、Web ベースです。 パスワードをクリア テキストで保存しないでください。これは重大なセキュリティ リスクです。 その方法については、ここにいくつかの情報があります。 パスワードの保管: その方法。[^] – コードは C# ですが、非常に明白です。

また、覚えておいてください。これは Web ベースであるため、欧州連合ユーザーがいる場合は GDPR が適用され、パスワードを機密データとして扱い、安全な方法で保存する必要があることを意味します。 テキストはそのどちらでもないので、罰金は …. うーん … 未払いになる可能性があります。 2018年12月、ドイツの企業はそれだけの理由で2万ユーロという比較的低額の罰金を科せられた。

解決策 2

引用:

PHP登録フォームがデータベースに送信されない

コードが期待どおりに動作しない場合は、デバッガーが最適なツールです。
—–
コードが期待どおりに動作しないか、その理由がわかりません。

ほぼ普遍的な解決策があります。デバッガーでコードを段階的に実行し、変数を検査します。
デバッガーはコードが何を行っているかを示すためにここにあり、あなたのタスクはコードがすべきことと比較することです。
デバッガーには魔法はありません。デバッガーはコードが何をすべきか知りませんし、バグを見つけることもありません。何が起こっているかを示すことでバグを見つけるのを助けるだけです。 コードが期待どおりに動作しない場合、バグに近づいています。
コードの動作を確認するには: ブレークポイントを設定するだけで、コードの実行を確認できます。デバッガーを使用すると、1 行ずつ実行し、実行時に変数を検査できます。

デバッガー – フリー百科事典『ウィキペディア(Wikipedia)』[^]

Visual Studio 2010 でデバッグをマスターする – 初心者ガイド[^]
Visual Studio 2010 を使用した基本的なデバッグ – YouTube[^]

phpdbg | PHPデバッガ[^]
PHP プログラマーのためのデバッグ手法[^]

デバッガーは、コードが何を行っているかを表示することだけを目的としており、コードが行うべき動作と比較することがタスクです。
—–
アドバイス: コードを適切にインデントする方法を学びましょう。コードの構造が示され、読んで理解するのに役立ちます。 また、構造の間違いを見つけるのにも役立ちます。

インデントのスタイル – ウィキペディア[^]

プロのプログラマのエディタには、この機能のほかに、括弧の一致や構文の強調表示などの機能があります。
Notepad++ ホーム[^]
ウルトラエディット[^]

コメント

タイトルとURLをコピーしました