PHP MYSQL FORMLAR

2 Cevap php

Ben başka bir form sayfası içine ayrıntıları yüklemek için tek bir sayfada bir köprü kullanın, ve sonra form alanı değerleri kullanarak bir veritabanı tablosunu güncelleştirmek istiyorum.

Ben 2 php sayfaları var. Bir ucu kullanıcıya alan değerlerini güncellemek için fırsat vererek, bir forma bir özel kayıt için tüm alan değerlerini döndüren bir MySQL sorgu ve başka son 10 kayıt bet_id dönen. Ben iki bağlantı böylece ben diyelim ki satırda 3 tıkladıklarında (bet_id = 3) birinci sayfada tablonun o kadar, ikinci sayfası tarafından kullanılan MYSQL sorguda 'bet_id '3 kullanarak ikinci sayfa beni alır Doğru değerleri ile form alanları önceden doldurmak.

Ben formda 'Güncelle bahis' düğmesine vurduğunda ben girmiş yeni değerleri ile veritabanını güncelliyor sorun yaşıyorum nedir. Ben sayfa 2 şeklinde gösteriyorum alanlar 'punter_id' ve 'category_id' vardır. Herkes yanlış gidiyor olabilir ne önerebilirsiniz? Ben 'Güncelle bahis' düğmesine vurduğunda ben herhangi bir hata almıyorum, ama form alanı değerleri sadece onlar aslında ne olduğunu geri dönmek ve veritabanı tablo (aşağıya bakınız) $ sorguda ilan sorgu tarafından güncellenen almaz.

Kod aşağıda yer:

<?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);
?>

2 Cevap

Sayfalarınız bir master-detay ilişkisi var, doğru mu? Her durumda bu hat sorun olduğunu düşünüyorum:

$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), sayılar tırnak işaretleri koyarak (2) mysql_real_escape () bir dize döndürür. Yani aslında büyük olasılıkla göz ardı edecek sprintf () sayısal yer tutuculara, içine dize değerlerini koymak için çalışıyoruz. Aslında idam olduğunda dolayısıyla sorgu muhtemelen aşağıdaki gibi görünür:

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

Aşağıdaki kodunuzu değiştirmeyi deneyin:

$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'])));

Formdan aşağıdaki öznitelik kaldırmayı deneyin:

enctype="multipart/form-data"

Aynı zamanda herhangi bir dosya yükleme değil çünkü bunu ayarlamak gerekmez. Bu bir tahmindi ama ben kodu yanlış olan başka bir şey göremiyorum. $ _POST Dizi anahtarları ile dolu olan değilse o zaman UPDATE sorgusu olsun asla.

Davranış, bu bloğun içine almıyor öneririz:

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

Bu yüzden de daha önce bu kod biraz koyarak deneyebilirsiniz:

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

Emin olmak için dizi ne beklediğiniz ile doludur.