Counter - Kein Update in DB?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • N4N0
    antwortet
    Zitat von h3ll Beitrag anzeigen
    Wenn du willst, dass dir jemand Code schreibt, solltest du ein Jobangebot erstellen.
    Also halten wir mal fest:
    1. Der Einzige, der mir bisher vernünftig geantwortet und geholfen hat, war der User vor dir.
    2. Man antwortet hier nicht auf Fragen, sondern kommt mit Dingen, die nichts mit der eigenen Fragestellung zu tun hat.
    3. Jeder Code, der nicht von einem selbst geschrieben wurde, ist auf gut deutsch "scheiße". So wird es hier einem jedenfalls vermittelt (beißt sich dann allerdings mit deiner Aussage, ein Jobangebot zu stellen)
    4. Um seine Kenntnisse zu verfeinern, und um nicht andauernd Bücher o. Ä. welzen zu müssen, kommt man hierher und bekommt nicht ein wenig geholfen.
    5. Wenn man sonst keine Argumente hat, kommt man dem Hilfebedürftigen dumm und hilft sogar noch weniger als vorher (ist das überhaupt möglich?)


    Hab ich was vergessen?

    Ernsthaft Leute: Ihr seid ne Community, helft aber Leuten, die Rat suchen entweder mit Dingen, die sie bereits wissen und die nicht gefragt waren, oder gar nicht.

    Ich komme hierher, weil ich Hilfe brauche und dann sowas.

    Das geht auch anders. Nochmal: Drauf geschissen, ob der Code eine "riesige Sicherheitslücke" ist oder nicht. Es ging um die Fragestellung, wieso das Script im Debug Modus einwandfrei läuft, beim normalen Aufrufen allerdings mucken mit der Fehlermeldung "Cannot process SQL count totals query" macht.

    Hier noch einmal der Code:

    PHP-Code:
    <?php error_reporting(E_ALL);
           
    $db_host "";
           
    $db_user "";
          
    $db_pass "";
          
    $db_name "";

        
    $link mysqli_connect($db_host$db_user$db_pass$db_name) or die('Cannot connect to database server');
        
        
    // 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 colorcount = colorcount + 1 WHERE colorname = '" $_POST['color_name'] . "'") or die ("Error updating count for " $_POST['color_name']);
        }
        }

        
    // get current color click counts
        
    $rs mysql_query("SELECT * FROM colorcounter") or die('Cannot process SQL count totals query');
        if(
    mysql_num_rows($rs) > 0) {
            while(
    $row mysql_fetch_array($rs)) {
                
    $count[$row['colorname']] = $row['colorcount'];
            }
        }
    ?>
    Und hier das Form-Feld:

    HTML-Code:
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <body>
    <form id="myform" name="myform" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
    <p>Select a color:</p>
    <label id="l_red"><input type="radio" id="r_red" name="color_name" value="red" onclick="this.form.submit();" />Red</label> (<label id="c_red"><?php echo $count['red']; ?></label>) |
    <label id="l_green"><input type="radio" id="r_green" name="color_name" value="green" onclick="this.form.submit();" />Green</label> (<label id="c_green"><?php echo $count['green']; ?></label>) |
    <label id="l_blue"><input type="radio" id="r_blue" name="color_name" value="blue" onclick="this.form.submit();" />Blue</label> (<label id="c_blue"><?php echo $count['blue']; ?></label>) |
    <label id="l_black"><input type="radio" id="r_black" name="color_name" value="black" onclick="this.form.submit();" />Black</label> (<label id="c_black"><?php echo $count['black']; ?></label>)
    </form>
    </body>
    </html>
    // EDIT: Problem gelöst. Erkenntnis gefunden. War nicht der Verdienst dieser Community (oder sonst einer). Danke für nichts.
    Zuletzt geändert von N4N0; 30.03.2015, 22:25.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Wenn du willst, dass dir jemand Code schreibt, solltest du ein Jobangebot erstellen.

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    Könntest du mir dann vielleicht einen Code bereitstellen, der keine Sicherheitslücke ist? Ansonsten hilft mir das hier recht wenig weiter, zumal ich schon lese wie verrückt.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Das Ding ist eine riesige Sicherheitslücke. Bitte entsorgen.

    Und verwende keinen Code, den du irgendwo runderlädst, aber selber nicht verstehst. Das ist ziemlich fahrlässig, da du selber die Codequalität nicht beurteilen kannst.

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    Zitat von fireweasel Beitrag anzeigen
    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?

    Einen Kommentar schreiben:


  • fireweasel
    antwortet
    Zitat von N4N0 Beitrag anzeigen
    Versteh ich nicht, denn so wurde mir die Aufmachung von einem "Experten" dargeboten.
    Hättst du mal lieber einen Fachmann oder Spezialisten befragt ...

    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.

    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.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Zitat von N4N0 Beitrag anzeigen
    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.

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Zitat von N4N0 Beitrag anzeigen
    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.

    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.

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    Zitat von h3ll Beitrag anzeigen
    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

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Zitat von N4N0 Beitrag anzeigen
    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 von N4N0 Beitrag anzeigen
    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.

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    Zitat von wahsaga Beitrag anzeigen
    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?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • N4N0
    antwortet
    HTML-Code:
    <input type="hidden" name="counter" value="<?php ' . mysql_real_escape_string($int_count) . ' ?>">
    Besser so?
    Zuletzt geändert von N4N0; 27.03.2015, 13:23.

    Einen Kommentar schreiben:

Lädt...
X