Kontroll så att användaren kan skicka form endast en gång.

PHP

1 svar · 217 visningar · startad av eklof00

Medlem sedan jan. 200737 inlägg
Trådstart#1

Försöker få till en formulärkontroll så att användaren endast kan skicka formuläret en gång.

Med denna kod får jag inga felmeddelanden. Det går dock att lägga in tips hur många gånger som helst.

Tanken är att kontrollen skall se om user_id har tippat på match_id om inte skall tipset läggas till.

Bif koden:

Kontrollen har jag lagt på rad 17 och error_list på rad 35.

<?php 
session_start(); // Alltid överst på sidan 
 
include "conn.php"; // Databasanslutningen 
 
// Kolla om inloggad = sessionen satt 
if (!isset($_SESSION['sess_match_id'])){ 
  header("Location: test.php"); 
  exit; 
} 
if (!isset($_SESSION['sess_user_id'])){ 
  header("Location: index.php"); 
  exit; 
}
 
 // Kolla om tippat förut
  $sql = "SELECT COUNT(*) FROM spel_allsv2007 WHERE user_id='{$_SESSION['sess_user_id']}' AND match_id='{$_POST['match_id'][$i]}'";
  $result = mysql_query($sql);
  if (mysql_result($result, 0) > 0) {
    $error[] = 1;
  }
 
 if (!isset($error)){
 if (isset($_POST['submit'])) {
    $i = 0;
    foreach($_POST['match_id'] as $match) {
        $sql = "INSERT INTO spel_allsv2007 (user_id, match_id, tips) VALUES('{$_SESSION['sess_user_id']}','{$_POST['match_id'][$i]}','{$_POST['tips_'.$_POST['match_id'][$i]]}')"; 
        mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
        $i++;
    }
     header("Location: user_tips.php"); 
     exit;
}
}
$error_list[1] = "Du har redan tippat på den här eller dessa matcher!";
if (isset($error)) { 
   foreach ($error as $err) {
      echo $error_list[$err]."<br />";
   }
}
 ?> 
<form action="spel.php" method="post" name="submit"> 
<?PHP 
$sql = "SELECT * FROM allsv2007 WHERE date > CURRENT_TIMESTAMP() AND date = ' {$_SESSION['sess_date']} '" or die(mysql_error()); 
$result = mysql_query($sql); 
   while ($row = mysql_fetch_assoc($result)) { 
$date[$row['date']][] = array($row['match_id'], $row['matcher']); 
} 
 
 
if (isset($date) && !empty($date)) { 
      echo '<table>';   
      foreach ($date as $day => $value){ 
          echo '<tr>'; 
         echo '<td></td>'; 
         echo '<td>' . '<b>' . $day. '</b>' . '</td>'; 
         echo '<td align="center"><b>1</b></td>'; 
         echo '<td align="center"><b>X</b></td>'; 
         echo '<td align="center"><b>2</b></td>'; 
      echo '</tr>'; 
       
        foreach ($value as $game) 
       { 
        echo '<tr>'; 
        echo '<td align ="right">'. $game[0].'.</td>'; 
      
      
         echo '<td>'. $game[1].'</td>'; 
         echo '<td><input type="radio" value="1" name="tips_'.$game[0].'"></td> 
                 <td><input type="radio" value="X" name="tips_'.$game[0].'"></td> 
                 <td><input type="radio" value="2" name="tips_'.$game[0].'"><input type="hidden" name="match_id[]" value="'.$game[0].'"></td>'; 
         echo '</tr>'; 
         
          } 
 
} 
echo '</table>'; 
 
 
}else{ 
echo 'Du kan inte spela på denna match, Spelstopp har inträtt!'; 
 
} 
?> 
<input type="submit" name="submit" value="Skicka"> 
</form>
Medlem sedan jan. 200737 inlägg
#2
// Kolla om användaren tippat förut
  $i = 0;
  $sql = "SELECT COUNT(*) FROM spel_allsv2007 WHERE user_id='{$_SESSION['sess_user_id']}' AND match_id='{$_POST['match_id'][$i]}'";
  $result = mysql_query($sql);
  if (mysql_result($result, 0) > 0) {
    $error[] = 1;
	$i++;
  }
258 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)