Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Doppelter Eintrag vermeiden in Datenbank    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
thorsten
Mitglied
Neuling


Dabei seit: 06.05.2018
Herkunft:
Posts: 2
     Doppelter Eintrag vermeiden in Datenbank Zitat | Bearbeiten

Hallo erstmal,

Ich bin mir sicher das ich hier richtig bin mit meiner Frage, ...!

Also ich bin noch ein Neuling in sachen PHP und SQL und brauche mal einen Gedankenanstoss oder ein bisschen Hilfe bei meinem Vorhaben.

Zuerstmal den Script:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
<?php

try {
    
$conn = new PDO("mysql:host=$servername;dbname=$dbname"$username$password);
    
$conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
    
$sql "INSERT INTO history (trackimg, artist, title, date, time, year, monthly, day)
    VALUES ('
$trackimg', '$artist', '$title', '$date', '$time', '$year', '$monthly', $day)";
    
$conn->exec($sql);
    
$last_id $conn->lastInsertId();
    echo 
"New record created successfully. Last inserted ID is: " $last_id;
    }
catch(
PDOException $e)
    {
    echo 
$sql "<br>" $e->getMessage();
    }    
$conn null;


Soweit funktioniert alles perfekt, aber bei jeden cronjob request wird der Eintrag wiederholt und alles landet mehrfach in der Datenbank.
Kann mir bitte jemand helfen um dieses kleine Problem zu beseitigen?

Gruss
Thorsten

Grund des Bearbeitens: Code formatiert und schön gemacht.




Post wurde schon 1x editiert, das letzte mal am 17.03.2019 um 00:30 von Htaccess
10.03.2019, 10:35 Profil | PM | E-Mail  
asdf
Mitglied
Guter User


Dabei seit: 26.10.2009
Herkunft: keine Angabe
Posts: 420
      Zitat | Bearbeiten

Verstehe ich das richtig, du willst nur einen Eintrag und dieser soll sich immer aktualisieren? Dann müsstest du nur einmalig "INSERT INTO" SQL-Befehl ausführen (oder manuell erstellen) und anschliessend mit "UPDATE" dieser Eintrag aktualisieren.


10.03.2019, 11:06 Profil | PM | E-Mail  
Htaccess
Mitglied
Sehr guter User


Dabei seit: 22.08.2010
Herkunft: Deutschland
Posts: 692
      Zitat | Bearbeiten

Guten Abend thorsten,

wenn ich das richtig verstanden habe, möchtest du einen Verlauf der zuletzt abgespielten Songs in deine Datenbank eintragen und dieses Script soll sich sekündlich als Cronjob wiederholen.

Als Gedankenanstoss gebe ich dir mit, dass du eine Überprüfung machen solltest, welches der letzte Eintrag in der Datenbank war. Dies machst du am besten damit, indem du zwei Arrays miteinander vergleichst.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<?php

/**
 * Hinweis: Dieser Code ist ungetestet, da im Ausgangspost nicht der komplette Code veröffentlicht worden ist.
 */
$track = array(
  
'trackimg' => $trackimg,
  
'artist' => $artist,
  
'title' => $title,
);

try {
  
$conn = new PDO("mysql:host=$servername;dbname=$dbname"$username$password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  
$conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

  
$q $conn->query('SELECT trackimg, artist, title FROM history ORDER BY history_id DESC LIMIT 1');
  
$last_row $q->fetchAll();

  if (
array_diff($track$last_row[0]) == null) {
    
$ins $conn->prepare("INSERT INTO history (trackimg, artist, title) VALUES (?, ?, ?)");

    if (
$ins->execute(array($track['trackimg'], $track['artist'], $track['title']))) {
      echo 
"New record created. Last inserted ID is: " $conn->lastInsertId();
    }
  }
} catch(
PDOException $e) {
  die(
'Error occurred: ' $e->getMessage());
}
Des weiteren gebe ich dir mit, dass du dir nochmal Gedanken über deine Datenbank machen solltest, da du Einträge mit multiplen Daten speicherst. Ich spreche hier explizit von date, time, year, monthly, day. Sinnvoller wäre es, wenn du einen timestamp in die Datenbank speicherst und nach dieser sortierst. Wenn du diese in deiner Oberfläche ausgeben möchtest, kannst du die DateTime Klasse verwenden. Dies wäre sinnvoller und auch effizienter


LG
Htaccess




Post wurde schon 6x editiert, das letzte mal am 18.03.2019 um 02:59 von Htaccess
17.03.2019, 01:26 Profil | PM | E-Mail  
thorsten
Mitglied
Neuling


Dabei seit: 06.05.2018
Herkunft:
Posts: 2
      Zitat | Bearbeiten

Hallo erstmal htaccess,

Zu der Datum und Zeit in der Datenbank ist deine Idee besser, man lernt eben nicht aus und danke dazu.
Und zu deiner PDO und Funktion sieht es ganz gut aus, aber die Songeintraege rasseln immer noch mehrfach in die Datenbank.
Kann ich nochmal deine Hilfe mit Kniefall in Anspruch nehmen?


15.04.2019, 17:11 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Doppelter Eintrag vermeiden in Datenbank   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz