webForumDet fria alternativet

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

PHP

1 svar · 214 visningar · startad av eklof00

Medlem sedan jan. 200737 inlägg
Frågan#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++;
  }
288 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
146 ms — ändringar (db)