Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ändern der Datenbank funktioniert nicht!

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ändern der Datenbank funktioniert nicht!

    Hallo, ich arbeite gerade an einem Admin-Bereich und hab zwei Textfelder.
    Mit einem Textfeld, kann ich den Titel der Seite ändern und mit der anderen die Nachricht. Aber irgendwie ändert sich der Titel und die Nachricht nicht.

    Hier der Code:
    PHP-Code:
    <?php
    include ('auth.php');
    include (
    'inc/tpl/head.tpl');
    include (
    'inc/tpl/navi.tpl');
    ?>

    <?php
    require_once('inc/mysql_connectinfo.php');
    $db_link mysqli_connect ($dbhost$dbuser$dbpass$db);
    $title "SELECT title FROM settings";
    $message "SELECT message FROM settings";

    $ergtitle mysqli_query ($db_link$title);
    $ergmessage mysqli_query ($db_link$message);

    if ( ! 
    $ergtitle )
    {
      die(
    'Error: ' mysqli_error());
    }

    if ( ! 
    $ergmessage )
    {
    die (
    'Error: ' mysqli_error());
    }
    ?>
    <!-- Haupteil -->

    <title>Adminbereich - Allgemeine Einstellungen</title>
     
     <body>
    <section>
    <article>

       <h3> Hier können sie allgemeine Einstellungen verwalten.</h3></br>
    <h4>Titel ändern</h4>
    <strong><p>Aktueller Titel: </strong>
    <?php 
    while ($titel mysqli_fetch_array$ergtitleMYSQL_ASSOC))
    {
    echo 
    $titel ['title'];
    }

    $neutit "UPDATE settings SET title = '".$_POST['newtitle']."' WHERE title = '".$titel['title']."' ";

    mysqli_query ($db_link$neutit);
    ?>
    </p>
    <div id="title">
                <form method="post" action="main.php">
                    <label for="newtitle"><strong>Neuer Titel: </strong></label>
                    <input type="text" id="newtitle" name="newtitle">
                    <input type="submit" id="newtitle" value="Titel ändern">
                </form>    
            
        </div>
        </br>
    <hr noshade size="1"> <!-- Erzeugt eine Linie! --> </br>
            
    <h4>Nachricht ändern<h4>
    <strong><p>Aktuelle Nachricht: </strong>

    <?php 
    while ($message mysqli_fetch_array$ergmessageMYSQL_ASSOC))
    {
    echo 
    $message ['message'];
    }

    $neumess "UPDATE settings SET message = '".$_POST['newmessage']."' WHERE message = '".$message['message']."' ";

    mysqli_query ($db_link$neumess);
    ?>
    </p>
    <form method="post" action="main.php">
    <p><strong>Neue Nachricht: </strong>
        <input type="text" id="newmessage" name="newmessage">
        <input type="submit" id="newmessage" value="Nachricht ändern">
    </form>
    </p>
    <p></br>Nach ändern von Einstellungen, laden Sie bitte die Seite neu!</p>
    <p>
    </article>
    </section>
    </body>

    <?php
    include ('inc/tpl/footer.tpl');
    ?>
    <link href="css/site.css" type="text/css" rel="stylesheet" />
    <link href="css/main.css" type="text/css" rel="stylesheet" />


  • #2
    - Schau ob im POST ankommt was du vermutest, wenn nicht prüfe dein HTML
    - Lass dir die query ausgeben, ob die korrekt ist - alleine laufen lassen (PMA)

    etc... Das übliche debugging: http://php-de.github.io/#debugging

    PHP-Code:
    $title "SELECT title FROM settings"
    $message "SELECT message FROM settings"
    Wozu eigentlich 2 queries von der selben Tabelle?

    Code:
    SELECT `title`, `message` FROM `settings`
    reicht doch?!

    Auf jeden Fall sind deine queries anfällig für SQL-Injections, solltest gleich Prepared Statemants verwenden, nachdem du bereits mysqli benutzt.
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Was ist denn das für 'ne Konstruktion?
      PHP-Code:
      while ($titel mysqli_fetch_array$ergtitleMYSQL_ASSOC)) 

      echo 
      $titel ['title']; 


      $neutit "UPDATE settings SET title = '".$_POST['newtitle']."' WHERE title = '".$titel['title']."' "
      Hat die Tabelle settings (immer) nur einen einzigen Datensatz? Dann ist das WHERE überflüssig, du kannst es kürzer so machen:
      PHP-Code:
      $neutit "UPDATE settings SET title = '".$_POST['newtitle']."'"
      Hat es außerdem einen Grund, warum du zwei Forms nutzt - jeweils eins zum Editieren von Titel und Nachricht?

      Kommentar


      • #4
        @hausl
        Werde das Debugging demnächst mal machen!

        @monolith
        Seitdem ich das WHERE weggelassen habe, kann ich die Sachen wieder ändern, allerdings wenn ich den Titel ändere, wird die Nachricht gelöscht und wenn ich die Nachricht ändere wird der Titel gelöscht...

        Jep, ich benutze 2 Formen, für Titel und Nachricht. Wäre es besser ein einziges zu nutzen?

        Kommentar


        • #5
          Ja, soweit ich das beurteilen kann definitiv. Generell, alles in ein Form was zusammen gehört und zusammen passt.

          Kommentar


          • #6
            Sinnvoll wäre es auch, vor dem Update mal abzufragen, ob überhaupt Werte per $_POST übertragen wurden.
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              I can smell SQL Injections...

              Kommentar


              • #8
                Hab mal ein bisschen rumprobiert und jetzt funktioniert es plötzlich.
                Hier nochmal der aktuelle Code:
                PHP-Code:
                <?php
                include ('auth.php');
                include (
                'inc/tpl/head.tpl');
                include (
                'inc/tpl/navi.tpl');
                ?>

                <?php
                require_once('inc/mysql_connectinfo.php');
                $db_link mysqli_connect ($dbhost$dbuser$dbpass$db);
                $title "SELECT title FROM settings";
                $message "SELECT message FROM settings";

                $ergtitle mysqli_query ($db_link$title);
                $ergmessage mysqli_query ($db_link$message);

                if ( ! 
                $ergtitle )
                {
                  die(
                'Error: ' mysqli_error());
                }

                if ( ! 
                $ergmessage )
                {
                die (
                'Error: ' mysqli_error());
                }
                ?>
                <!-- Haupteil -->

                <title>Adminbereich - Allgemeine Einstellungen</title>
                 
                 <body>
                <section>
                <article>

                   <h3> Hier können sie allgemeine Einstellungen verwalten.</h3></br>
                   <p>Bitte geben sie in jedem Feld etwas ein, sonst kann es Probleme geben!</p>
                <h4>Titel ändern</h4>
                <strong>Aktueller Titel:</strong>
                <?php 
                while ($titel mysqli_fetch_array$ergtitleMYSQL_ASSOC))
                {
                echo 
                $titel ['title'];
                }

                 
                $neutit "UPDATE settings SET title = '".$_POST['newtitle']."'";  

                mysqli_query ($db_link$neutit);
                ?>
                <div id="title">
                    <form method="post" action="main.php">
                        <label for="newtitle"><strong>Neuer Titel: </strong></label>
                        <input type="text" id="newtitle" name="newtitle"> </br>
                        <strong>Aktuelle Nachricht: </strong>
                <?php 
                while ($message mysqli_fetch_array$ergmessageMYSQL_ASSOC))
                {
                echo 
                $message ['message'];
                }

                $neumess "UPDATE settings SET message = '".$_POST['newmessage']."'";

                mysqli_query ($db_link$neumess);
                ?>    
                </br>
                        <label for="newmessage"><strong>Neue Nachricht: </strong></label>
                        <input type="text" id="newmessage" name="newmessage"> </br>
                        <input type="submit" id="newtitle" value="Einstellungen ändern">
                    </form>
                        
                    </div>
                    </br>
                <hr noshade size="1"> <!-- Erzeugt eine Linie! -->
                        
                <p></br>Nach ändern von Einstellungen, laden Sie bitte die Seite neu!</p>
                </article>
                </section>
                </body>

                <?php
                include ('inc/tpl/footer.tpl');
                ?>
                <link href="css/site.css" type="text/css" rel="stylesheet" />
                <link href="css/main.css" type="text/css" rel="stylesheet" />

                Kommentar


                • #9
                  I can smell SQL Injections...
                  http://php-de.github.io/jumpto/sql-injection/
                  und Stichwort "Prepared Statements"
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Zitat von Defence Beitrag anzeigen
                    Hab mal ein bisschen rumprobiert und jetzt funktioniert es plötzlich.
                    Naja, aus deiner Sicht mag das überraschend sein aber eigentlich ist klar, dass das nun funktioniert und vorher nicht funktonierte. Wichtig ist nur du verstanden hast warum es nun geht.

                    Kommentar

                    Lädt...
                    X