2011-02-25 2 views
1

내 기능에 문제가 있습니다 db_modif();. 때마다 값이 정확하고 존재한다면, 메시지는 첫 번째 것이다 (if 조건).PHP & SQL 문제

echo "Il n'y a aucun compte au nom de: ".$username." au site: ".$site." dans la base de données"; 

그래서, 내 데이터베이스에는 변경이없는 여기 내 코드 형태로 조작이다 :

<?php 
    $username = $_POST["user_search"]; 
    $site = $_POST["adr_search"]; 
    $fonction = $_POST["fonction"]; 
    $modif = $_POST["modif_value"]; 

    $prep =""; 

    if(!$username) 
    echo 'Nom d\'utilisateur manquant..'; 
    elseif(!$site) 
    echo 'Site manquante..'; 
    else{ 
    require("db_action.php"); //Require in the database connection. 
    $bd = db_open();    // Open DATABASE 

    if($fonction == "usernameOp") 
     $prep = "username"; 
    if($fonction == "adresseOp") 
     $prep = "adresse"; 
    if($fonction == "passwdOp") 
     $prep = "password"; 
    if($fonction == "siteOp") 
     $prep = "siteWeb"; 
    if($fonction == "fonctionOp") 
     $prep = "fonction"; 

    db_modif($prep, $username, $site, $modif); 
    db_close($bd); 
    }//ELSE 

그리고 기능 db_modif();에서 님의

function db_modif($prep, $username, $site, $modif){ 

    error_reporting(-1); //Activer le rapport de toutes les genres d'erreurs 

    $querycon = "UPDATE info_compte SET $prep = '$modif' WHERE username = '$username' AND siteWeb = '$site'"; 
    if($response = mysql_query($querycon) or trigger_error(mysql_error())){ 
    echo "<pre>"; 
    echo "Il n'y a aucun compte au nom de: <b>".$username."</b> au site: <b>".$site."</b> dans la base de données"; 
    echo "</pre>"; 
    } 
    else{ 
    mysql_query($querycon); 
    echo "<pre>\n"; 
    echo "Le compte <b>".$username."</b> du site : <b>".$site."</b> a été supprimé avec succès\n"; 
    echo "</pre>"; 
    }//ELSE 
}//db_modif 

답변

3

변경 AND WHERE 단지 AND 다음 줄에 :

$querycon = "UPDATE info_compte SET $prep = '$modif' 
      WHERE username = '$username' 
      AND WHERE siteWeb = '$site'"; 

나는 미래에 이런 종류의 문제를 디버깅하는 데 mysql_error()를 사용하는 것이 좋습니다.

$response = mysql_query($querycon) or trigger_error(mysql_error()); 

이러한 변수 중 하나에 따옴표가 포함되어 있으면 SQL 주입 취약점이있을 수 있습니다. prepared statement와 함께 mysql_real_escape_string이나 PDO를 사용해보십시오.

+0

'$ response = mysql_query ($ querycon) 또는 trigger_error (mysql_error()); '를 사용하지만 여전히 동일합니다. – HulkThor

+0

@HulkThor : 잘못 변경했습니다. 언급 한 오류를 해결하지 않았습니다. 그리고 $ response의 값이 아니라 ['mysql_affected_rows'] (http://www.php.net/manual/en/function.mysql-affected-rows.php)의 값을 검사해야합니다. –

+0

어떻게 사용해야합니까? 죄송합니다. 내 스크립트에서는 수정할 수 있지만 내 대답은 수정할 수 없습니다. 편집하십시오. – HulkThor