2016-04-26 28 views
0
<?php 
    if(isset($_GET['breed'])){ $breed = $_GET['breed']; } 
    if(isset($_GET['age'])){ $age = $_GET['age']; } 
    if(isset($_GET['gender'])){ $gender = $_GET['gender']; } 
    if(isset($_GET['image'])){ $image = $_GET['image']; } 
    if(isset($_GET['name'])){ $name = $_GET['name']; } 
    if(isset($_GET['phone'])){ $phone = $_GET['phone']; } 
    if(isset($_GET['address'])){ $address = $_GET['address']; } 
$sql = "INSERT INTO catdetails (breed, age, gender, image, name, pno, address) 
VALUES ('$breed','$age','$gender','$image','$name','$phone','$address')"; 
if(mysqli_query($conn, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); 
} 
    ?> 

私は自分のWebページで上記のコードを得ました。しかし、私はそれを実行するとき、変数が定義されていないと言います。PHP通知未定義の変数

注意:未定義の変数:Cでの品種:\ WAMP \ WWW \ SQAの\ index.phpのライン上の130

は、どのように私はこのエラーを修正することができますか?

+0

あなたは最初の '$ breed'変数の値を設定するために' if'文を使用しています。 ifステートメントが完了しなかった場合、変数は見つかりません。 –

+0

$ breed = isset($ _ GET ['breed'])にはこの行を使用しますか? $ _GET ['breed']: ''; – RJParikh

+1

** WARNING **:ユーザーを追加するために、あなたがパラメータ化クエリを使用する必要がありますmysqli' '使用して、[' bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)データを照会に追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'または' $ _GET'データを直接クエリに入れないでください。 – tadman

答えて

4

あなたが他のisset()は、それが設定されていない場合にのみ値を代入しています。

したがって、$_GET['breed']$breedが初期化されていないためエラーとなる場合があります。このため

使っ三項演算子は、目的にサービスを提供しています。

変更:

$breed = isset($_GET['breed']) ? $_GET['breed'] : ''; 

if(isset($_GET['breed'])){ $breed = $_GET['breed']; } 

が必要なすべての変数にこの変更を適用します。

+1

これを行うことは非常に面倒であり、大規模に混乱したコードにつながります。 '$ _GET'に対して' bind_param'を直接呼び出すことはできません。条件式を削除することも改善され、*何に*設定されます。 – tadman

1

あなたはその設定されていない場合は、値を持っている必要があります。そうすればあなたのifsetへの言い方。

-1

行130はどこですか? 私は変数が存在しないと思います。

はこれを試してみてください:

$breed = (array_key_exists(['breed'], $_GET)) ? addslashes($_GET['breed']) : null; 
$age = (array_key_exists(['age'], $_GET)) ? addslashes($_GET['age']) : null; 
$gender = (array_key_exists(['gender'], $_GET)) ? addslashes($_GET['gender']) : null; 
$image = (array_key_exists(['image'], $_GET)) ? addslashes($_GET['image']) : null; 
$name = (array_key_exists(['name'], $_GET)) ? addslashes($_GET['name']) : null; 
$phone = (array_key_exists(['phone '], $_GET)) ? addslashes($_GET['phone ']) : null; 
$address = (array_key_exists(['address '], $_GET)) ? addslashes($_GET['address ']) : null; 
... 
+0

してください。 'addslashes'は非常に有害で、適切な[SQLエスケープ方法](http://bobby-tables.com/php)ではなく、[SQLインジェクションバグ](http://bobby-tables.com)にさらされています。 /)。あなたが間違って取得するためのコストが厳しいことができるので、これを行うときは非常に注意する必要があります。 – tadman

0

私はあなたの$ _GET([ '品種は'])に設定されていないと思います。それは、コード実行されません :だから

$breed = $_GET['breed']; 

を、$品種が定義されていません。

次のようにあなたは$品種を初期化することができます。

$breed = ''; 
if(isset($_GET(['breed'])){ 
    $breed = $_GET['breed']; 
} 
0

次code..1st機能をチェックしてくださいは、SQLインジェクションから脱出するために使用されます。..

 function escape($e_string) 
     { 
      global $conn;   
      $e_string = trim(strip_tags($e_string)); 
      $e_string = mysqli_real_escape_string($conn,$e_string); 
      return $e_string; 
     } 

     $breed = isset($_GET['breed']) ? escape($_GET['breed']) : ''; 
     $age = isset($_GET['age']) ? escape($_GET['age']) : ''; 
     $gender = isset($_GET['gender']) ? escape($_GET['gender']) : ''; 
     $image = isset($_GET['image']) ? escape($_GET['image']) : ''; 
     $name = isset($_GET['name']) ? escape($_GET['name']) : ''; 
     $phone = isset($_GET['phone']) ? escape($_GET['phone']) : ''; 
     $address = isset($_GET['address']) ? escape($_GET['address']) : ''; 

     $sql = "INSERT INTO catdetails (breed, age, gender, image, name, pno, address) 
     VALUES ('$breed','$age','$gender','$image','$name','$phone','$address')"; 
     if(mysqli_query($conn, $sql)){ 
      echo "Records added successfully."; 
     } else{ 
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); 
     } 

はまた、データベースフィールドをチェックしていますユニークかどうか...

関連する問題