tutorials.de Buch-Aktion 05/2012
Seite 2 von 3 ErsteErste 123 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
30
ZUGRIFFE
1003
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    danke schön Lime
     

  2. #17
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Hallo zusammen

    dieses thema hat mir sehr weitergeholfen! Nur leider klappts noch nicht ganz mit meinem geänderten code. ich wäre für jeden tipp dankbar!

    PHP-Code:
    <?php
    $id 
    $_GET['id'];
    ?>

    <?php

    $mysqlhost
    ="xxx"// MySQL-Host angeben

    $mysqluser="xxx"// MySQL-User angeben

    $mysqlpwd="xxx"// Passwort angeben

    $mysqldb="xxx"// Gewuenschte Datenbank angeben



    $connection=mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die

    (
    "Verbindungsversuch fehlgeschlagen");



    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen.");

    ?>


    <?php

        $query
    mysql_query("SELECT * FROM 'tabelle' WHERE id={$id}")or die(mysql_error());

        while(
    $row mysql_fetch_object($query)){
          {
         echo 
    'Spalte1: <input type="text" value="'.$row->Spalte1.'" name=Spalte1" /><br />';


    if(isset(
    $_POST["speichern"])){

        
    $Spalte1$_POST["Spalte1"];

        
    $eintrag "UPDATE 'tabelle' SET Spalte1='{$Spalte1}' WHERE id={$id}";
    echo 
    $eintrag; die();
        
    mysql_query($eintrag);
      }

      
    ?>
     

  3. #18
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Einfacher Fehler. Du hast den Tabellennamen in ' gesetzt, wobei man hier entweder keine Zeichen oder ` verwenden muss!

    PHP-Code:
    $querymysql_query("SELECT * FROM `tabelle` WHERE id={$id}")or die(mysql_error()); 
    Dann seh ich da noch ein Chaos bei der while-Schleife, unter anderem zweifache geschwungene Klammer am Anfang, jedoch keine am Ende.

    Unten beim SQL-Query wieder derselbe Fehler wie oben, ` statt ' verwenden!
    ' verwendet man nur bei Values!
     

  4. #19
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Hallo Lime

    vielen Dank für deine Hilfe! Ich habe den Code entsprechend angepasst und ` statt ' verwendet. Darüber hinaus habe ich auch die doppelte geschwungene klammer am anfang der while-schleife entfernt und am ende eine hinzugefügt.

    Ist der Code soweit ok?

    Nun fehlt mir nur noch das tatsächliche abspeichern des feldes in der db. was muss ich hier noch ergänzen?

    Danke für deine Hilfe!

    PHP-Code:
    <?php 
    $id 
    $_GET['id']; 
    ?> 

    <?php 

    $mysqlhost
    ="xxx"// MySQL-Host angeben 

    $mysqluser="xxx"// MySQL-User angeben 

    $mysqlpwd="xxx"// Passwort angeben 

    $mysqldb="xxx"// Gewuenschte Datenbank angeben 



    $connection=mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die 

    (
    "Verbindungsversuch fehlgeschlagen"); 



    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen."); 

    ?> 


    <?php 

        $query
    mysql_query("SELECT * FROM `tabelle` WHERE id={$id}")or die(mysql_error());

        while(
    $row mysql_fetch_object($query)){ 
        
         echo 
    'Spalte1: <input type="text" value="'.$row->Spalte1.'" name=Spalte1" /><br />'


    if(isset(
    $_POST["speichern"])){ 

        
    $Spalte1$_POST["Spalte1"]; 

        
    $eintrag "UPDATE `tabelle` SET Spalte1='{$Spalte1}' WHERE id={$id}"
    echo 
    $eintrag; die(); 
        
    mysql_query($eintrag); 
      } 

      
    ?>

    <?php ?>
     

  5. #20
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Also so wie ich das sehe hast du da eh einen Hund drinnen. Das kann so glaub ich gar nicht funktionieren, bzw. du musst den einen Teil nicht in die while-Schleife schreiben!

    Probiers mal so:

    PHP-Code:
    <?php  
    $mysqlhost
    ="xxx"// MySQL-Host angeben  
    $mysqluser="xxx"// MySQL-User angeben  
    $mysqlpwd="xxx"// Passwort angeben  
    $mysqldb="xxx"// Gewuenschte Datenbank angeben  

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen."); 

    if(isset(
    $_POST["speichern"]))
    {
        
    $Spalte1$_POST["Spalte1"];
        
    $id $_POST['id'];
        
    $eintrag "UPDATE `tabelle` SET Spalte1='{$Spalte1}' WHERE id={$id}";  
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
    } else {
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection!
    }

    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error()); 
    while(
    $row mysql_fetch_object($query))
    {  
        echo 
    '<form method="post" action="diesedatei.php">';
            echo 
    'Spalte1: <input type="text" value="'.$row->Spalte1.'" name=Spalte1" /><br />';
            echo 
    '<input type="hidden" name="id" value="'.$id.'" />';
            echo 
    '<input type="submit" value="Änderungen speichern" name="speichern" />';
        echo 
    '</form>';
    }
    mysql_close($connection);
    ?>
    Ich hoff ich hab nichts übersehen oder so...
     

  6. #21
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Hallo Lime

    danke für deine Hilfe!!

    Ich habe den Code wie folgt verwendet und dabei diese fehlermeldung erhalten

    Parse error: syntax error, unexpected $end in /www/htdocs/... eval()’d code on line 33
    PHP-Code:
    <?php
    $mysqlhost
    ="xxx"// MySQL-Host angeben
    $mysqluser="xxx"// MySQL-User angeben
    $mysqlpwd="xxx"// Passwort angeben
    $mysqldb="xxx"// Gewuenschte Datenbank angeben

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen.");

    if(isset(
    $_POST["speichern"]))
    {
        
    $frage1$_POST["frage1"];
        
    $id $_POST['id'];
        
    $eintrag "UPDATE `tabelle` SET frage1='{$frage1}' WHERE id={$id}";
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
    } else {
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection!
    }

    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error());
    while(
    $row mysql_fetch_object($query))
    {
        echo 
    '<form method="post" action="http://www.domain.de/datenbank-bearbeiten?id='.$id?>">';
            echo 'frage1: <input type="text" value="'.$row->frage1.'" name=frage1" /><br />';
            echo '<input type="hidden" name="id" value="'.$id.'" />';
            echo '<input type="submit" value="Änderungen speichern" name="speichern" />';
        echo '</form>';
    }
    mysql_close($connection);
    ?>
    Ist es richtig, dass man hier verschiedene schreibweisen für die id-variable verwendet?

    - {$id}
    - '.$id.'

    Danke für deine Hilfe!
     

  7. #22
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Hm, ich seh schon wo der Fehler ist. (man sieht es hier im Forum eh sehr gut, weil es farblich hervorgehoben wird...)

    Also die Sache ist die:
    Wenn du ' als Anführungszeichen verwendest, werden Variablen innerhalb nicht geparst.
    Wenn du " als Anführungszeichen verwendest, werden sie geparst.

    PHP-Code:
    //geht nicht
    echo 'Eine Variable $id steht hier.';
    echo 
    'Eine Variable {$id} steht hier.';

    //geht, wobei ich nicht weiß wie gut das funktioniert
    echo "Eine Variable $id steht hier.";

    //geht perfekt
    echo "Eine Variable {$id} steht hier.";
    echo 
    "Eine Variable ".$id." steht hier.";
    echo 
    'Eine Variable '.$id.' steht hier.'
    (€: mir fällt auf, wie gut man das im Forum sieht, was klappt und was nicht. Wenn es klappt ist die Variable blau markiert!)

    Je nach String macht es Sinn, die eine oder andere Art zu wählen.

    So zu deinem Problem und der Lösung: Du hast dich beim Link vom Form verschrieben.

    PHP-Code:
    <?php 
    $mysqlhost
    ="xxx"// MySQL-Host angeben 
    $mysqluser="xxx"// MySQL-User angeben 
    $mysqlpwd="xxx"// Passwort angeben 
    $mysqldb="xxx"// Gewuenschte Datenbank angeben 

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen."); 
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen."); 

    if(isset(
    $_POST["speichern"])) 

        
    $frage1$_POST["frage1"]; 
        
    $id $_POST['id']; 
        
    $eintrag "UPDATE `tabelle` SET frage1='{$frage1}' WHERE id={$id}"
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen."); 
    } else { 
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection! 


    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error()); 
    while(
    $row mysql_fetch_object($query)) 

        echo 
    '<form method="post" action="http://www.domain.de/datenbank-bearbeiten?id='.$id.'">'
            echo 
    'frage1: <input type="text" value="'.$row->frage1.'" name=frage1" /><br />'
            echo 
    '<input type="hidden" name="id" value="'.$id.'" />'
            echo 
    '<input type="submit" value="Änderungen speichern" name="speichern" />'
        echo 
    '</form>'

    mysql_close($connection); 
    ?>
    Ich habe hier die Möglichkeit gewählt, das ganze mit ' auszugeben, da ich mir dann das Escapen der " vom String spare.
    Alternative wäre:
    PHP-Code:
    echo "<form method=\"post\" action=\"http://www.domain.de/datenbank-bearbeiten?id={$id}\">"
    Geändert von Lime (13.04.12 um 17:33 Uhr)
     

  8. #23
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Hallo Lime

    nochmals ein großes dankeschön! die farbliche hervorhebung ist wirklich wunderbar. danke für die beispiele!

    Ich habe den Code nun wie unten umgeschrieben. Nun wird zwar das formular angezeigt und der richtige wert in das input-feld geladen, allerdings wird der bestehende oder veränderte wert aus dem feld & datenbank gelöscht, wenn man auf den "Änderungen speichern"-Button klickt. Scheint als würde der Wert nicht korrekt übermittelt. Hast du eine Idee woran das liegen könnte?


    PHP-Code:
    <?php
    $mysqlhost
    ="xxx"// MySQL-Host angeben 
    $mysqluser="xxx"// MySQL-User angeben 
    $mysqlpwd="xxx"// Passwort angeben 
    $mysqldb="xxx"// Gewuenschte Datenbank angeben 

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen.");

    if(isset(
    $_POST["speichern"]))
    {
        
    $frage1$_POST["artikel_name"];
        
    $id $_POST['id'];
        
    $eintrag "UPDATE `tabelle` SET artikel_name='{$artikel_name}' WHERE id={$id}";
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
    } else {
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection!
    }

    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error());
    while(
    $row mysql_fetch_object($query))
    {
        echo 
    "<form method=\"post\" action=\"http://www.domain.de/testdb?id={$id}\">";
      
            echo 
    'artikel_name: <input type="text" value="'.$row->artikel_name.'" name=artikel_name" /><br />';
            echo 
    '<input type="hidden" name="id" value="'.$id.'" />';
            echo 
    '<input type="submit" value="Änderungen speichern" name="speichern" />';
        echo 
    '</form>';
    }
    mysql_close($connection);
    ?>
    Geändert von Odomanie (13.04.12 um 19:26 Uhr)
     

  9. #24
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Auch hier gibts einen einfachen Grund. Das input-Feld "artikel_name" hat einen Syntaxfehler:

    PHP-Code:
    //so siehts aus
    echo 'artikel_name: <input type="text" value="'.$row->artikel_name.'" name=artikel_name" /><br />';
    //so solls sein
    echo 'artikel_name: <input type="text" value="'.$row->artikel_name.'" name="artikel_name" /><br />';
    //artikel_name hatte ein " zu wenig 
     

  10. #25
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Leider immer noch das gleiche problem. die einträge des felds werden beim absenden einfach gelöscht.

    Laut PHPMyAdmin ist der wert des feldes nicht "NULL", sondern es steht einfach gar nicht drin. als würde man ein leeres feld übergeben?!

    Hier noch der komplette code:
    PHP-Code:
    <?php
    $mysqlhost
    ="xxx"// MySQL-Host angeben 
    $mysqluser="xxx"// MySQL-User angeben 
    $mysqlpwd="xxx"// Passwort angeben 
    $mysqldb="xxx"// Gewuenschte Datenbank angeben 

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen.");

    if(isset(
    $_POST["speichern"]))
    {
        
    $frage1$_POST["artikel_name"];
        
    $id $_POST['id'];
        
    $eintrag "UPDATE `tabelle` SET artikel_name='{$artikel_name}' WHERE id={$id}";
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
    } else {
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection!
    }

    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error());
    while(
    $row mysql_fetch_object($query))
    {
        echo 
    "<form method=\"post\" action=\"http://www.domain.de/testdb?id={$id}\">";  
            echo 
    'artikel_name: <input type="text" value="'.$row->artikel_name.'" name="artikel_name" /><br />';
            echo 
    '<input type="hidden" name="id" value="'.$id.'" />';
            echo 
    '<input type="submit" value="Änderungen speichern" name="speichern" />';
        echo 
    '</form>';
    }
    mysql_close($connection);
    ?>
     

  11. #26
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    PHP-Code:
    <?php 
    $mysqlhost
    ="xxx"// MySQL-Host angeben  
    $mysqluser="xxx"// MySQL-User angeben  
    $mysqlpwd="xxx"// Passwort angeben  
    $mysqldb="xxx"// Gewuenschte Datenbank angeben  

    $connection mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die("Verbindungsversuch fehlgeschlagen."); 
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen."); 

    if(isset(
    $_POST["speichern"])) 

        
    $artikel_name $_POST['artikel_name']; 
        
    $id $_POST['id']; 
        
    $eintrag "UPDATE `tabelle` SET artikel_name='{$artikel_name}' WHERE id={$id}"
        
    mysql_query($eintrag) or die("Änderung fehlgeschlagen."); 
    } else { 
        
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection! 


    $query mysql_query("SELECT * FROM `tabelle` WHERE id={$id}") or die(mysql_error()); 
    while(
    $row mysql_fetch_object($query)) 

        echo 
    "<form method=\"post\" action=\"http://www.domain.de/testdb?id={$id}\">";   
            echo 
    'artikel_name: <input type="text" value="'.$row->artikel_name.'" name="artikel_name" /><br />'
            echo 
    '<input type="hidden" name="id" value="'.$id.'" />'
            echo 
    '<input type="submit" value="Änderungen speichern" name="speichern" />'
        echo 
    '</form>'

    mysql_close($connection); 
    ?>
    Ich habs nicht nochmal ganz durchgemacht, sondern nur den Fehler gesucht.
    Du hast oben die Variable geändert gehabt (von Spalte1 in frage1), jedoch hast du artikel_name als Variable in die DB geschrieben. Da die noch nicht existiert hatte, war sie immer null (leer). So sollte es (endlich) gehen.
    Odomanie bedankt sich. 

  12. #27
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Du bist der Beste! Es funktioniert!! Danke!


    PHP-Code:
    $id $_GET['id'];  //sollte später allerdings noch irgendwie gesichert werden, bevor man auf die DB zugreift. Stichwort SQL-Injection! 
    Wenn ich dafür das hier schreibe:

    PHP-Code:
    $id preg_replace(&#8216;~\D~’, ”, $_GET['id']); 
    ‘~\D~’, heißt eigentlich ‘~\D~’, wird hier falsch dargestellt.

    bekomme ich diese fehlermeldung:

    Parse error: syntax error, unexpected ‘~’
    Gibt es darüber hinaus aus deiner sicht noch potenzielle sicherheitslücken?
    Geändert von Odomanie (13.04.12 um 22:36 Uhr)
     

  13. #28
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Was willst du damit bitteschön erreichen****?
    Du musst eigentlich nur schauen, dass die ID nicht negativ ist und eben eine Zahl ist (ohne Komma).
     

  14. #29
    Odomanie Odomanie ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    23
    Guten Morgen

    ich habe jetzt einfach an den anfang des codes die folgenden zeilen gesetzt, damit kann man nur dann auf die seite zugreifen, wenn die id eine zahl ist. ich denke das sollte reichen, um eine sql injection zu verhindern.

    ist das so ok? würdest du noch etwas verbessern?

    PHP-Code:
    <?php if (!is_numeric($_GET['id']))
    {
        
    header("Location: http://www.domain.de/");
        exit;
    }  
    ?>
    nun muss ich nur noch die eingaben der input-felder filtern/entschärfen.
     

  15. #30
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Eventuell noch überprüfen ob die Zahl über 0 ist, weil negative IDs gibts bekanntlich nicht.

    PHP-Code:
    <?php if(!is_numeric($_GET['id']))
    {
        
    header("Location: http://www.domain.de/");
        exit;
    } else {
       if(
    $_GET['id'] <= 0)
       {
           
    header("Location: http://www.domain.de/");
           exit;
       }
    ?>
     

Ähnliche Themen

  1. [ASP.net] Datenbank bearbeiten etc.
    Von Alaitoc im Forum .NET Web und Kommunikation
    Antworten: 6
    Letzter Beitrag: 04.01.08, 10:14
  2. Antworten: 8
    Letzter Beitrag: 17.09.07, 22:39
  3. Antworten: 11
    Letzter Beitrag: 28.08.06, 15:04
  4. SQL Datenbank bearbeiten
    Von Preisl im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 21.04.05, 13:14
  5. Antworten: 2
    Letzter Beitrag: 06.05.04, 00:00

Stichworte