2016-04-13 11 views
1

Ich versuche, alle aktualisieren ein int Wert in meiner Datenbank, wenn das Skript aufgerufen wird. Um dieses Problem zu relativieren, habe ich eine Tabelle mit dem Namen monthly_flagged, die alle markierten Beiträge auf meiner Website erhält und sie in den Monat sortiert, in dem sie markiert wurden. Das Skript heißt flagged_posts. Wenn das Skript aufgerufen wird, besteht die Idee darin, dass die Spalte total_flagged in der Tabelle monthly_flagged um eins (+1) erhöht wird.Wert in der DB inkrementieren, wenn das Skript aufgerufen wird

Bei meinem derzeitigen Ansatz ändert sich die Nummer jedoch nicht. Der Wert ist derzeit 0, und ich habe 3 Beiträge markiert, dh total_flagged sollte gleich 3 sein, aber es bleibt bei 0 (keine Änderung).

Hier ist mein Ansatz:

$currentMonth = date('F'); // get month realtime 
$currentYear = date ('Y'); // get year realtime 

$check_month = mysqli_query ($connect, "SELECT * FROM monthly_flagged"); 
$get_month = mysqli_fetch_array ($check_month); 
    $month = $get_month['month']; 
    $year = $get_month['year']; 
    $total_flagged = $get_month['total_flagged']; 

// check if row exists in db for current month/year, else make it. 
$checking_row = mysqli_query($connect, "SELECT * FROM monthly_flagged WHERE month = '$currentMonth' AND year = '$currentYear' LIMIT 1"); 
$check_return = mysqli_num_rows ($checking_row); 

if ($check_return == 0){ 
    $make_row = mysqli_query ($connect, "INSERT INTO monthly_flagged VALUES ('', '$currentMonth', '$currentYear', '')"); 
} 
if ($check_return == 1){ 
    $plusOne = $total_flagged +1; 
    $update_total_flagged = mysqli_query ($connect, "UPDATE monthly_flagged WHERE month = '$currentMonth' AND year = '$currentYear' 
                SET total_flagged = '$plusOne'"); 
} 
+0

nur ein Tipp: 'SET total_flagged = total_flagged + 1' –

+0

Versuchen Sie' if ($ check_return == 1) 'in' if ($ check_return> 0) 'zu ändern und sehen Sie, ob es dann ausgelöst wird. –

+0

@Dagon - Ich versuchte zunächst diesen Ansatz, SET total_flagged = '$ total_flagged' + 1', aber, nie einen solchen Ansatz verwendet, und als es nie funktioniert hat, führte ich zu meinem aktuellen Ansatz – Freddy

Antwort

0

In Ihrem Update-Anweisung haben Sie die WHERE vor dem SET platziert es sein sollte:

UPDATE monthly_flagged 
SET total_flagged = '$plusOne' 
WHERE month = '$currentMonth' AND year = '$currentYear' 

oder ohne plus eine Variable:

UPDATE monthly_flagged 
SET total_flagged = (total_flagged+1) 
WHERE month = '$currentMonth' AND year = '$currentYear' 

Diese Art von Fehlern kann leicht erkannt werden, wenn Sie es sind etwas hinzufügen, um MySQL-Fehler zu fangen (sie werden nicht magisch angezeigt): More info on error reporting

P.S. Ihr Code ist anfällig für SQL-Injections, was bedeutet, dass andere Leute SQL-Code in Ihrer Datenbank ausführen können, einschließlich alles löschen. Sie sollten sich über vorbereitete Aussagen und deren Verwendung informieren!

Verwandte Themen