1

私はphpに非常に慣れていないことを述べることから始めましょう。私はこのコードを持っています

<?php
$phone=$_POST['phone'];
 $tagline=$_POST['tagline'];
 $activity=$_POST['activity'];
$about=$_POST['about'];
$date=date(d-m-y);
$status='ok';
$con=mysqli_connect("localhost","root","","database");
mysqli_query($con,"UPDATE owners set    phone='$phone',tagline='$tagline',status='$status',activity='$activity',about='$about',date='$    date' where username='deiin'");
mysqli_close($con);

?>

テーブルを更新するのはサポートですが、Notice: Undefined index: phone in E:\EasyPHP-5.3.5.0\www\register\finishing\index.php on line 3 を返します。

4

4 に答える 4

1

このようにしてみてください。すべてのフィールドが必須であるため、ユーザーがすべてのフィールドに入力しないと、データはデータベースに保存されません。

ただし、小さなホームアプリでのみ使用してください。本番サーバーには配置しないでください。インジェクションに対して依然として脆弱であるためです。

if(isset($_POST['phone'])
   && isset($_POST['tagline'])
   && isset($_POST['activity'])
   && isset($_POST['about'])){

    $phone = $_POST['phone'];
    $tagline = $_POST['tagline'];
    $activity = $_POST['activity'];
    $about = $_POST['about'];

    $date=date('d-m-y');
    $status='ok';
    $con=mysqli_connect("localhost","root","","database");
    mysqli_query($con,"UPDATE owners 
                       SET phone='$phone', tagline='$tagline',status='$status',activity='$activity',about='$about',date='$date' 
                       WHERE username='deiin'");
    mysqli_close($con);
}

または、このように、 activity と about はオプションになります。

if(isset($_POST['phone'])  
  && isset($_POST['tagline']){  

    $phone = $_POST['phone'];
    $tagline = $_POST['tagline'];

    if(isset($_POST['activity'])) $activity = $_POST['activity'];
    else $activity = '';

    if(isset($_POST['about'])) $about = $_POST['about'];
    else $about = '';

    $date=date('d-m-y');
    $status='ok';
    $con=mysqli_connect("localhost","root","","database");
    mysqli_query($con,"UPDATE owners 
                       SET phone='$phone', tagline='$tagline',status='$status',activity='$activity',about='$about',date='$date' 
                       WHERE username='deiin'");
    mysqli_close($con);
}

ただし、このコードには大きなセキュリティ ホールがあることに注意してください。したがって、これを運用サーバーに配置しないでください。誰かがフォームに ' 引用符を書いた場合、それは SQL クエリに挿入され、そこで終了引用符になるため、引用符に続くものはすべて SQL のコマンドとして解釈されます。そうすれば、周りのすべてのジョーカーがデータベース全体を一瞬で削除できます。mysqli_real_escape_string() または準備済みステートメントを使用する

編集: mysqli_real_escape_string() の使用方法:

たとえば の代わりに、次の$phone = $_POST['phone'];ように mysql_real_escape_string() で囲みます。

$phone = mysql_real_escape_string( $_POST['phone'] );

もっと簡単なことはありませんよね?:)

あなたがするように、クエリ内のすべてを引用することを忘れないでください:

UPDATE owners SET phone=     ---> '$phone' <--- /*those quotes are 
important for it to work, remember to keep them there */

手続き型構文は奇妙で、OOP 構文はおそらくさらに奇妙に見えるので、準備済みステートメントについては説明しません。

于 2013-06-01T11:29:23.653 に答える
1
<?php
////////////you use////////
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
die("here");

$phone=$_POST['phone'];
 $tagline=$_POST['tagline'];
 $activity=$_POST['activity'];
$about=$_POST['about'];
$date=date(d-m-y);
$status='ok';
$con=mysqli_connect("localhost","root","","database");
mysqli_query($con,"UPDATE owners set    phone='$phone',tagline='$tagline',status='$status',activity='$activity',about='$about',date='$    date' where username='deiin'");
mysqli_close($con);

?>

$_REQUEST値の送信メソッドが POST または GET OR COOKIES の場合に返されます // get メソッドを使用している可能性があります

于 2013-06-01T11:32:55.747 に答える
1

PHP-Notice がコードの実行を停止していないため、おそらくコードをデバッグする必要があります。

データベースが更新されていない場合は、mysql_error()を試して、mysql 構文にエラーがあるかどうかを確認してください。

print_r($_POST)が入ってくる $_POST パラメータを確認してください。

編集:

はい (Lepidosteus が言ったように) : あなたのコードは mysql インジェクションに対して脆弱です。注射とは何か、注射の予防方法はこちらをご覧ください。

お役に立てば幸いです:)

于 2013-06-01T11:14:48.443 に答える