2009-08-24 7 views
0

Je souhaite utiliser un lien hypertexte sur une page pour charger des détails dans une autre page de formulaire, puis mettre à jour une table de base de données à l'aide des valeurs du champ de formulaire.PHP MYSQL FORMS

J'ai 2 pages php. Un retournant le bet_id des 10 derniers enregistrements d'une requête MYSQL et un autre retournant toutes les valeurs de champs pour un enregistrement spécifique dans un formulaire, donnant à l'utilisateur final la possibilité de mettre à jour les valeurs des champs. Je peux lier les deux afin que lorsque je clique sur la ligne 3 (bet_id = 3) du tableau dans la première page, il me mène à la deuxième page en utilisant le bet_id '3' dans la requête MYSQL utilisée par la deuxième page, préremplissez les champs de formulaire avec les valeurs correctes. Ce qui me pose problème, c'est de mettre à jour la base de données avec les nouvelles valeurs que j'ai saisies lorsque j'appuie sur le bouton 'Update bet' dans le formulaire. Les champs que je montre dans le formulaire de la page 2 sont 'punter_id' et 'category_id'. Quelqu'un peut-il suggérer ce qui pourrait mal tourner? Je ne reçois aucune erreur lorsque j'appuie sur le bouton 'Mise à jour par mise à jour', mais les valeurs du champ de formulaire reviennent à ce qu'elles étaient à l'origine et la table de base de données n'est pas mise à jour par $ query (voir ci-dessous).

code

inclus ci-dessous:

<?php require_once('../Connections/punters_c.php'); ?> 
<?php 

mysql_select_db($database_punters_c, $punters_c); 

$query_Recordset1 = "SELECT bet_id, punter_id,category_id FROM betslip where bet_id =".intval($_REQUEST['bet_id']); 
$Recordset1 = mysql_query($query_Recordset1, $punters_c) or die(mysql_error()); 
$row_Recordset1   = mysql_fetch_assoc($Recordset1); 
$totalRows_Recordset1  = mysql_num_rows($Recordset1); 


function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; 

switch ($theType) { 
case "text": 
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
    break;  
case "long": 
case "int": 
    $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
    break; 
case "double": 
    $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; 
    break; 
case "date": 
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
    break; 
case "defined": 
    $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
    break; 
} 
return $theValue; 
} 
$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 
?> 
<? 

if ((isset($_POST["apply"])) && ($_POST["apply"] == "update_betslip_detail")){ 

    $query = sprintf("UPDATE betslip SET category_id = '%d' WHERE bet_id = %d", mysql_real_escape($_POST['category_id']), mysql_real_escape($_POST['bet_id']) 
                  ); 

mysql_select_db($database_punters_c, $punters_c); 
$Result1 = mysql_query($query, $punters_c) or die('Connection error to MYSQL occurred: '.(mysql_error())); 

    header("Location: /update_betslip_test.php"); 

} 
else 
{ 
    echo "bet detail not updated"; 
} 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="update_betslip_detail"> 

<input type="text" name="bet id" id = "bet_id" value="<?php echo $row_Recordset1['bet_id']; ?>"/> 
<input type="text" name="category_id" id = "category_id" value="<?php echo $row_Recordset1['category_id']; ?>"/> 


<input type="hidden" name= "apply" value="update_betslip_detail"/> 

<input type="submit" value="Update bet"/> 
</form> 

<p><a href="update_betslip_test.php">Back to Update page </a></p> 
</body></html> 
<?php 
mysql_free_result($Recordset1); 
?> 

Répondre

0

Vos pages ont une relation maître-détail, correct? En tout cas, je pense que cette ligne est le problème:

$query = sprintf("UPDATE betslip SET category_id = '%d' WHERE bet_id = %d", mysql_real_escape($_POST['category_id']), mysql_real_escape($_POST['bet_id'])); 

(1), vous mettez des guillemets autour des chiffres, (2) mysql_real_escape() retourne une chaîne. Essentiellement, vous essayez de placer des valeurs de chaîne dans des espaces réservés numériques, que sprintf() ignorera probablement. D'où votre requête ressemble probablement à ce qui suit quand il est effectivement exécuté:

UPDATE betslip SET category_id = '' WHERE bet_id = <number>; 

Essayez de changer votre code à ce qui suit:

$query = sprintf("UPDATE betslip SET category_id = %d WHERE bet_id = %d", intval(mysql_real_escape($_POST['category_id'])), intval(mysql_real_escape($_POST['bet_id']))); 
+0

Merci Ian. J'ai essayé ce que vous avez suggéré, mais cela n'a toujours pas fonctionné. –

0

Essayez de retirer l'attribut suivant de la forme:

enctype="multipart/form-data" 

Étant donné que vous ne téléchargez aucun fichier en même temps, vous n'en avez pas besoin. C'est une conjecture sauvage mais je ne vois rien d'autre d'incorrect avec votre code. Si le tableau $ _POST n'est pas rempli de clés, vous n'obtiendrez jamais votre requête UPDATE.

Le comportement suggèrent que vous ne recevez pas dans ce bloc:

if ((isset($_POST["apply"])) && ($_POST["apply"] == "update_betslip_detail")){ 

Vous pouvez également essayer de mettre ce morceau de code avant d':

echo '<pre>'; 
print_r($_POST); 
echo '</pre>'; 
die; 

pour vérifier que le tableau est rempli avec ce que vous attendez.