kostenloser Webspace werbefrei: lima-city


Datensatz mit neuer ID duplizieren (kopieren, klonen)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ekiam

    Kostenloser Webspace von ekiam

    ekiam hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich möchte eine genaue Kopie eines in der Datenbank angelegten Satzes.

    Ich hatte mir vorgestellt das ich über eine Masterseite auf eine Detailseite gehe.
    Nachdem die Detailseite angezeigt ist möchte ich mit einem Button (z.B. KOPIEREN) den genauen Datensatz in die Datenbank abspeichern.
    <HTML>
    <HEAD>
        <TITLE>Eine Datenbank auswählen und Tabelle</TITLE> 
    </HEAD>
    <BODY>
    <?php
    
    // Die Parameter für die Datenbank-Verbindung festlegen
    $servername = "localhost"; 
    $benutzer   = "root";
    $passwort   = "";
    
    // Versuchen, die DB-Verbindung herzustellen
    if ($verbindung = mysql_connect ($servername, $benutzer, $passwort)) {
        echo "Die Verbindung mit der Datenbank auf <B>$servername</B> wurde aufgebaut.<P>";
    } else {
        echo "Der Verbindungsversuch zur DB ist fehlgeschlagen! " . mysql_error(); 
        exit();
    }
    
    $datenbank = "hallo_welt";
    
    // Die Datenbank auswählen
    if (!mysql_select_db ($datenbank)) {
        echo "Die Datenbank konnte nicht ausgewählt werden: " . mysql_error();
        exit();
    } else {
        echo "Die Datenbank <B>$datenbank</B> wurde ausgewählt.<P>";
    }
    
     CREATE TEMPORARY TABLE tmp SELECT * FROM $datenbank WHERE id = $_POST['$row_DetailRS1['ID']'];
     UPDATE tmp SET id = NULL;
     INSERT INTO $datenbank SELECT * FROM tmp;
    
    
    
    // Die Verbindung zur Datenbank schließen
    mysql_close ($verbindung);
    
    ?>
    </BODY>
    </HTML>



    bekomme aber diesen Felder:

    Parse error: syntax error, unexpected 'TEMPORARY' (T_STRING) in C:\xampp\htdocs\system\beispiele\beispiele\dkopieren.php on line 31

    Irgenwie scheine ich auf dem "SCHLAUCH" zu stehen bzw. habe "TOMATEN" auf den Augen.

    Im voraus vielen Dank für Eure Hilfe

    ekiam
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Wenn du das so in deiner PHP-Datei stehen hast, dann kann es nur zu einem Parse Error kommen.

    CREATE TEMPORARY TABLE tmp SELECT * FROM $datenbank WHERE id = $_POST['$row_DetailRS1['ID']'];
     UPDATE tmp SET id = NULL;
     INSERT INTO $datenbank SELECT * FROM tmp;


    Lies dir doch noch mal genau durch, wie du eine MySQL Anweisung in PHP schreibst.

    Mal so als Gedankenstütze mysql_query wäre da wohl nicht ganz so verkehrt.
  4. was wahr ist, ist wahr, du solltest deine sql's via php verarbeiten. und ich weiß es nicht, wie die einstellungen bei xampp sind in punkto temporary tables. hier heißt es: keine 'temporary tables' auf lima-city!

    beweismittel (eingeloggt auf lima via cli):
    fall_1
    mysql> CREATE TEMPORARY TABLE db_xxxxxx_n.tmp SELECT * from db_xxxxxx_n.piwik_user;
    ERROR 1044 (42000): Access denied for user 'USERxxxxxx'@'%' to database 'db_xxxxxx_n'
    fall_2
    mysql> CREATE TABLE db_xxxxxx_n.tmp SELECT * from db_xxxxxx_n.piwik_user;
    Query OK, 1 row affected (0.07 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    nachher steht (bei mir ) in der tabelle
    mysql> select * from db_xxxxxx_n.tmp;
    +-----------+----------+-----------+-----------------------+------------+---------------------+
    | login     | password | alias     | email                 | token_auth | date_registered     |
    +-----------+----------+-----------+-----------------------+------------+---------------------+
    | anonymous | ******* | anonymous | anonymous@example.org | anonymous  | 2013-08-04 17:38:30 |
    +-----------+----------+-----------+-----------------------+------------+---------------------+
    1 row in set (0.05 sec)
    die thematik habe ich schon da im forum geklärt(, aber niemand will mir glauben [man darf mich wieder mal mit minuspunkt abstrafen - danke] ;)

    Beitrag zuletzt geändert: 16.2.2014 2:11:28 von czibere
  5. Autor dieses Themas

    ekiam

    Kostenloser Webspace von ekiam

    ekiam hat kostenlosen Webspace.

    Hallo Zusammen,

    nachdem mir all-in1 einen Hinweis gegeben hat (ich weiss immer noch nicht warum mir mir so ein Missgeschick passiert ist), habe ich immer noch folgendes Problem:

    Ich lese aus einer MYSQL-Tabelle einen Datensatz aus und schreibe diesen in ein ARRAY.
    Suche anschließend den letzten Datensatz ($sql2 = "SELECT * FROM personen ORDER BY personen.ID DESC LIMIT 1";)
    Möchte jetzt zwei Datenfelder ändern und den Datensatz in die DB zurückschreiben (ID habe ich um 1 erhöht)

    Aber es will einfach nicht funktionieren.

    Kann mir bitte jemand anhand eines Beispiels erklären wie man so etwas hinbekommt.

    Vielen Dank im voraus

    Gruß
    EKIAM
  6. Warum ist denn das ID Feld nicht Autoincrement eingestellt? Dann bräuchtest du dich nich um die ID kümmern? Kannst du allenfalls den Programmcode noch posten und vielleicht auch die SQL Fehlermeldung?

    Dann können wir dir besser helfen :-)

    Gruess
  7. Autor dieses Themas

    ekiam

    Kostenloser Webspace von ekiam

    ekiam hat kostenlosen Webspace.

    Hallo meron,

    die ID = Auto-Increment definiert.

    Die Fehlermeldung lautet:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '13;12;Jonny;Jonny;Walker;Walker;1900;1900;Texas;Texas;0;0' at line 1


    Der Code (einige Codezeilen erscheinen unsinnig, aber das sind Tests von mir!)

    <HTML>
    <HEAD>
        <TITLE>Daten kopieren</TITLE> 
    </HEAD>
    <BODY>
    <p>&nbsp;</p>
    <?php
    
    // Die Parameter für die Datenbank-Verbindung festlegen
    $servername = "localhost"; 
    $benutzer   = "root";
    $passwort   = "";
    
    // Versuchen, die DB-Verbindung herzustellen
    if ($verbindung = mysql_connect ($servername, $benutzer, $passwort)) {
        echo "Die Verbindung mit der Datenbank auf <B>$servername</B> wurde aufgebaut.<P>";
    } else {
        echo "Der Verbindungsversuch zur DB ist fehlgeschlagen! " . mysql_error(); 
        exit();
    }
    
    $datenbank = "hallo_welt";
    $tabelle = "personen";
    // Die Datenbank auswählen
    if (!mysql_select_db ($datenbank)) {
        echo "Die Datenbank konnte nicht ausgewählt werden: " . mysql_error();
        exit();
    } else {
        echo "Die Datenbank <B>$datenbank</B> wurde ausgewählt.<P>";
    }
    
    // Welche Tabelle(n) befinden sich in der Datenbank
    $sql300 = "SHOW TABLES FROM $datenbank";
    $result100 = mysql_query($sql300);
    
    if (!$result100) {
        echo "DB Fehler, konnte Tabellen nicht auflisten\n";
        echo 'MySQL Fehler: ' . mysql_error();
        exit;
    }
    
    while ($row = mysql_fetch_row($result100)) {
        echo "Tabelle: {$row[0]}\n";
    };
    
    
    $sql2 = "SELECT * FROM personen ORDER BY personen.ID  DESC LIMIT 1";
    $result = mysql_query($sql2) OR die(mysql_error()); 
    
    $zeile = mysql_fetch_array ($result);
    // print_r($zeile);
    
    $zae = 0;
    $zae = $zeile[0];
    $zae = $zae+1;
    
    
    $zeile[0] = $zae;
    $e_interessen = implode(";",$zeile);
    
    echo "<pre>";
    print_r ( $zeile );
    
    
    mysql_query("Insert into personen select id, vorname, Nachname, geburtsjahr, geburtsort, nummer  from $e_interessen")
    OR die("<br> Error INTO:  <br>".mysql_error());																																								
    
    // Die Verbindung zur Datenbank schließen
    mysql_close ($verbindung);
    
    ?>
    <a href="master100.php" target="_self"> Zur Anzeige </a>
    
    </BODY>
    </HTML>



    Vielen Dank im voraus

    Gruß
    Ekiam

    Beitrag zuletzt geändert: 21.2.2014 7:37:44 von ekiam
  8. Guten morgen

    Ich bin gerade nicht an meinem PC um dies zu verifizieren, aber sollte es nicht folgendermassen heissen:

    INSERT INTO personen (deine Felderliste) VALUES ($e_interessen)


    Das implode muss zudem mit ',' aufgelöst werden, des weiteren muss natürlich Text und Datums in '' gesetzt werden.
    Wenn die Spalte id Autoincrement definiert ist, sollte mysql beim insert automatisch die letzte Nummer+1 eintragen, somit kannst du das ID Feld aus dem Query löschen.

    Hoffe ich konnte weiterhelfen.

    Gruess
  9. Autor dieses Themas

    ekiam

    Kostenloser Webspace von ekiam

    ekiam hat kostenlosen Webspace.

    Hallo meron,

    Ja Du hastest Recht.
    Vielen Dank dafür.

    Aber wenn ich versuche den Datensatz einzufügen kommt die Fehlermeldung:
    Column count doesn't match value count at row 1

    Gut wirst Du jetzt sagen da stimmen die Anzahl der Felder nicht überein (zu wenig / zu viel)

    Ich habe es überprüft. Komme aber zu dem Ergebnis, dass wenn ich mir das implode-Ergebnis anschaue zu folgendem Ergebnis:
    14,13,Max,Max,Mustermann,Mustermann,1940,1940,Kleve,Kleve,301,301

    Wieso ist dort alles doppelt????

    Vielen Dank im voraus

    Gruß
    Ekiam
  10. Hi

    das Problem wird wohl dein Limit Befehl sein, der erste Datensatz den du selektierst ist die 0, gibst du nur eine Zahl beim LIMIT an entspricht das (siehe http://dev.mysql.com/doc/refman/5.1/de/select.html) 0- angegebene Zahl und somit 2 Datensätze.

    Korrekt wäre also SELECT ... LIMIT 0,1

    Das Skript kopiert aber immer nur den letzten Eintrag, ist das korrekt?
    Zudem scheint das Id Problem noch nicht gelöst (Id aus Insert-Statement entfernen, sonst könnte es bei reger Benutzung deines Skripts zu einem Problem führen ...)


    Gruess
    Meron
  11. Autor dieses Themas

    ekiam

    Kostenloser Webspace von ekiam

    ekiam hat kostenlosen Webspace.

    Hallo meron,

    vielen Dank für Deine Antwort.
    Leider bekomme ich das nicht hin.
    Ich habe mir die Seite durchgelesen und Deinen Rat befolgt. Aber ich bekomme immer noch zwei Datensätze angezeigt!

    Gruß
    Ekiam
  12. Hi

    Wie lautet denn nun dein $sql2?

    Wenn der wiefolgt aussieht, dürften eigentlich nicht mehr zwei Datensätze selektiert werden:
    $sql2 = "SELECT * FROM personen ORDER BY personen.ID  DESC LIMIT 0,1";


    Wenn doch dann probiere einmal das folgende (ich nehme an personen.ID ist in der Spalte eindeutig):
    $sql2 = "SELECT * FROM personen WHERE personen.ID = gewünschteID ORDER BY personen.ID  DESC LIMIT 0,1";


    Aber poste doch sonst nocheinmal dein Quellcode denn du nun hast (bin nämlich noch gespannt wegen dem ID-Problem und den '' wie du das gelöst hast).
    Und am besten auch deine Tabellenstruktur (also was für Felder sind darin enthalten und ein paar Beispieldatensätze, dann kann ich mir dies etwas besser vorstellen ;-)

    Aber grundsätzlich: das Skript ist nicht mehr wirklich portabel und da stellt sich die Frage, warum du dies nicht einfach direkt ausprogrammierst halt nur für diese ein Tabelle?

    Gruess
    Meron
  13. 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!