2017-03-19 45 views
-2

私はこのコードを持っており、変数 "p1"はintです。デバッガは、適切に値を取得することを示します。しかし、私は "クエリが失敗しました"を取得します。データベースの値はintに設定されています。どんな助け?すべてのPHP、クエリが失敗しました

<?php 
    session_start(); 
    include 'connect_db.php'; 
    $con = $_SESSION['connection']; 

     $query = "SELECT * FROM class WHERE id_class ='".$_GET['p1']."'"; 
     [email protected]_query($con,$query) or die('Error, query1 failed'); 
     $num_result=mysqli_num_rows($result); 


     if($num_result>0){ 

       $insert_query= " INSERT INTO user_program SET 
              id_class='".$_POST['id_class']."' 
              WHERE id_user='".$_SESSION['id_user']."'"; 

     $insert=mysqli_query($con,$insert_query) or die('Error,query2 failed'); 


      if ($insert) { 
       echo '<html><meta charset="UTF-8"><script language="javascript">alert("ok!"); document.location="add_classes_form.php";</script></html>'; 
      } 
      else { 
       echo '<html><meta charset="UTF-8"><script language="javascript">alert("not ok.")</script></html>'; 
       echo '<script language="javascript"> document.location="add_classes_form.php";</script>'; 
       exit(); 
      } 
     } 

?>

+0

変更'するmysql_query($詐欺、$のinsert_query) '' 'mysql'と' mysqliのを混在させないでくださいの

使用'syntax – Mario

+0

そして、ここでは、「... mysq_num_rows($ result);」という誤植を修正しました。 –

+1

新しいコードを書いているなら、** _ please_は 'mysql_ *'関数**を使わないでください。彼らは古くて壊れていて、PHP 5.5では廃止されました(セキュリティアップデートをもはや受け取っていなくなっています)、PHP 7では完全に削除されました。['PDO'](https://secure.php.net/manual /en/book.pdo.php)または['mysqli_ *'](https://secure.php.net/manual/en/book.mysqli.php)を_prepared statements_と_parameter binding_で置き換えてください。詳細については、http://stackoverflow.com/q/12859942/354577を参照してください。 – Chris

答えて

-1

まずuはあなたの例で見ることができるように、uがmysqlimysqlを混在させることはできません。

Mysqlを推奨されていませんが、私はちょうどそれがmysqlmysqliで動作し、これら二つのアプローチの間diferenceは何であるかを確認するために、Uに例を与えます。

@を使用しないでください。実際のエラーが表示されるかどうかはわからないので、これは悪い習慣です。

まず最初に、これはmysql_real_escape_string()またはmysqli_real_escape_string()の変数をエスケープしても安全でないため、両方の方法で悪い方法です。これを使用する代わりに、準備されたステートメントを使用してPDOを使用してください。 `するmysql_query($のinsert_query)へmysqli

// mysqli connection 
$con = mysqli_connect('host', 'username', 'password', 'database_name'); 

コード

<?php 

session_start(); 
include 'connect_db.php'; 
$con = $_SESSION['connection']; 

$p1 = mysqli_real_escape_string($con, $_GET['p1']); 

$query = "SELECT * FROM class WHERE id_class = '$p1'"; 
$result = mysqli_query($con, $query) or die('Error, query failed'); 
$num_result = mysqli_num_rows($result); 

$id_class = mysqli_real_escape_string($con, $_POST['id_class']); 
$id_user = mysqli_real_escape_string($con, $_SESSION['id_user']); 

if ($num_result > 0) 
{ 
    $insert_query = "UPDATE user_program SET id_class = '$id_class' WHERE id_user = '$id_user'"; 

    $insert = mysqli_query($con, $insert_query) or die('Error,query failed'); 


    if ($insert) 
    { 
     echo '<html><meta charset="UTF-8"><script language="javascript">alert("OK!"); document.location="add_classes_form.php";</script></html>'; 
    } 
    else 
    { 
     echo '<html><meta charset="UTF-8"><script language="javascript">alert("Not OK.")</script></html>'; 
     echo '<script language="javascript"> document.location="add_classes_form.php";</script>'; 
     exit(); 
    } 
} 
?> 
+1

' mysql_ * 'の例は古いものであり、廃止されていて安全ではないから_really_削除してください。また、mysqli_real_escape_string()もいくつかの特定のものでは安全でない可能性があるので、入力をエスケープする代わりに[Prepared Statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使うことをお勧めします状況。 –

+0

お時間をいただきありがとうございます。id_userとid_classの両方で "Undefined index"エラーが表示される –

+0

INSERTクエリのWHEREがどのように機能しますか? OPのコードを見ると、おそらく 'UPDATE'であってINSERTではないはずです。 –

関連する問題