2010-05-31 8 views
1

Cela pourrait être facile pour vous. J'essaie de trier les variables $ _POST qui ont été envoyées par un formulaire et mettre à jour le résultat trié dans mysql. Je ne suis pas sûr de savoir comment le faire et j'apprécie que tout le monde puisse m'aider à ce sujet.

Mon main.php

//I have a loop here. (omitted) 
//$k will be increased by 1 every time the loop starts, so I will know the total times of the loops 
//the form will be submitted to update.php 


echo "<input type='hidden' name='pickTotal' value='".$k."' />"; 
echo "<input type='hidden' id='point' name='earnedPoint".$k."' value='".$point."' />"; 
echo "<input type='hidden' id='users' name='userName".$k."' value='".$userPick['user']."' />"; 

//loop ends 

Mon update.php

if(isset($_POST['submit'])){ 

    $pickTotal=$_POST['pickTotal']; //get the total loop 

    for ($p=0;$p<=$pickTotal;$p++){ 

     $userToBeUpdated=$_POST['userName'.$p]; 
    $userPoint=$_POST['earnedPoint'.$p]; 

     //sort the $userPoint here. 
     //I need to find out who got the most points 
     //and list user's place. 1st, 2nd, 3rd...etc. 


     //update my mysql 
    } 

Merci pour toute aide.

Répondre

3

Au lieu de compter jusqu'à $ k et $ p, vous devez utiliser la syntaxe du nom de forme spéciale phps:

<input name="earnedPoint[]" value="..."> 
<input name="userName[]" value="..."> 

De cette façon, vous recevez les paramètres sous forme de liste déjà, $ _POST [ "earnedPoint"] [0] jusqu'à $ _POST ["point gagné"] [99] correspond à $ _POST ["nomUtilisateur"] [0] .. [99].

Puis qu'élaborer les deux tableaux:

$sort_us = array_combine($keys=$_POST["userName"], $values=$_POST["eP"]); 
arsort($sort_us); 

Cela devrait vous obtenir le meilleur premier.

+0

Merci. La syntaxe du nom de formulaire spécial PHP est très utile. – FlyingCat

+0

Je vous donnerais une réponse acceptée puisque vous êtes la première personne à élever la syntaxe du nom de php. : D – FlyingCat

1

Vous devez avoir un critère pour trier. En tout cas, sort fonction devrait vous aider.

+0

Merci pour le conseil. +1 – FlyingCat

4

Je suggère quelque chose de très semblable à ce que Mario a suggéré, mais d'une manière légèrement différente:

echo "<input type='hidden' id='point' name='user[$k][points]' value='".$point."' />"; 
echo "<input type='hidden' id='users' name='user[$k][name]' value='".$userPick['user']."' />"; 

Lorsque vous obtenez le dos $_POST, vous aurez un tableau comme celui-ci:

$_POST['user'] = array(
    0 => array(
     points => 15, 
     name => joe 
    ), 
    1 => array(
     points => 21, 
     name => john 
    ) 
); 

de là, vous pouvez utiliser usort pour trouver une fonction de tri personnalisée:

$data = $_POST['user']; 
usort($data, 'usortPost'); 

function usortPost($a, $b) { 
    if ($a['points'] == $b['points']) return 0; 
    return $a['points'] < $b['points'] ? 1 : -1; 
} 
+0

agréable. +1 Certainement plus pointé vers le problème alors ma réponse. – vladv

+0

Belle utilisation de la syntaxe php php name. Je ne savais pas que ça pouvait jouer comme ça. +1 – FlyingCat

1

Vous pouvez, comme mentionné précédemment, utilisez un sucre de syntaxe proposée par PHP:

echo "<input type='hidden' id='point' name='earnedPoint[{$userPick['user']}]' value='".$point."' />"; 

Vous pouvez gérer cela dans le back-end comme celui-ci:

foreach ($_POST['earnedPoint'] as $user => $points) { 
    // update your SQL table 
} 

asort($_POST['earnedPoint']); // sort array in ascending order, maintain index assoc 

// save your data somehow 
+0

une belle! merci beaucoup pour l'utilisation de la syntaxe php. +1 – FlyingCat

Questions connexes