Veröffentlicht 9. Januar 200916 j 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
9. Januar 200916 j 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
9. Januar 200916 j 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
9. Januar 200916 j 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
9. Januar 200916 j @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
9. Januar 200916 j 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
9. Januar 200916 j 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
11. Januar 200916 j 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?
12. Januar 200916 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.