IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Mettre à jour une ligne


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 23
    Par défaut Mettre à jour une ligne
    Bonjour à toutes et à tous,
    dans le script suivant pour ajouter un nouveau score, on ajoute à la base de données toute une nouvelle ligne avec parfois le même nom du joueur qui se répète, or est-il possible d'écraser une ligne existante avec le nom du même joueur mais avec un nouveau meilleur score
    Merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    <?
     
     
    	// Get Configuation file
    	require("config19.php");
     
    	// Connect to your server
        $db=mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ;
    	@mysql_select_db($mysql_database) or die ;
     
    	//////////////////////////////////////////////////
    	// Check for the existing table if its not found create it
    	// This is really just here to make the life of new users of the script eaiser
    	// They won't have to go thru the script and create the table
    	/////////////////////////////////////////////////
     
    	if(!mysql_num_rows( mysql_query("SHOW TABLES LIKE '".$tname."'")))
    	{
    	$query = "CREATE TABLE `$tname` (`id` int(11) NOT NULL auto_increment,`gameid` varchar(255) NOT NULL,`playername` varchar(255) NOT NULL,`score` int(255) NOT NULL,`scoredate` varchar(255) NOT NULL,`md5` varchar(255) NOT NULL, PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";
     
    	$create_table = mysql_query($query)or die ;
    	// Preload table with 10 scores
    	$date = date('M d Y');
     
     
    	}
     
    	///////////////////////////////////////////////////////
    	// Status Checker
    	///////////////////////////////////////////////////////
    	if ($_GET["status"])
    	{
    	echo "online";
    	exit;
    	}
     
    	////////////////////////////////////////////////////////
    	// Run some checks on our gameid 
    	////////////////////////////////////////////////////////
    	$gameid_safe = mysql_real_escape_string($_GET["gameid"]);
    	// Check the gameid is numeric
    	// If its not numberic lets exit
    	if(!is_numeric($gameid_safe))
        {
         exit; 
        }
     
    	///////////////////////////////////////////////////////
    	// Upload new score
    	///////////////////////////////////////////////////////
    	// Test for the variables submitted by the player
    	// If they exist upload into the database
     
    	if ($_GET["playername"] && $_GET["gameid"] && $_GET["score"])
    	{
     
    	// Strip out | marks submitted in the name or score
    	$playername_safe = str_replace("|","_",$_GET["playername"]);
    	$playername_safe = mysql_real_escape_string($playername_safe);
    	$score_safe = mysql_real_escape_string($_GET["score"]);
    	$date = date('d - m - Y');
     
    	// Check the score sent is is numeric
    	// If the score is not numberic lets exit
    	if(!is_numeric($score_safe))
        {
         exit; 
        }
     
    	// this secret key needs to be the same as the secret key in your game.
    	$security_md5= md5($_GET["gameid"].$_GET["playername"].$_GET["score"].$secret_key);
     
    	// Check for submitted MD5 different then server generated MD5
    	if ($security_md5 <>$_GET["code"])
    	{
    	// Something is wrong -- MD5 security hash is different
    	// Could be someone trying to insert bogus score data
    	exit;
    	}
    	// Everything is cool -- Insert the data into the database
    	$query = "insert into $tname(gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
    	$insert_the_data = mysql_query($query)or die;
    	}
     
    	///////////////////////////////////////////////////////
    	// List high score
    	///////////////////////////////////////////////////////
    	// Return a list of high scores with "|" as the delimiter
    	if ($gameid_safe)
    	{
        $query = "select * from $tname where gameid='$gameid_safe' order by score desc limit 10";
    	$view_data = mysql_query($query)or die;
    	while($row_data = mysql_fetch_array($view_data))
    		{
    		print($row_data["playername"]);
    		print "|";
    		print ($row_data["score"]);
    		print ("|");
    		print($row_data["scoredate"]);
    		print("|");
    		}
     
    	// We limit the score database to hold the number defined in the config script
    	// First check to see how many records we have for this game
     
    	$query1 ="select * from $tname where gameid = '$gameid_safe'";
    	$countresults = mysql_query($query1)or die;
    	$countofdeletes = mysql_num_rows($countresults);
    	if (mysql_num_rows($countresults)>$score_number)
    		{
    		$query2 ="SELECT * FROM $tname WHERE gameid = '$gameid_safe' ORDER BY score DESC Limit $score_number,$countofdeletes";
    		$Get_data = mysql_query($query2)or die ;
    		while($row_data = mysql_fetch_array($Get_data))
    		{
    		$id_delete = $row_data["id"];
    		$query3 = "Delete from $tname where id = $id_delete";
    		$Delete_data = mysql_query($query3)or die ;
    		}
    		}
    	}
     
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En mettant un index UNIQUE sur la colonne playername, tu peux utiliser REPLACE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "REPLACE INTO $tname (gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 23
    Par défaut
    Citation Envoyé par sabotage Voir le message
    En mettant un index UNIQUE sur la colonne playername, tu peux utiliser REPLACE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "REPLACE INTO $tname (gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
    Merci mon ami, mais le problème n'est pas résolu il ajoute toujours une nouvelle ligne au lieu de supprimer la ligne avec le même nom de joueur mais avec un moindre score... La colonne playname est construite suivant les noms ou pseudos de joueurs, je ne peux pas intervenir là... le but du script est que quand il va insérer un nouveau meilleur score il regarde le nom du playname, s'il le trouve il l'écrase avec le nouveau score sinon il insère une nouvelle ligne avec un nouveau nom.
    Merci et désolé de prendre de votre temps

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu n'as pas mis l'index UNIQUE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 23
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu n'as pas mis l'index UNIQUE.
    Justement alors, comment je fais pour mettre l'index UNIQUE?
    Merci

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Soit dans Phpmyadmin > Structure > Index

    Soit directement en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE tatable ADD UNIQUE `UNIQUE` ( `playername` )
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre à jour une ligne dans un p:datatable
    Par lanokims dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/11/2014, 14h33
  2. mettre à jour une ligne
    Par Rniamo dans le forum C
    Réponses: 16
    Dernier message: 09/12/2007, 12h50
  3. Mettre à jour les lignes d'une colonne dans dataTable
    Par Mikelester12 dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/07/2007, 08h31
  4. Réponses: 1
    Dernier message: 16/05/2007, 20h31
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo