2010-12-16 10 views
1

D'accord laissez-moi m'expliquer ici:La requête MySQL est en cours d'exécution mais ne fonctionne pas

Je fais un jeu basé sur le texte en ligne. J'ai une page où 3 choses peuvent se produire:

  • Ils peuvent créer une position
  • peut modifier une position
  • peut supprimer une position
  • Jusqu'à présent, j'ai la création d'une position de travail. Je suis passé à la suppression d'une position suivante. Tout était bon et je n'ai eu aucune erreur, aucun avertissement, etc. Et quand je l'ai couru, il est revenu à l'écran qu'il était censé après le script pour supprimer la position courue. Il est seulement supposé venir ici après l'exécution de la requête.

    Eh bien rien ne s'est passé et après 3 heures de merde j'arrive à vous les gars b/c je suis sur ma dernière jambe. Je n'ai toujours pas d'erreurs critiques, rien ne le fait échouer: voici mon code.

    <?php 
    //In the include file is the connection to the db 
    include("library/new_library.php"); 
    
    //Below is the session id, gets their position id from the DB, than grabs whether or not they can edit the company 
    $user_id = $_SESSION['user_id']; 
    $sql = "SELECT ID, PositionID FROM users WHERE ID = '$user_id'"; 
    $query = mysql_query($sql); 
    while($row = mysql_fetch_assoc($query)) 
    { 
        $position = $row['PositionID']; 
    } 
    $sql = "SELECT * FROM tblCPositions WHERE PositionID = '$position'"; 
    $query = mysql_query($sql); 
    while($row = mysql_fetch_assoc($query)) 
    { 
        $editCompany = $row['Edit_Company']; 
    } 
    
    
    //Next I check for position edit and if they try to put in the position id of a position the company does not control it gives them a "nice" message. 
    $company = $_SESSION['company']; 
    if($_GET['pidedit']){ 
        $position = $_GET['pidedit']; 
        $sql = "SELECT * FROM tblCPositions WHERE PositionID = '$position'"; 
        $query = mysql_query($sql); 
        while($row = mysql_fetch_assoc($query)) 
        { 
         if($row['CompanyID'] != $company) 
         { 
          $warning = "<div class='warning'>You are trying to edit a position that does not belong to your company. DO NOT TRY TO CHEAT THE SYSTEM!</div>"; 
         } 
         else 
         { 
          $positionArray[] = array(ID => $row['PositionID'], name => $row['Name'], hire => $row['Hire'], fire => $row['Fire'], bid => $row['Contract'], edit => $row['Edit_Company'], finances => $row['Finances']); 
         } 
        } 
    } 
    
    //Here I check for $_GET delete 
    elseif($_GET['piddelete']) 
    { 
        $position = $_GET['piddelete']; 
        $sql = "SELECT * FROM tblCPositions WHERE PositionID = '$position'"; 
        $query = mysql_query($sql); 
        while($row = mysql_fetch_assoc($query)) 
        { 
         if($row['CompanyID'] != $company) 
         { 
          $warning = "<div class='warning'>You are trying to delete a position that does not belong to your company. DO NOT TRY TO CHEAT THE SYSTEM!</div>"; 
         } 
        } 
    } 
    else 
    { 
        $sql = "SELECT * FROM tblCPositions WHERE CompanyID = '$company'"; 
        $query = mysql_query($sql); 
        $number = mysql_num_rows($query); 
        $numberLeft = 12 - $number; 
        while($row = mysql_fetch_assoc($query)) 
        { 
         $positionArray[] = array(ID => $row['PositionID'], name => $row['Name'], hire => $row['Hire'], fire => $row['Fire'], bid => $row['Contract'], edit => $row['Edit_Company'], finances => $row['Finances']); 
        } 
    } 
    
    // 
    if($_POST['submitNewPosition']) 
    { 
        $name = $_POST['positionName']; 
        $hire = $_POST['hire']; 
        $fire = $_POST['fire']; 
        $bid = $_POST['bid']; 
        $edit = $_POST['edit']; 
        $finances = $_POST['finances']; 
        $cid = $_SESSION['company']; 
        $sql = "INSERT INTO tblCPositions(CompanyID, Name, Hire, Fire, Contract, Edit_Company, Finances) VALUES ('$cid','$name','$hire','$fire','$bid','$edit','$finances')"; 
        $query = mysql_query($sql); 
        if($query) 
        { 
         header("location: view_company.php?newp=success"); 
        } 
    } 
    
    //Haven't finished this section yet 
    if($_POST['submitEditPosition']) 
    { 
        $name = $_POST['positionName']; 
        $fire = $_POST['hire']; 
        $fire = $_POST['fire']; 
        $bid = $_POST['bid']; 
        $edit = $_POST['edit']; 
        $finances = $_POST['finances']; 
    } 
    
    //This this is my problem area, this is where it says its running the query but its not. 
    if(isset($_POST['deletePosition'])) 
    { 
        $deleteID = $_GET['piddelete']; 
        $deleteSql = "DELETE FROM tblCPositions WHERE PositionID = '$deleteID'"; 
        $deleteQuery = mysql_query($deleteSql); 
        if($deleteQuery) 
        { 
         header("location: view_company.php?delete=success"); 
        } 
        if(!$deleteQuery) 
        { 
         header("location: view_company.php?delete=failure"); 
        } 
    } 
    

    MISE À JOUR -

    Ok donc je l'ai travaillé le problème était que j'ai oublié, cette forme était destiné à être un « oui ou non la forme » si je faisais poste uniquement pour poste le bouton Envoyer, rien d'autre n'était sur le formulaire. Ce que j'avais oublié était sur l'action = "fichier.php" (ce que j'avais) j'avais oublié de passer sur la variable get donc une fois que je l'ai changé en action = "fichier.php? Piddelete = 12" cela a fonctionné.

    Merci pour tout le monde aide je l'apprécie vraiment.

    +3

    Je dois dire que le titre très intéressant :) – codaddict

    +1

    Uhm, avez-vous vérifié wethere error_reporting = E_ALL & ~ E_NOTICE & ~ E_DEPRECATED est réglé? – lock

    +0

    ouais c'est mais je ne pouvais pas penser à une autre façon de l'expliquer, je vais écrire avec le rapport d'erreur. – jefffan24

    Répondre

    2

    10 à 1 votre variable $_GET['piddelete']; est vide. Qu'obtenez-vous quand vous faites ceci:

    var_dump($_GET['piddelete']); 
    

    Désactivez la redirection d'en-tête afin que vous puissiez voir la sortie.

    modifier

    Ou, comme l'a souligné Nick, vous pouvez ajouter à vos déclarations die() requêtes:

    $deleteQuery = mysql_query($deleteSql) or die(mysql_error()); 
    

    Si votre requête fonctionne toujours, et le script ne meurt pas, et la position est encore pas supprimé, vous devriez vérifier la requête, il peut être la suppression 0 lignes avec succès. essayez de tuer à die($deleteSql); et lancez la requête via la console de MySQL.

    /modifier

    Aussi, je suis obligé de vous présenter mon bon ami SQL injection attack. Vous devez filtrer toutes les données contenues dans les superglobales $_POST et $_GET avant de les remettre au serveur MySQL. utilisez mysql_real_escape_string().

    Essayez de grok ceci:

    whatever.com/your_url.php?pidedit=x'%3B%20DROP%20TABLE%20tblCPositions%3B%20-- 
    

    Si je devais exécuter cette chaîne de requête sur votre application, votre table tblCPositions serait abandonnée.

    +0

    Juste vérifié et son ensemble, dans l'url il est définir et je suis en mesure d'écho la variable $ _GET sur la page où le bouton est de supprimer la page. – jefffan24

    +0

    Que diriez-vous de cette déclaration d'erreur? Aussi, votre script ci-dessus est-il sur la même page que le bouton de suppression? Sinon, (je suppose que ce n'est pas le cas puisque vous faites une redirection), vous devrez vérifier si la variable GET est définie sur * ce * script, pas celui qui le précède. Désactivez la redirection d'en-tête, renvoyez la variable 'GET' dans le script ci-dessus et cliquez sur le bouton. – Stephen

    +0

    Ouais j'essaie de faire des choses en passer d'abord, puis-je ajouter mysql_real_escape_string ... Je sais que ce ne est pas normal, mais il fonctionne pour moi la plupart du temps :) Eh bien, en fait le get ne vient pas d'une forme. Ca vient du texte que j'entre si oui c'est sur la même page mais ce n'est pas une forme. – jefffan24

    Questions connexes