morris_m Geschrieben 9. Januar 2009 Teilen Geschrieben 9. Januar 2009 Hey, Ich mache gerade ein gewinnspiel fuer ein Kunde und wollte mal ein funktion bauen, die sowas macht. Alle Tipps der User in die neue Tabelle für Tipp Backups speichern Bei Tippabgabe einfach den abgegebenen Tipp mit datum und Uhrzeit in die Datenbank eintragen um ein Backupsystem zu erhalten. Here is a part of the code where i wanna put it if( mysql_num_rows($result) ) { $debug .= 'found some entries'; $debug .= ' '; while( $_POST['home_goal_'.$index] != '') { $debug .= ' home_goal_'.$index.' :'.$_POST['home_goal_'.$index]; if($_POST['home_goal_'.$index] != 'NULL' && $_POST['guest_goal_'.$index] != 'NULL') { $query = "DELETE FROM `tipp` WHERE tipp.spieltag_id =".$_POST['spiel'.$index.'_id']." AND tipp.user_id =".$row_id[0]; $result = mysql_query($query) or die('unable to insert tipp data'); // $debug .= $query .' --- '; $query = "INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, `home_goal`, `guest_goal`,`points`) VALUES (NULL,".$row_id[0].",".$_POST['spiel'.$index.'_id'].",". $_POST['home_goal_'.$index].",".$_POST['guest_goal_'.$index] .",NULL);"; $result = mysql_query($query) or die('unable to insert tipp data:'.$query); // $debug .= $query .' --- '; } else { // $debug .= '!!---> WTF <----!!'; } $index++; } echo 'ok'; hat jemand eine Idee,wie ich es loesen konnte? MFG morris_m Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 9. Januar 2009 Teilen Geschrieben 9. Januar 2009 Wo ist das Problem? Mit dem Codefragment kann ich so rein gar nichts anfangen. Bitte einmal dies hier lesen: Wie man Fragen richtig stellt: eine Anleitung wie man Fragen erfolgreich in Usenet, Mailing Listen und Webforen stellt. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
morris_m Geschrieben 9. Januar 2009 Autor Teilen Geschrieben 9. Januar 2009 Ich moechte ein speicher Funktion schreiben und ich wollte nur ein anweisung haben. Ich will es fuer ein Tippspiel das ich entwirkle. Ich wollte die dateien des spielers nachdem sie getippt haben Speichern nach Name,Angentur,Datum, time. Ich wollte nur wissen. welche function ich benutzen sollte und wie ich es einstellen kann Ich weiss nicht,ob es klar genug ist Danke fuer den schnellen Antwort Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 9. Januar 2009 Teilen Geschrieben 9. Januar 2009 Du willst also bei der Abgabe eines Tipps diesen zusätzlich noch woanders speichern? Dann mach doch eine zweite Insert Anweisung oder lass es über einen Trigger erledigen. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 9. Januar 2009 Teilen Geschrieben 9. Januar 2009 @robotto7831a: Es ist die Frage ob es innerhalb der Datenbank gemacht werden soll oder via Script. im Grunde ist beides möglich. Ich würde sogar eine Stored Procedure vorschlagen, die atomar / transaktionssicher ist, also entweder wird komplett eingefügt oder nichts. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
morris_m Geschrieben 9. Januar 2009 Autor Teilen Geschrieben 9. Januar 2009 Ich versuche mal mit der 2. Insert. Ich würde sogar eine Stored Procedure vorschlagen, die atomar / transaktionssicher ist, also entweder wird komplett eingefügt oder nichts. Hey Phil kannst du mir bitte deine 2e Idee erklaeren bitte mfg Morris Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 9. Januar 2009 Teilen Geschrieben 9. Januar 2009 Hey Phil kannst du mir bitte deine 2e Idee erklaeren bitte Klar: Also eine Stored Procedure ist ein Stück Quellcode in der Datenbank, eben eine Funktion. Ich nenne sie einmal "inserttipp(parameter)". Innerhalb dieser Funktion sind Deine beiden Inserts drin. Dein Script selbst ruft dann nur "inserttip(>Daten<)" auf. Stell Dir folgende Situation vor, wenn Du beide Inserts in Deinem Script hast: Der erste Insert wird korrekt ausgeführt und beim zweiten tritt eine Schlüsselverletzung auf. Dann hast Du im Grunde nur die Hälfte der Daten eingefügt. Die Stored Procedure wird im Gegensatz zu den beiden Insert komplett oder gar nicht ausgeführt (sprich die Änderung wird ggf wieder rückgängig gemacht). D.h. Du hast nachdem die Procedure durchgelaufen ist, sichergestellt, dass auf beiden Tabellen auch Daten vorhanden sind. Du kannst das natürlich auch mit dem 2 Inserts im Script ohne Stored Procedure realisieren, dafür muss Du die beiden Inserts in eine Transaktion packen und wenn beim ersten oder beim zweiten ein Fehler auftritt ein "Rollback" machen. Gerade wenn man zusammenhänge Insertes / Updates hat bzw sicherstellen muss, dass der Datenstand konsistent bleibt benutzt man so etwas. Bei mySQL ist das aber nur mit einer InnoDB möglich. Eine myISAM Datenbank unterstützt das nicht. Gerade wenn Du bei dem Tippspiele viele Aufrufe hast und dass z.B. zu einem Zeitpunkt X alle Daten konsistent sein müssen, würde man eben den Insert / Update komplett als Stored Procedure ausführen, denn wenn z.B. noch ein Tipp um 19:59:59 Uhr begonnen wird einzufügen und bis 20:00:01 Uhr läuft, aber gleichzeitig um 20:00:00 Uhr ein weiters Script die Daten schon beginnt auszuwerten, wie sieht der Stand aus. Wenn es eine Stored Procedure ist / Transaktionssicher ist, dann würde der Prozess den noch im Einfügen Prozess befindlichen Datensatz nicht sehen. Gleiches gilt z.B. wenn Du 2 Updates ausführst, wie sieht der Datenstand aus, wenn sie z.B. kollidieren Hoffe das ist so einigermaßen verständlich Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
morris_m Geschrieben 9. Januar 2009 Autor Teilen Geschrieben 9. Januar 2009 Thank you Phil, Ich versuche es jetzt. Ich bin so erleichtert. Danke vielmals Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
morris_m Geschrieben 11. Januar 2009 Autor Teilen Geschrieben 11. Januar 2009 Hey Phil, Ich habe versucht,was du gestern mir gesagt hast.einzusetzen.Aber es funktioniert nicht ganz.hier ist der Code CREATE PROCEDURE 'inserttipp'( int(11) id int(11) user_id int(11) spieltag_id int(11) home_goal int(11) guest_goal int(11) points date date time time ); DELIMITER $$ DROP PROCEDURE IF EXISTS `bluemel`.`inserttipp` $$ CREATE DEFINER=`bluemel`@`localhost` PROCEDURE `inserttipp`(IN iid int(11), IN iuser_id int(11), IN ispieltag_id int(11), IN ihome_goal int(11), IN iguest_goal(11), IN ipoints int(11)) BEGIN INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, `home_goal`, `guest_goal`,`points`) VALUES (iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints); // INSERT INTO `bluemel`.`tipp` (`id`, `user_id`, `spieltag_id`, home_goal`, guest_goal`,`points`) VALUES (iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints); SELECT LAST_INSERT_ID(); END $$ DELIMITER ; CALL insertipp('iid, iuser_id, ispieltag_id, ihome_goal, iguest_goal, ipoints')") ; Was habe ich falsch gemacht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Januar 2009 Teilen Geschrieben 12. Januar 2009 Was habe ich falsch gemacht? Wie lautet die Fehlermeldung? Bitte poste vollständige Informationen, einfach nur Quellcode(s) und die Aussage "läuft nicht" ist nicht hilfreich. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.