2010-12-16 26 views
1

Okay, lassen Sie mich mich hier erklären:MySQL-Abfrage läuft, aber nicht läuft

Ich mache ein Online-Text-basierten Spiel. Ich habe eine Seite, wo drei Dinge passieren kann:

  • Sie eine Position
  • erstellen
  • Kann eine Position bearbeiten
  • kann eine Position
  • löschen Bisher habe ich Arbeit eine Position haben, zu schaffen. Ich löste als nächstes eine Position. Alles war gut und ich habe keine Fehler, keine Warnungen, etc .. Und als ich es ausgeführt habe, kam es zurück zum Bildschirm, der nach dem Skript zum Löschen der Position ausgeführt werden sollte. Es soll nur hierher kommen, nachdem die Abfrage ausgeführt wurde.

    Nun nichts passiert ist und nach 3 Stunden versuchen Mist komme ich zu euch Jungs b/c Ich bin auf meinem letzten Bein. Ich habe immer noch keine kritischen Fehler, nichts bringt es zum Scheitern: Hier ist mein 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"); 
        } 
    } 
    

    UPDATE -

    Ok, so habe ich es funktioniert das Problem war etwas, das ich vergessen, diese Form wurde nur ein „ja oder nein Form“ sein soll, damit ich Post tun nur Post der Submit-Button, nichts anderes war auf dem Formular. Was ich vergessen hatte, war auf der action = "file.php" (was ich hatte) Ich hatte vergessen, die get Variable weiterzuleiten, sobald ich es in action = "file.php? Piddelete = 12" geändert hatte, funktionierte es.

    Danke für die Hilfe, die ich wirklich schätze.

    +3

    Muss sagen, sehr interessante Titel :) – codaddict

    +1

    uhm, haben Sie wethhere überprüft error_reporting = E_ALL & ~ E_NOTICE & ~ E_DEPRECATED ist gesetzt? – lock

    +0

    Ja es ist aber ich konnte mir keine andere Möglichkeit vorstellen es zu erklären, ich werde mit der Fehlermeldung zurückschreiben. – jefffan24

    Antwort

    2

    10 zu 1 Ihre Variable $_GET['piddelete']; ist leer. Was erhalten Sie, wenn Sie dies tun:

    Deaktivieren Sie die Header-Umleitung, so dass Sie die Ausgabe sehen können.

    bearbeiten

    Oder, wie Nick darauf hingewiesen, Sie die() Aussagen auf Ihre Fragen hinzufügen:

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

    Wenn die Abfrage noch ausgeführt wird, und das Skript nicht stirbt, und die Position ist immer noch nicht gelöscht, sollten Sie die Abfrage überprüfen, löscht es möglicherweise 0 Zeilen erfolgreich. Versuchen Sie, bei die($deleteSql); zu töten und führen Sie die Abfrage über MySQL-Konsole.

    bearbeiten/

    Außerdem bin ich gezwungen, Sie zu meinem guten Freund SQL injection attack einzuführen. Sie sollten alle Daten in den Superglobalen $_POST und $_GET filtern, bevor Sie sie an den MySQL-Server übergeben. Verwenden Sie mysql_real_escape_string().

    Versuchen Sie, diese grok:

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

    Wenn ich auf Ihre Anwendung, die Abfrage-String auszuführen waren, Ihre tblCPositions Tisch fallen gelassen würde.

    +0

    Nur überprüft und gesetzt, in der URL ist es gesetzt und ich bin in der Lage, die $ _GET-Variable auf der Seite, wo die Schaltfläche die Seite löschen soll. – jefffan24

    +0

    Wie wäre es mit dieser Fehlermeldung? Befindet sich das obige Skript auf derselben Seite wie die Schaltfläche zum Löschen? Wenn nicht, (ich vermute es ist nicht, weil Sie eine Umleitung machen) müssen Sie überprüfen, ob die Variable GET auf * das * Skript gesetzt ist, nicht die davor. Deaktivieren Sie die Header-Umleitung, geben Sie die Variable GET im obigen Skript ein und klicken Sie auf die Schaltfläche. – Stephen

    +0

    Ja, ich versuche, Dinge ohne es zuerst zu arbeiten, dann füge ich mysql_real_escape_string hinzu ... Ich weiß, es ist nicht normal, aber es funktioniert für mich die meiste Zeit :) Nun, eigentlich kommt die get nicht aus einem Formular. Es stammt aus Text, den ich eingab, also ja, es ist auf derselben Seite, aber nicht aus einer Form. – jefffan24