PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   Archiv / Trash (https://www.php-resource.de/forum/archiv-trash/)
-   -   Counter - Kein Update in DB? (https://www.php-resource.de/forum/archiv-trash/104992-counter-kein-update-in-db.html)

N4N0 27-03-2015 00:03

Counter - Kein Update in DB?
 
Hallo liebe Gemeinde!

Habe folgendes Problem: Ich habe einen Counter, der bei jedem Klick auf den Submit Button, meine DB Tabelle entsprechend updaten soll, das Script allerdings nicht gänzlich tut. Anzumerken sei, dass man darüber hinaus den Zweck angeben muss, weswegen man den Counter klickt (der Sinn in diesem Unterfangen sei mal dahingestellt). Problem: Es wird nur der Zweck und die Zeit geupdatet, nicht aber Counter + 1.

Hier mein Script.

PHP-Code:

        <?php
        
if(!isset($_POST['counter']))
            
$intCount 1;
        else
            
$intCount intval($_POST['counter']) + 1;

        if(isset(
$_GET['id'])) {
        
$id mysql_real_escape_string($_GET['id']);
        
$upSQL 'UPDATE co1 SET offer_counter = \''$int_count .'\', comment = \''mysql_real_escape_string(utf8_decode($_POST['zweck'])) .'\', date_latest = NOW() WHERE kdid = \''$id .'\'';

        if(!
mysql_query($upSQL))
            echo 
'Anfrage fehlgeschlafen. 'mysql_error(); 
        } 
        
?>
        
        <table width="600px" cellspacing="2" cellpadding="2" bgcolor="#E8E9EF">
            <tr>
                <form name="offer" action="" method="post" accept-charset="UTF-8" />
                    <td width="300px" align="LEFT">
                        <input type="text" size="25" name="zweck" placeholder="Bitte Zweck angeben" value="" required>
                        <input type="hidden" name="counter" value="<?=$int_count?>" />
                        <input type="hidden" name="versteckt">
                    </td>
                    <td width="300px" align="RIGHT">
                        <input type="submit" name="plus" value="Angebot erstellen" />
                    </td>
                </form>
            </tr>
        </table>

Mir ist aufgefallen, dass wenn ich manuell über phpmyadmin die Werte besagtes Datensatzes ändere, er im Bereich offer_counter den von mir manuell eingetragenen Wert mit 1 ersetzt, anstelle +1 zu machen.

Bin echt ratlos! :confused:

Kropff 27-03-2015 11:17

Es gibt einen Unterschied zwischen $intCount und $int_count.

Peter

N4N0 27-03-2015 13:12

Mein Gott wie banal! Danke dir! Es funktioniert! :danke:

Manchmal sieht man den Wald vor lauter Bäumen nicht!

Aber anbei noch zwei Fragen:
1. Warum ist die Zeit, die mit dem Befehl "NOW()" aktualisiert wird, immer eine Stunde von der normalen Zeit versetzt? Beispiel: Wir haben 13:10 Uhr und das System zeigt an, dass die letzte Änderung um 12:10 Uhr erfolgt ist.

2. Wie bekomme ich meine Seite dazu, NACH dem DB Update neuzuladen, um die Ergebnisse direkt anzuzeigen?

Liebe Grüße,
N4N0

wahsaga 27-03-2015 14:05

Dass diesen Counter jeder Benutzer manipulieren kann, indem er einfach das hidden field vor dem Absenden manipuliert, ist dir aber klar …?

N4N0 27-03-2015 14:18

HTML-Code:

<input type="hidden" name="counter" value="<?php ' . mysql_real_escape_string($int_count) . ' ?>">
Besser so? :)

h3ll 27-03-2015 18:50

Was hat mysql_real_escape_string() in der HTML-Ausgabe verloren?

N4N0 27-03-2015 20:47

Da mir in den Raum geworfene Sätze nicht wirklich weiterhelfen und das nicht Gegenstand meiner Frage ist: Keiner einen Tipp zur Ausgangsfrage?


Liebe Grüße,
N4N0

wahsaga 27-03-2015 20:54

Na vielleicht checkst du erst mal, ob dein hidden field überhaupt den Wert hat, den du annimmst …?

N4N0 27-03-2015 22:44

Zitat:

Zitat von wahsaga (Beitrag 670764)
Na vielleicht checkst du erst mal, ob dein hidden field überhaupt den Wert hat, den du annimmst …?

Und inwiefern hat das jetzt mit Frage 1, bzw. 2 zu tun?

h3ll 27-03-2015 23:38

Zitat:

Zitat von N4N0 (Beitrag 670759)
1. Warum ist die Zeit, die mit dem Befehl "NOW()" aktualisiert wird, immer eine Stunde von der normalen Zeit versetzt? Beispiel: Wir haben 13:10 Uhr und das System zeigt an, dass die letzte Änderung um 12:10 Uhr erfolgt ist.

Wahrscheinlich läuft dein Datenbankserver in einer anderen Zeitzone.

Zitat:

Zitat von N4N0 (Beitrag 670759)
2. Wie bekomme ich meine Seite dazu, NACH dem DB Update neuzuladen, um die Ergebnisse direkt anzuzeigen?

Indem du das EVA-Prinzip einhältst und nicht Verarbeitung mit Ausgabe vermischst. Zum Beispiel Datenbankabfragen haben inmitten der HTML-Ausgabe nichts verloren.

Außerdem solltest du generell deinen Code überarbeiten. Der HTML-Code hat sehr viele Fehler. Bitte mal die HTML-Grundlagen aneignen, bevor man sich an PHP heranwagt.

Und die mysql_* Funktionen sind veraltet und sollten nicht mehr verwendet werden. Verwende stattdessen mysqli oder PDO.

utf8_decode() ist Quatsch. Sorge einfach dafür, dass du überall die richtige Kodierung verwendest.

N4N0 28-03-2015 00:54

Zitat:

Zitat von h3ll (Beitrag 670766)
Indem du das EVA-Prinzip einhältst und nicht Verarbeitung mit Ausgabe vermischst. Zum Beispiel Datenbankabfragen haben inmitten der HTML-Ausgabe nichts verloren.

Außerdem solltest du generell deinen Code überarbeiten. Der HTML-Code hat sehr viele Fehler. Bitte mal die HTML-Grundlagen aneignen, bevor man sich an PHP heranwagt.

Versteh ich nicht, denn so wurde mir die Aufmachung von einem "Experten" dargeboten. Wo hat mein HTML Code denn "sehr viele Fehler"? Und was meinst du mit "Datenbankabfragen inmitten der HTML Ausgabe"? Wie soll das Problem sonst zu lösen sein, wenn man im Netz nichts findet und mir die Lösung als solches präsentiert wurde?

Hast du einen Denkanstoß wie das mit dem Counter sonst realisierbar ist?

Liebe Grüße,
N4N0

wahsaga 28-03-2015 01:24

Zitat:

Zitat von N4N0 (Beitrag 670767)
Wo hat mein HTML Code denn "sehr viele Fehler"?

Zum Beispiel die ungültige Verschachtelung – tr darf kein form als Kindelement enthalten. Entweder muss das Formular um die gesamte Tabelle gelegt werden, oder innerhalb einer einzigen Tabellenzelle sein.

Zitat:

Und was meinst du mit "Datenbankabfragen inmitten der HTML Ausgabe"?
EVA-Prinzip wurde schon genannt.

In einem sauberen Script verarbeitet man erst alle Eingabewerte und besorgt sich die nötigen Ausgabedaten, bevor man mit der Ausgabe anfängt.

h3ll 28-03-2015 07:40

Zitat:

Zitat von N4N0 (Beitrag 670767)
Wo hat mein HTML Code denn "sehr viele Fehler"?

<form> in <tr> nicht erlaubt.

"px" im width-Attribut ist Quatsch.

Tabellen sollten nicht fürs Layout missbraucht werden.

Formatierungen (Breiten, Abstände, Farben, usw.) gehören in eine CSS-Datei und nicht in HTML-Attribute.

fireweasel 29-03-2015 13:03

Zitat:

Zitat von N4N0 (Beitrag 670767)
Versteh ich nicht, denn so wurde mir die Aufmachung von einem "Experten" dargeboten.

Hättst du mal lieber einen Fachmann oder Spezialisten befragt ... ;)

Zitat:

Hast du einen Denkanstoß wie das mit dem Counter sonst realisierbar ist?
Die Variable einfach nicht zum Browser des Endusers durchreichen. Es reicht doch, wenn du direkt im PHP-Script auf dem Server die Variable um eins hochzählst, wenn die Formulareingaben erfolgreich überprüft wurden.

Zitat:

Da mir in den Raum geworfene Sätze nicht wirklich weiterhelfen ...
Wann immer du Benutzereingaben in HTML einbettest, benutze htmlspecialchars(). Mysql_real_escape_string() ist fürs Einbauen von Benutzereingaben in SQL-Queries gedacht.

N4N0 30-03-2015 02:16

Zitat:

Zitat von fireweasel (Beitrag 670774)
Hättst du mal lieber einen Fachmann oder Spezialisten befragt ... ;)



Die Variable einfach nicht zum Browser des Endusers durchreichen. Es reicht doch, wenn du direkt im PHP-Script auf dem Server die Variable um eins hochzählst, wenn die Formulareingaben erfolgreich überprüft wurden.


Wann immer du Benutzereingaben in HTML einbettest, benutze htmlspecialchars(). Mysql_real_escape_string() ist fürs Einbauen von Benutzereingaben in SQL-Queries gedacht.


Danke für die Hilfe! Hab jetzt mal einen anderen Counter getestet, der von Fehlermeldungen nur so übergesprudelt hat. Hab alle bis auf einen ausmerzen können. Den letzten finde ich aber ums Verrecken nicht.

Laut Debugging, kommt er mir mit "Cannot process SQL count totals query". Die Fehlermeldung in Zeile 29. Aber selbst eine oder mehrere Zeilen vorher lassen mich weiterhin ratlos dastehen. Vielleicht liegt's auch an der Uhrzeit ..

PHP-Code:

<?php
$link 
mysqli_connect('''''') or die('Cannot connect to database server');
mysql_select_db('') or die('Cannot select database');
// if this is a postback ...
if(isset($_POST['color_name'])) {
// create array of acceptable values
$ok = array('red''green''blue''black');
// if we have an acceptable value for color_name ...
if(in_array($_POST['color_name'], $ok)) {
// update the counter for that color
$q mysql_query("UPDATE colorcounter SET color_count = color_count + 1 WHERE color_name = '" $_POST['color_name'] . "'") or die ("Error updating count for " $_POST['color_name']);
}
}
// get current color click counts
$rs mysql_query("SELECT color_count, color_name FROM colorcounter") or die('Cannot process SQL count totals query');
if(
mysql_num_rows($rs) > 0) {
while(
$row mysql_fetch_array($rs)) {
$count[$row['color_name']] = $row['color_count'];
}
}
?>

Jemand ne Idee? :confused:


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:55 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG