kostenloser Webspace werbefrei: lima-city


MySQL UPDATE

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Abend,
    Ich habe folgendes Script geschrieben, um um mit Hilfe eines Formulars meine Gästebucheinträge zu bearbeiten.
    <?php
      $abfrage = "SELECT name, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC";
      $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
        $mail = $row->mail;
        $name = $row->name;
        $date = $row->date;
        $kommentar = $row->kommentar;
        $homepage = $row->homepage;
        $email = "$mailus";
        echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">";
    	echo "<input type='text' name='name' value='$name'>";
    	echo "<input type='text' name='mail' value='$mail'>";
    	echo "<input type='text' name='homepage' value='$homepage'>"; 
    	echo "<input type='text' name='kommentar' value='$kommentar'>"; 
    	echo "<input type='hidden' name='date' value='$date'>"; 
    	echo "<input type='submit' name='submit' value='Ändern'>";
    	echo "</form>";
        }
    
        if ($_POST) {
        $name = $_POST["name"];
        $homepage = $_POST["homepage"];
        $kommentar = $_POST["kommentar"];
        $mail = $_POST["mail"];
        $date = $_POST["date"];
    
     $eintrag = "UPDATE gaestebuch SET name = '$name', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE date = '$date'";
     $eintragen = mysql_query($eintrag);
    }
      ?>


    Dieses Script Updated zwar den gewählten Eintrag, dubliziert ihn allerdings auch. Was hab ich hier denn falsch gemacht?

    Grüßle Fabi
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich sehe im Moment keinen Fehler, aber kann dir einen Tipp geben, der dein Problem eventuell löst: Orientiere dich bei Datenbank-Geschichten mit Wiedererkennung nicht an Datum und Uhrzeit, sondern an einer eindeutigen ID. Mit dieser kannst du dann Where-Bedingungen stellen, da sie eindeutig ist. Es ist möglich, dass es 10 Datensätze gibt, die das selbe Datum haben, aber es wird garantiert keine 2 Datensätze mit der selben ID geben.
  4. Ergänzend dazu sollte man einem Tabellenfeld nicht den Namen "Name" geben, ebenso wenig wie einer Variablen. Da sich name oftmals auch als Schlüsselwort in Programmiersprachen enthalten ist das immer sehr gefährlich.
  5. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Hmmm... Die besagten Fehler wären nun alle verbessert. Jeder Eintrag hat nun eine 16-stellige ID und "Name" ist jetzt "Username".
    Es tut trotzdem nicht :mad:.
  6. Die ID ist ein Wert (Feld) in der Datenbank, der bei normalerweise 1 beginnt und soweit hochgezählt wird, wie notwendig, so dass kein Wert doppelt vorkommt unter ID. Deshalb verstehe ich die 16-stellige ID jetzt nicht bei dir. Aber egal, hauptsache du hast das Feld im phpmyadmin auf "auto_increment" gesetzt.


    Nachdem du ja nun einiges ausgebessert hast, kannst du mal den aktuellen Code mit Verbesserungen posten?
  7. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Hm... Was bitte ist "auto_increment"? :confused: Sry hab wenig Ahnung von Datenbanken. Ich habs einfach so gemacht, dass
    $id = rand(100000,10000000000000000);
    ist.
  8. Da könnte ja theoretisch dennoch die gleiche ID herauskommen, so wie du das machst.
    Du musst ein Feld in der Tabelle der Datenbank anlegen. Dieses nennst du meinetwegen "id".
    Datentyp sollte dann "integer" sein und dort gibt es dann eine Funktionalität welche sich autoincrement nennt.
    Diese macht eigentlich folgendes:

    Die id beginnt bei Datensatz 1 mit 1 und wird mit jedem Datensatz um eins erhöht.
    Datensatz 2 bekommt also ID 2 und so weiter und so fort.

    Damit vermeidet man zweideutige Datensätze.


    Zu sehen auf diesem Screenshot beim anlegen einer Tabelle (grün unterlegt)
    http://karpfen.lima-city.de/autoincrement.JPG

    Beitrag zuletzt geändert: 19.12.2009 21:04:58 von karpfen
  9. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Hmm....
    SQL-Befehl:


    MySQL meldet:
    #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key


    MySQL mag nicht :confused:
  10. Dieses Feld sollte dann schon der Primary Key sein :)

    Kannst du denn mal die Struktur deiner Tabelle hier posten?
  11. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    `username` varchar(100) NOT NULL,
      `homepage` varchar(100) NOT NULL,
      `mail` varchar(100) NOT NULL,
      `kommentar` text NOT NULL,
      `date` timestamp NOT NULL default CURRENT_TIMESTAMP,
      `id` varchar(100) NOT NULL


    So siehts bis jetzt aus...
  12. Ich hab da mal ne Idee zum Thema doppelter Eintrag:

    Du prüfst beim ändern des Eintrages ob es ein $_POST gibt.
    Wenn ja, dann wird geändert.

    Kann es sein, dass du irgendwo in dem Script auch prüfst, ob es ein $_POST gibt und dann einen Eintrag hinzufügst?

    Kann das sein?
  13. fabian-riedel schrieb:
    `username` varchar(100) NOT NULL,
      `homepage` varchar(100) NOT NULL,
      `mail` varchar(100) NOT NULL,
      `kommentar` text NOT NULL,
      `date` timestamp NOT NULL default CURRENT_TIMESTAMP,
      `id` varchar(100) NOT NULL


    So siehts bis jetzt aus...


    Mach aus dem Feld 'id' einen Primary Key und setze es auf auto_increment. Dann sehen wir weiter!
  14. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Das Feld 'ID' ist nun ein Primary Key allerdings meldet MySQL:
    Fehler
    
    SQL-Befehl:
    
    ALTER TABLE `gaestebuch` CHANGE `id` `id` VARCHAR( 100 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AUTO_INCREMENT
    
    MySQL meldet: 
    #1063 - Incorrect column specifier for column 'id'


    Was bedeutet das jetzt?
    Grüßle Fabi
  15. Du darfst dieses Feld nicht als varchar machen, sondern bei Datentyp integer nehmen.
  16. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Oh... Sorry, hab bin wie gesagt Anfänger in PHP und MySQL... Allerdings kommt nun die Nachricht:
    Fehler
    
    SQL-Befehl:
    
    ALTER TABLE `gaestebuch` CHANGE `id` `id` INT( 100 ) NOT NULL AUTO_INCREMENT
    
    MySQL meldet:
    #1062 - Duplicate entry '2147483647' for key 1
  17. Das ist, weil nun ein Wert 2147483647 doppelt in deinem Feld "id" vorkommt. Versuch mal alle Datensätze im Feld "id" von 1 bis x hochzunummerieren. Ich hoffe du hast noch nicht so viele Datensätze drin :biggrin:
  18. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Sieht nun so aus:

    <h2>Gästebuch</h2>
    Ich würde mich sehr über einen Eintrag in mein Gästebuch freuen - auch Lob und Kritik.<br><br>
    <form name="gaestebuch" method="post" action="http://fabian-riedel.lima-city.de/index.php?url=gaestebuch" onsubmit="return chkFormular()">
    <table style="text-align: left;">
      <tbody>
        <tr>
          <td style="width: 40%; text-align: right;">Name</td>
          <td style="width: 20%;"></td>
          <td style="width: 40%;"> <input value="Name" name="username" type="text"></td>
        </tr>
        <tr>
          <td style="text-align: right;">Homepage</td>
          <td></td>
          <td> <input value="http://" name="homepage"
     type="text">
          </td>
        </tr>
        <tr>
          <td style="text-align: right;">Email</td>
          <td></td>
          <td>
          <input value="Email" name="mail" type="text"></td>
        </tr>
        <tr>
          <td style="text-align: right;">Kommentar</td>
          <td></td>
          <td>
    <input value="Kommentar" name="kommentar" type="text">
          </td>
        </tr>
        <tr>
          <td style="text-align: right;"><input
     class="button" style="border: none; background-color: #fff; color: #000; padding-right: 0px;" type="reset">&nbsp;
          </td>
          <td style="text-align: center;"> </td>
          <td>
          <input value="Eintragen" class="button"
     type="submit"></td>
        </tr>
      </tbody>
    </table>
    </form>
    <br><br>
    <?php
    if ($_POST) {
     $username = $_POST["username"];
     $homepage = $_POST["homepage"];
     $kommentar = $_POST["kommentar"];
     $mail = $_POST["mail"];
    
    
     $eintrag = "INSERT INTO gaestebuch (username, homepage, mail, kommentar) VALUES ('$username', '$homepage', '$mail', '$kommentar')";
     $eintragen = mysql_query($eintrag);
    }
      ?>
    
      <?php
      $abfrage = "SELECT username, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC";
      $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
        $mailus = $row->mail;
        $namus = $row->username;
        $datus = $row->date;
        $kommentarus = $row->kommentar;
        $homepagus = $row->homepage;
        $email = "$mailus";
        $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=40";
        $size = 40;
        $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5( strtolower($email) )."&default=".urlencode($default)."&size=".$size; 
        $eintrag = "<div class=\"gb_eintrag\"><div class=\"gbpic\"><img src=\"$grav_url\"></div><div class=\"eintrag\" style=\"background-color: #fff;\"><span class=\"autor\"><a href=\"$homepagus\" title=\"$mailus\" target=\"_blank\">$namus</a> schrieb am $datus:</span><br><div style=\"padding-top: 5px;\">$kommentarus</div></div></div><br>";
        echo $eintrag;
        }
    
      ?>
    <br><br>
    
    
    Ab hier wird nun editiert... 
    
    
    
      <?php
      $abfrage = "SELECT username, homepage, mail, kommentar, id FROM gaestebuch ORDER BY date DESC";
      $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
        $mail = $row->mail;
        $username = $row->username;
        $id = $row->id;
        $kommentar = $row->kommentar;
        $homepage = $row->homepage;
        $email = "$mailus";
        echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">";
    	echo "<input type='text' name='username' value='$username'>";
    	echo "<input type='text' name='mail' value='$mail'>";
    	echo "<input type='text' name='homepage' value='$homepage'>"; 
    	echo "<input type='text' name='kommentar' value='$kommentar'>"; 
    	echo "<input type='hidden' name='id' value='$id'>"; 
    	echo "<input type='submit' name='submit' value='Ändern'>";
    	echo "</form>";
        }
    
        if ($_POST) {
        $username = $_POST["username"];
        $homepage = $_POST["homepage"];
        $kommentar = $_POST["kommentar"];
        $mail = $_POST["mail"];
        $id = $_POST["id"];
    
     $eintrag = "UPDATE gaestebuch SET username = '$username', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE id = '$id'";
     $eintragen = mysql_query($eintrag);
    }
      ?>


    Beitrag zuletzt geändert: 20.12.2009 13:51:36 von fabian-riedel
  19. Versuchs mal so:

    <h2>Gästebuch</h2>
    Ich würde mich sehr über einen Eintrag in mein Gästebuch freuen - auch Lob und Kritik.<br><br>
    <form name="gaestebuch" method="post" action="http://fabian-riedel.lima-city.de/index.php?url=gaestebuch" onsubmit="return chkFormular()">
    <table style="text-align: left;">
      <tbody>
        <tr>
          <td style="width: 40%; text-align: right;">Name</td>
          <td style="width: 20%;"></td>
          <td style="width: 40%;"> <input value="Name" name="username" type="text"></td>
        </tr>
        <tr>
          <td style="text-align: right;">Homepage</td>
          <td></td>
          <td> <input value="http://" name="homepage"
     type="text">
          </td>
        </tr>
        <tr>
          <td style="text-align: right;">Email</td>
          <td></td>
          <td>
          <input value="Email" name="mail" type="text"></td>
        </tr>
        <tr>
          <td style="text-align: right;">Kommentar</td>
          <td></td>
          <td>
    <input value="Kommentar" name="kommentar" type="text">
          </td>
        </tr>
        <tr>
          <td style="text-align: right;"><input
     class="button" style="border: none; background-color: #fff; color: #000; padding-right: 0px;" type="reset">&nbsp;
          </td>
          <td style="text-align: center;"> </td>
          <td>
          <input value="Eintragen" class="button" name="eintrag"
     type="submit"></td>
        </tr>
      </tbody>
    </table>
    </form>
    <br><br>
    <?php
    if (isset($_POST['eintrag')) {
     $username = $_POST["username"];
     $homepage = $_POST["homepage"];
     $kommentar = $_POST["kommentar"];
     $mail = $_POST["mail"];
    
    
     $eintrag = "INSERT INTO gaestebuch (username, homepage, mail, kommentar) VALUES ('$username', '$homepage', '$mail', '$kommentar')";
     $eintragen = mysql_query($eintrag);
    }
      ?>
    
      <?php
      $abfrage = "SELECT username, homepage, mail, kommentar, date FROM gaestebuch ORDER BY date DESC";
      $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
        $mailus = $row->mail;
        $namus = $row->username;
        $datus = $row->date;
        $kommentarus = $row->kommentar;
        $homepagus = $row->homepage;
        $email = "$mailus";
        $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=40";
        $size = 40;
        $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5( strtolower($email) )."&default=".urlencode($default)."&size=".$size; 
        $eintrag = "<div class=\"gb_eintrag\"><div class=\"gbpic\"><img src=\"$grav_url\"></div><div class=\"eintrag\" style=\"background-color: #fff;\"><span class=\"autor\"><a href=\"$homepagus\" title=\"$mailus\" target=\"_blank\">$namus</a> schrieb am $datus:</span><br><div style=\"padding-top: 5px;\">$kommentarus</div></div></div><br>";
        echo $eintrag;
        }
    
      ?>
    <br><br>
    
    
    Ab hier wird nun editiert... 
    
    
    
      <?php
      $abfrage = "SELECT username, homepage, mail, kommentar, id FROM gaestebuch ORDER BY date DESC";
      $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
        $mail = $row->mail;
        $username = $row->username;
        $id = $row->id;
        $kommentar = $row->kommentar;
        $homepage = $row->homepage;
        $email = "$mailus";
        echo "<form name=\"gbedit\" method=\"post\" action=\"" . $_SERVER["REQUEST_URI"] . "\">";
    	echo "<input type='text' name='username' value='$username'>";
    	echo "<input type='text' name='mail' value='$mail'>";
    	echo "<input type='text' name='homepage' value='$homepage'>"; 
    	echo "<input type='text' name='kommentar' value='$kommentar'>"; 
    	echo "<input type='hidden' name='id' value='$id'>"; 
    	echo "<input type='submit' name='aendern' value='Ändern'>";
    	echo "</form>";
        }
    
        if (isset($_POST['aendern'])) {
        $username = $_POST["username"];
        $homepage = $_POST["homepage"];
        $kommentar = $_POST["kommentar"];
        $mail = $_POST["mail"];
        $id = $_POST["id"];
    
     $eintrag = "UPDATE gaestebuch SET username = '$username', mail = '$mail', homepage = '$homepage', kommentar = '$kommentar' WHERE id = '$id'";
     $eintragen = mysql_query($eintrag);
    }
      ?>


    Problem behoben, deshalb closed!

    Beitrag zuletzt geändert: 20.12.2009 14:10:10 von karpfen
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!