Mit PHP daten in Mysql datenbank ändern

  • PHP

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Mit PHP daten in Mysql datenbank ändern

    Hallo zusammen,

    Ich versuche über ein Forumlar Daten zu ändern und wieder zu speichern,
    nun habe ich problem mit dem speichern:

    PHP-Quellcode

    1. <?php
    2. include('../db_connect.inc.php');
    3. $id = isset($_POST['id']) ? $_POST['id'] : '';
    4. $name = isset($_POST['name']) ? $_POST['name'] : '';
    5. $vorname = isset($_POST['vorname']) ? $_POST['vorname'] : '';
    6. $festnetz = isset($_POST['festnetz']) ? $_POST['festnetz'] : '';
    7. $handy = isset($_POST['handy']) ? $_POST['handy'] : '';
    8. echo "$id";
    9. echo "$name";
    10. echo "$vorname";
    11. echo "$festnetz";
    12. echo "$handy"
    13. $sql = "UPDATE verzeichniss
    14. SET id = '" .$_POST["id"] . "'
    15. Name = '" . $_POST["name"] . "' ,
    16. Vorname = '" . $_POST["vorname"] . "' ,
    17. Festnetz = '" . $_POST["festnetz"] . "'
    18. Handy = '" . $_POST["handy"] . "'
    19. WHERE id = '" . $_POST["id"] . "' ";
    20. $update = mysql_query($sql);
    21. ?>

    echo gibt mir die Daten aus, also die übergabe funzt jedoch beim schreiben in die Datenbank happert es... ich würde es gerne über mysqli erledigen,
    kann mir jemand helfen?
    Ahoi,

    was hapert denn genau ? Gibt es eine Fehlermeldung ?
    Und hast du es denn schon mit mysqli versucht ?
    Schau mal hier rein.

    PHP-Quellcode

    1. echo "$id";
    wenn du eine Variable ausgibst ist "" übrigens überflüssig. Die Hochkommas sind für strings.

    Interessant finde ich auch deine Abarbeitung, da du die Einträge aus dem Post in Variablen speicherst, dann aber wieder dein Post-Array nutzt ... nutz die Variablen, die sind ja auf Vorhandensein geprüft.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    PHP-Quellcode

    1. SET id = '" .$_POST["id"] . "'
    2. Name = '" . $_POST["name"] . "' ,
    3. Vorname = '" . $_POST["vorname"] . "' ,
    4. Festnetz = '" . $_POST["festnetz"] . "'
    5. Handy = '" . $_POST["handy"] . "'


    du hast hinter SET id = '" .$_POST["id"] . "' ein Kommata vergessen :)
    Des Weiteren könntest du dir mal das hier angucken.
    1. Würde ich Dir raten Prepared Statements zu verwenden, das ist effizienter. Wenn nicht, dann nimm wenigstens MySQLi, wie gesagt.
    2. Escape bitte zunächst mal Deine Parameter, die Du benutzt. Das ist nicht sicher gegen SQL-Injection. Eine weitere Anweisung angefügt und Deine Datenbank ist futsch.
    3. Dann solltest Du Dir überlegen, ob UPDATE wirklich nötig ist. In den meisten Fällen macht es das nur komplizierter und man könnte auch auf Grund der geringen Speichergröße einfach nen Eintrag adden und am Ende alles sortieren beim Auslesen etc.
    Dazu bräuchte man aber nen paar mehr Infos zum Vorhaben.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ja, sogar mehr als ausreichend, hab dir mal eins mit mysqli und eins mit pdo aus einem Projekt zurechtkopiert.

    mysqli
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. include 'config.inc.php';
    3. $pass = '';
    4. $username = '';
    5. $sqlhandle = new mysqli($dbhost, $dbuser, $dbpassword, $dbname);
    6. $statement = $sqlhandle->prepare("SELECT * FROM userdata WHERE username = ? AND password = ?");
    7. $statement->bind_param("ss", $username, $pass);
    8. $statement->execute();
    9. $row = $statement->get_result();
    10. var_dump($row->fetch_all());
    11. $stmt->close();

    pdo
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. include 'config.inc.php';
    3. $username = '';
    4. $password = '';
    5. $pdo_handle = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpassword);
    6. $statement = $pdo_handle->prepare("SELECT * FROM userdata WHERE username = :name AND password = :password");
    7. $statement->bindParam(':name', $username);
    8. $statement->bindParam(':password', $password);
    9. $statement->execute();
    10. $row = $statement->fetch(PDO::FETCH_OBJ);
    11. var_dump($row);
    12. //oder echo $row->spaltenname;



    Schau auch mal hier vorbei:
    php.net/manual/de/book.mysqli.php
    php.net/manual/de/book.pdo.php
    Mal am Rande, schon mal was von SQL-Injections gehört ? Super Globals in SQL-Statements sind nicht nur böse, sondern bieten eine deutlich hohe Gefahr für einen solchen Angriff. Nutze mal lieber PDO oder MySQLi, wobei wenn du sowieso "nur" die Absicht hast, MySQL als DBMS zu nutzen, kannst du durchaus sogar die Performance-Vorteile von MysQLi ausnutzen.
    Wie sieht's mit Escaping der Parameter aus? Hatte das eig. schon alles erläutert.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich würde btw immer ​mysqli_real_escape_string nutzen. Das ist eig. so das einfachste. Muss man halt als Parameter noch zusätzlich die entsprechende SQL-Connection angeben.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Das Anzeigen habe ich nun mit Mysqli i gelöst:

    PHP-Quellcode

    1. <?php
    2. include('../db_connect_i.inc.php');
    3. //sql befehl
    4. $sql = 'SELECT *
    5. FROM verzeichniss';
    6. $erg = $db->query ($sql) or die ("Fehlermeldung=".$db->error());
    7. echo"<table id=\"myTable\" class=\"tablesorter\" rules=\"all\">";
    8. echo"<thead>";
    9. echo"<tr><th>Name</th><th>Vorname</th><th>Festnetz</th><th>Handy</th><th>Löschen</th><th>ändern</tr>";
    10. echo"</thead> ";
    11. echo"<tbody>";
    12. while(($row = $erg->fetch_assoc()) !== Null){
    13. $a=$row["id"];
    14. $b=$row["Name"];
    15. $c=$row["Vorname"];
    16. $d=$row["Festnetz"];
    17. $e=$row["Handy"];
    18. echo"<tr><td>$b</td><td>$c</th><td>$d</td><td>$e</th><td><a href='delete.php?id=".$row["id"]."'>Löschen</td><td><a href='bearbeiten.php?id=".$row["id"]."'>Ändern</tr>";
    19. }
    20. echo"</tbody>";
    21. echo"</table>";
    22. ?>
    23. <form name="' . $id. '" method="post" action="bearbeiten.php">



    Ich weis aber nicht wie ich zu dem Update befehl komme.
    Einfach in den SQL-Befehl das reinschreiben?
    Wobei ich schon mal gesagt habe: Überlege, ob das wirklich Sinn macht, denn mit dem Update machst Du Dir manchmal eventuell mehr Probleme als so schon. Würde von daher einfach nen Eintrag hinzufügen. Die Menge an Speicher, die da verbraucht wird ist sooo gering.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich würde gerne mit Update arbeiten sorry,
    Nun ich habe es mal so geschafft:

    PHP-Quellcode

    1. <?php
    2. include('../db_connect_i.inc.php');
    3. $id = isset($_POST['id']) ? $_POST['id'] : '';
    4. $name = isset($_POST['name']) ? $_POST['name'] : '';
    5. $vorname = isset($_POST['vorname']) ? $_POST['vorname'] : '';
    6. $festnetz = isset($_POST['festnetz']) ? $_POST['festnetz'] : '';
    7. $handy = isset($_POST['handy']) ? $_POST['handy'] : '';
    8. // show errors (remove this line if on a live site)
    9. mysqli_report(MYSQLI_REPORT_ERROR);
    10. // MySQL data
    11. //$email = "daniel@world.edu";
    12. //$country = "Indonesia";
    13. $stmt = $db->prepare("UPDATE verzeichniss SET Name = ? WHERE id = ?");
    14. $stmt->bind_param('ss', $name,
    15. $id
    16. );
    17. $stmt->execute();
    18. $stmt->close();
    19. header ("Location:verzeichniss.php");
    20. ?>


    Jetzt habe ich nurnoch das Problem wie ich da 3 weitere Spalten Updaten kann.

    :s
    Du kannst mehrere SQL-Befehle im String angeben.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    das Problem ist wenn ich dies so Löse funktioniert es nicht:

    Quellcode

    1. $stmt = $db->prepare("UPDATE verzeichniss SET Name = ?, Vorname = ? WHERE id = ?");
    2. $stmt->bind_param('ss', $name, $vorname,
    3. $id
    4. );


    die frage ist wie ich die genau aufreihe :)
    Ja kein Wunder, hättest du mal die Links durchforstet, die ich gepostet hab, wüsstest evtl. du woran es liegt :P . Beim binden der Parameter hättest du das erste Argument anpassen müssen, so werden nur zwei Strings erwartet, siehe "ss", du wilsst nun auch eine Integer für die ID binden, also mach mal "ssi" daraus, dann wird String,String,Integer erwartet.

    Siehe hier
    php.net/manual/de/mysqli-stmt.bind-param.php

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdock“ ()

    Haha Perfekt :) Danke

    Quellcode

    1. ​$stmt = $db->prepare("UPDATE verzeichniss SET Name = ?, Vorname = ?, Festnetz = ?, Handy = ? WHERE id = ?");
    2. $stmt->bind_param('ssssi', $name, $vorname, $festnetz, $handy,
    3. $id
    4. );