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

  • Defence
    hat ein Thema erstellt [Erledigt] Ändern der Datenbank funktioniert nicht!.

    [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" />

  • monolith
    antwortet
    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.

    Einen Kommentar schreiben:


  • hausl
    antwortet
    I can smell SQL Injections...
    http://php-de.github.io/jumpto/sql-injection/
    und Stichwort "Prepared Statements"

    Einen Kommentar schreiben:


  • Defence
    antwortet
    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" />

    Einen Kommentar schreiben:


  • GoodbyeKitty
    antwortet
    I can smell SQL Injections...

    Einen Kommentar schreiben:


  • VPh
    antwortet
    Sinnvoll wäre es auch, vor dem Update mal abzufragen, ob überhaupt Werte per $_POST übertragen wurden.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Defence
    antwortet
    @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?

    Einen Kommentar schreiben:


  • monolith
    antwortet
    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?

    Einen Kommentar schreiben:


  • hausl
    antwortet
    - 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.

    Einen Kommentar schreiben:

Lädt...
X