2013-06-15 3 views
2

J'ai un problème avec mon formulaire, j'affiche deux lignes de ma base de données qui utilisent le même formulaire (en utilisant while loop) pour remettre les valeurs à la DB. Le problème est que le second ou la rangée du bas qui s'affiche fonctionne bien, mais la première fonctionne par exemple si je clique sur la dernière valeur 1, la première ne fonctionne que si je clique sur la valeur 1 et que cela cesse de fonctionner.PHP Form Soumission

Mon site est www.albsocial.us/test/seria.php pour vérifier par vous-même, j'ai inclus une vidéo juste dans ce cas http://www.youtube.com/watch?v=xGwPd_P65oM

<?php 
session_start(); 
include("connect.php"); 

$query = "SELECT * FROM test ORDER BY `id` ASC LIMIT 2"; 
$result = mysql_query($query); 

echo "<h2>Seria A</h2><hr/>"; 

while($row = mysql_fetch_array($result)){ 

    $id = $row['id']; 
    $home = $row['home']; 
    $away = $row['away']; 
    $win = $row['win']; 
    $draw = $row['draw']; 
    $lose = $row['lose']; 


    echo "<br/>",$id,") " ,$home, " - ", $away; 

    echo " 

    <form action='seria.php' method='post' id='$id'> 
    <select name='test'>   
     <option value=\"\">Parashiko</option> 
     <option value='1'>1</option> 
     <option value='X'>X</option> 
     <option value='2'>2</option>    
     <input type='submit' name='submit' value='Submit'/> 
     <input type='hidden' name='id' readonly value='".$row['id']."'/> 

    </select>   

    <br/> 

    </form>";   

    echo "Totali ", $sum = $win+$lose+$draw, "<br/><hr/>"; 

} 

if (!empty($_POST)) { 

    $id=isset($_POST['id'])&&is_numeric($_POST['id']) ? $_POST['id']:false; 

    $select = isset($_POST['test']) ? $_POST['test']:false; 

    switch ($select) { 
    case 1: 
    $select = $win + $select; 
    mysql_query("UPDATE test SET win='$select' WHERE id='$id'"); 
    break; 

    case 'X': 
    $select = '1'; 
    $select = $draw + $select; 
    mysql_query("UPDATE test SET draw='$select' WHERE id='$id'"); 
    break; 

    case 2: 
    $select = '1'; 
    $select = $lose + $select; 
    mysql_query("UPDATE test SET lose='$select' WHERE id='$id'"); 
    break; 
    default: 
    } 
    header('Location: ../test/seria.php'); 
} 

?> 
+0

non ça marchera pour l'identifiant de ligne qui est en bas .. alors si je clique sur valeur = 1 en bas le haut ne fonctionnera que si je clique sur la même valeur, le bouton –

+0

par exemple si je clique sur le bas valeur de la ligne je justifie de soumettre cette valeur .. alors si je décide de cliquer en haut, je devrais soumettre cette valeur un @Prix –

+0

Vérifiez la vidéo s'il vous plaît. .. –

Répondre

0

Il semble que vous voulez mettre à jour les valeurs de victoires, perd, un match nul, en ajoutant 1 au choix choisi, j'ai changé le code un peu comme une suggestion, j'espère qu'il wokrs.

<?php 

session_start(); 

include("connect.php"); 

$submit = @$_POST["submit"]; 
$tests = @$_POST["test"]; 

// If the user submitted the form. 
// Do the updating on the database. 
if (!empty($submit)) 
{ 
    if (count($tests) > 0) 
    { 
     foreach ($tests as $test_id => $test_value) 
     { 
      switch ($test_value) 
      { 
       case 1: 
        mysql_query("UPDATE test SET win = win + 1 WHERE id = '$test_id'"); 
       break; 

       case 'X': 
        mysql_query("UPDATE test SET draw = draw + 1 WHERE id = '$test_id'"); 
       break; 

       case 2: 
        mysql_query("UPDATE test SET lose = lose + 1 WHERE id = '$test_id'"); 
       break; 

       default: 
        // DO NO THING. 
      } 
     } 
    } 

    // Redirect to seria page. 
    header('Location: ../test/seria.php'); 
} 

// Whenever this wiil be fetched it will be updated. 
$query = "SELECT * FROM test ORDER BY `id` ASC LIMIT 2"; 
$result = mysql_query($query); 

echo "<h2>Seria A</h2><hr/>"; 

while($row = mysql_fetch_array($result)){ 

    $id = $row['id']; 
    $home = $row['home']; 
    $away = $row['away']; 
    $win = $row['win']; 
    $draw = $row['draw']; 
    $lose = $row['lose']; 


    echo "<br/>",$id,") " ,$home, " - ", $away; 

    echo " 

    <form action='seria.php' method='post'> 

    <select name='test[$id]'>   
     <option value=\"\">Parashiko</option> 
     <option value='1'>1</option> 
     <option value='X'>X</option> 
     <option value='2'>2</option> 
    </select> 

    <input type='submit' name='submit' value='Submit'/> 

    <br/> 

    </form>";   

    echo "Totali ", $sum = $win+$lose+$draw, "<br/><hr/>"; 

} 

?> 

Meilleures salutations, Hussam.

+0

Life Saver mon ami ... merci beaucoup frère .. Grande solution son fonctionnement .. pourriez-vous m'expliquer ce que j'ai fait mal .. je devais inlcude ces ---> $ submit = @ $ _ POST ["soumettre "]; $ tests = @ $ _ POST ["test"]; et le foreach –

+0

Je pense que vous avez divisé votre code en deux parties, l'un est de récupérer des données de la base de données et de l'afficher, et l'autre est d'enregistrer (mise à jour) des données dans la base de données. Ce serait beaucoup mieux, si la mise à jour était la première, parce que lorsque vous décidez d'interroger la base de données plus tard, les données seront à jour. Une autre chose est que vous avez utilisé plusieurs formulaires dans la page, alors que vous pourriez utiliser un formulaire et utiliser les entrées comme un tableau. –

+0

Merci mon ami .. vraiment utile.Maintenant je l'obtiens grâce à toi –

0

Le problème est que vous êtes en utilisant une boucle while pour afficher le formulaire HTML, lorsque le formulaire est soumis et que vous essayez d'accéder à $_POST['test'], il reçoit uniquement la dernière valeur, car HTML remplacera les valeurs.

Donc ce que vous devez faire est de changer simplement le nom des champs test-test[], maintenant ce qui se passe est quand vous soumettez le formulaire, il obtiendra erreur $_POST['test][0], $_POST['test'][1], etc., et toutes les valeurs avec l'index 0 aura la valeur du premier champ et tous les 1 ont une valeur de seconde forme et ainsi de suite.

J'espère que j'ai du sens :).

+0

Ne semble pas fonctionner frère .. c'est la ligne que j'ai besoin de changer -> $ select = isset ($ _ POST ['test'] [0])? $ _POST ['test'] [0]: faux; –

+0

avez-vous changé l'attribut name en HTML pour "test []"? –

+0

toujours pas workking frère –