2017-03-29 13 views
0
 <?php 
     include('session.php'); 
     ?> 

     <?php 
     $conn = new mysqli("127.0.0.1","root","","foo"); 
    if ($conn->connect_errno) { 
     echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " .   $conn->connect_error; 
    } 
    $sew = $_SESSION['login_user']; 
    $a=$_GET["en"]; 
    $l=1; 
    $d= -1; 

    if($a==1) 
    { 
    $sqlw = " INSERT into dlkeuser VALUES('$a','$sew')" ; 



    if ($conn->query($sqlw) === FALSE) 
    { 
echo "you have already disliked the song"; 

    } 
else 
    { 
//query1 
    $sql = " DELETE FROM lkeuser WHERE userid = '$sew' AND songid = '$a' " ; 

//query2 
     $sql = "UPDATE liking 
     SET count = count - 1 "; 

     if ($conn->query($sql) === TRUE) { 


     echo "you disliked the song"; 

     } 
    else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    } 

このPHPコードスニペットでは、クエリ1は動作しませんが、クエリ2は正常です。 ユーザi/p($ _ GET ["en"])に対してdlkeuser(dislike)テーブルに(songid、userid)を挿入しようとしていて、lkeuser(like)テーブルからそのレコード(songid、userid)を削除しようとしています。 (songid、userid)pairは、ここで複合主キーです。 "count"は曲のネットのようなものです。 私はPHPに新しいです。 ご協力いただきありがとうございます。php delete sqlのクエリが機能しない

+1

に動作します、のは、これを試してみましょう(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)*** [準備された]について学ぶ(http://en.wikipedia.org)/wiki/Prepared_statement)ステートメント([MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php))を参照してください。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! [それを信じていない?](http://stackoverflow.com/q/38297105/1011527) –

+0

あなたのコードはSQLインジェクションに広く開いているので、あなたは現在あなたが実行しているSQLコードを制御していません。実行時に、実際のSQLコードは何ですか?見つけ出すためにあなたの '$ sql'変数を' echo 'します。そのコードはあなたが期待しているものですか?データベース上でそのコードを手動で実行すると、何が起こりますか? – David

+0

クエリを個別に実行する必要があります。 – Tony

答えて

0

[リトルボビー](http://bobby-tables.com/)はスクリプトがSQLインジェクションの危険性がある[***言う

それは

<?php 
     include('session.php'); 
     ?> 

     <?php 
     $conn = new mysqli("127.0.0.1","root","","foo"); 
    if ($conn->connect_errno) { 
     echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " .   $conn->connect_error; 
    } 
    $sew = $_SESSION['login_user']; 
    $a=$_GET["en"]; 
    $l=1; 
    $d= -1; 

    if($a==1) 
    { 
    $sqlw = " INSERT into dlkeuser VALUES('$a','$sew')" ; 



    if ($conn->query($sqlw) === FALSE) 
    { 
echo "you have already disliked the song"; 

    } 
else 
    { 
//query1 
    $sql = " DELETE FROM lkeuser WHERE userid = '$sew' AND songid = '$a' " ; 

//query2 
     $sql1 = "UPDATE liking 
     SET count = count - 1 "; 

     if ($conn->query($sql) === TRUE) { 


     echo "deleted the song"; 

     } 

     if ($conn->query($sql1) === TRUE) { 


     echo "you disliked the song"; 

     } 
    else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    } 
0

$ sql変数を再利用する前に、query1を実行する必要があります。

//query1 
    $sql = " DELETE FROM lkeuser WHERE userid = '$sew' AND songid = '$a' " ; 
    $conn->query($sql); 

//query2 
     $sql = "UPDATE liking 
     SET count = count - 1 "; 

     if ($conn->query($sql) === TRUE) { 
0

あなたはどこでもクエリ1を実行していません。ただ、次のコードは、(あなたがQUERY2のために行ったように)以下の

if ($conn->query($sql) === TRUE) { 

    echo "you liked the song"; 
} 
else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
} 

これは、クエリを実行してもエラーをチェックするようにあなたが別の行が必要

$sql = " DELETE FROM lkeuser WHERE userid = '$sew' AND songid = '$a' " ; 

クエリを実行しません。

関連する問題