Zum Inhalt springen

Suche den Code einer save() function


morris_m

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...