• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Daten ändern klappt nicht

Status
Für weitere Antworten geschlossen.

HalloHTML

Neues Mitglied
Ich habe ein Beitragssystem mitdem ich einen Beitrag schreibe und andere darauf kommentare geben können:

Es hat alles Wunderbar geklappt bis ich zum Adminteil kam wo ich Probleme mit dem "Beitrag bearbeiten" habe Hier mal der Code:

PHP:
$sql = "UPDATE blog_beitrag SET titel = '" . $_POST["titel"] . "',
beitrag = '" .$_POST["text"] ." ' WHERE id = " .  $_POST["id"];

mysql_query($sql);  

$num = mysql_affected_rows();

if ($num>0)

{
echo "Beitrag wurde ge&auml;ndert!<br>";

echo "<script type='text/javascript'>
 location.href='index.php';
</script>";

echo "<a href='index.php'>Weiter</a>";

}

else
{
echo "<br><br>Es ist ein Fehler aufgetreten<br>";

echo "<a href='bearbeiten.php'>Nochmal versuchen</a><br>";
echo "<a href='index.php'>Zur&uuml;ck zum Admin-Center</a><br>";
}


Die Datenbank verbingung und die Datenbank auswahl ist in einer anderen Datei und mit include eingefügt.

Wenn ich das Script jetzt ausführe, überschreibt das Programm nicht den Vorherigen Eintrag sondern macht einen "klon" vom "falschen" Beitrag und erstellt dann ein Kopie mit dem richtigen Inhalt:

Somit belibt nach dem Editieren noch ein alter Beitrag übrig.

Und noch was: Ich ändere mit der Abfrage NUR 2 Inhalt und noch 3 lasse ich übrig!
 
wenn "id" durch auto_increment läuft, ist es klar, denn dann will SQL jedes mal 'nen neuen eintrag erstellen.
lies' das lieber mit einem array heraus.
außerdem ist das SQL total falsch.
wenn schon, muss es so sein:

PHP:
<?php
$sql = "UPDATE blog_beitrag SET titel = '" . $_POST["titel"] . "',
beitrag = '" .$_POST["text"] ." ' WHERE id = '" .  $_POST["id"]. "' ";
?>

Nils aka XraYSoLo
 
Stimmt, id läuft auf auto_increment aber was kann ich jetzt dagegen tun, also das es einen neuen Auftrag erstellt?

Und wie soll ich es aus einem Array rauslesen? Mein schlaues Buch sagt mir ich soll es so machen. Und phpmyadmin sagt das sql ist richtig mach muss mein where keine hochkommas machen!
 
ok,ok, aberkommen wir jetzt zu meinem problem zurück: Wie kann ich verhindert das SQL einen neuen Auftrag macht?
 
Hm wenns keine anderen Lösungen gibt, Selectest du die ID Spalte, Und machst dann eine Schleife. in die kommt dann dein Update Query mit Vorheriger If Abfrage ob du bei der richtigen ID bist. Das Query musst du dann noch so verändern, das du die ID auf die setzt, die grade in der Schleife ist.
Ich hoffe das war einigermaßen verständlich.
 
Hallo,

also ich kann es nicht nachstellen. Es wäre auch etwas sehr komisch, wenn beim UPDATE-Befehl plötzlich das autoincrement zuschlägt. Dann könnte man in Tabellen mit autoincrement nie wieder Änderungen machen.

Ich tippe als Ursache einen anderen Fehler .... da würden natürlich sinnvolle DEBUG-Ausgaben helfen, z.B. ob tatsächlich der gewünschte Befehl so zusammengebaut wurde.

Ansonsten eignet sich die Programmierung natürlich hervorragend zum Hacken ... Stichwort SQL-Injection.

Gruß,
Jumper, the II.
 
Führ mal dieses Script auf, und sage, was herauskommt
PHP:
<?php
error_reporting(E_ALL);
if(!empty($_POST["title"]))
    $title = $_POST["title"];
else
    echo "Variable <b>Titel</b> ist leer!<br>";
if(!empty($_POST["text"]))
    $text = $_POST["text"];
else
    echo "Variable <b>Text</b> ist leer!<br>";
if(!empty($_POST["id"]))
    $id = $_POST["id"];
else
    echo "Variable <b>Id</b> ist leer!<br>";
$title = mysql_real_escape_string($title);
$text = mysql_real_escape_string($text);
if(!is_int($id))
    echo "ID ist keine Zahl!<br>";
$qry = "UPDATE
                `blog_beitrag`
          SET
                 `titel` = '{$titel}',
                 `beitrag` = '{$text}'
          WHERE
                 `id` = {$id};";
$sql = mysql_query($qry) or die(
        "<p>Bei query <span style='color:green;'>{$qry}</span> ist ein Fehler aufgetaucht!</p>
       <table>
         <tr>
           <td>Fehlernummer:</td>
           <td>".mysql_errno()."</td>
         </tr>
         <tr>
           <td>Fehler:</td>
           <td>".mysql_error()."</td>
         </tr>
       </table>");
if(mysql_affected_rows()<=0)
    echo "Es wurde kein Datensatz beeinflusst!<br>";
else if(mysql_affected_rows()>=2)
    echo "Es wurde mehr als 1 Datensatz beeinflusst!<br>";
else if(mysql_affected_rows()==1)
    echo "Ohne Fehler durchgeführt!<br>";
else
    echo "Fehler beim ausführen des Querys!<br>";
?>
 
Zuletzt bearbeitet:
Ok, ich habe den Fehler gefunden: Diese Datei wurde garnicht aufgerufen sondern eine andere: Deshalb wurden die Sachen nicht ausgeführt sondern eine neue Erstellt.

Achja XraYSoLo, was laberst du für einen Scheiß? Das Ding geht auch mit auto_increment -du kannst ja super SQL, gel:-D
 
Achja XraYSoLo, was laberst du für einen Scheiß? Das Ding geht auch mit auto_increment -du kannst ja super SQL, gel:-D

es war ein rat, bei dem ich dich nicht gezwungen hatte, ihn anzunehmen. etweder man befolgt ihn, oder man lässt es bleiben, so einfach ist das. du hat hier gefragt und erwartet, dass es beantwortet wird. keiner hat dir befohlen hier was zu posten.
wenn du richtig gelesen hättest (wohl gemerkt: möglichkeitsform), wüsstest du, dass ich nicht gesagt habe, dass es mit AI nicht geht, aber das wird dir ja in deiner überaus großen intelligenz sicherlich auch nicht entfallen sein.

noch was: meine fähigkeiten für SQL reichen meinen bedürfnissen nach aus, nur wenn man sich bei einer einfachen abfrage anschickt, sowas zu schreiben und dann noch drauf zu beharren, dass es stimmt, dann frag' ich mich ganz ehrlich, was in deinem angeblich schlauen buch drinsteht. und noch viel mehr, was für einer das ist, der das liest.

Nils aka XraYSoLo
 
es war ein rat, bei dem ich dich nicht gezwungen hatte, ihn anzunehmen. etweder man befolgt ihn, oder man lässt es bleiben, so einfach ist das. du hat hier gefragt und erwartet, dass es beantwortet wird. keiner hat dir befohlen hier was zu posten.
wenn du richtig gelesen hättest (wohl gemerkt: möglichkeitsform), wüsstest du, dass ich nicht gesagt habe, dass es mit AI nicht geht, aber das wird dir ja in deiner überaus großen intelligenz sicherlich auch nicht entfallen sein.

noch was: meine fähigkeiten für SQL reichen meinen bedürfnissen nach aus, nur wenn man sich bei einer einfachen abfrage anschickt, sowas zu schreiben und dann noch drauf zu beharren, dass es stimmt, dann frag' ich mich ganz ehrlich, was in deinem angeblich schlauen buch drinsteht. und noch viel mehr, was für einer das ist, der das liest.

Nils aka XraYSoLo
full ack
@Hallo HTML:
Geht es jetzt oder nicht?
Hast du dir meinen Beitrag durchgelesen?
 
Full Ack / FACK „Full Acknowledge“ „Volle Zustimmung“
Aus der allwissenden Enzyklopädie Wikipedia
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben