mysql php form güncellemiyor

5 Cevap php

Ben bir onay kutusunu gösteren çok basit bir PHP form var ve bir veritabanında kontrol olup olmadığını saklayacaktır. Bu ancak güncellemek için, başlangıç ​​şekilde yerleştirilmesi için de kullanılabilir. Ben $ saleid $ pk eşittir durumlarda test ettik ve neden ... şube güncellemek eğer girmiyor?

<?php
error_reporting(E_ALL);

if (isset($_GET["cmd"]))
  $cmd = $_GET["cmd"]; 
    else
if (isset($_POST["cmd"]))
  $cmd = $_POST["cmd"]; 
        else die("Invalid URL");

if (isset($_GET["pk"])) { $pk = $_GET["pk"]; }

$checkfield = "";

$checkboxes = (isset($_POST['checkboxes'])? $_POST['checkboxes'] : array());

if (in_array('field', $checkboxes)) $checkfield = 'checked';

$con = mysqli_connect("localhost","user","", "db");
if (!$con) { echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); exit; }

$con->set_charset("utf8");

$getformdata = $con->query("select saleid, field from STATUS where saleid = '$pk'");
$saleid = "";
while ($row = mysqli_fetch_assoc($getformdata)) {
    $saleid = $row['saleid'];
    $checkfield = $row['field'];
}

if($cmd=="submitinfo") {
    if ($saleid == null) {
       $statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
        if ($statusInfo = $con->prepare($statusQuery)) {
                $statusInfo->bind_param("sssssssssssss", $pk, $checkfield);
                $statusInfo->execute();
                $statusInfo->close();
        } else {
                print_r($con->error);
        }
    } else if ($saleid == $pk) {
        $blah = "what";
    	$statusQuery = "UPDATE STATUS SET field = ? WHERE saleid = ?";
        if ($statusInfo = $con->prepare($statusQuery)) {
                $statusInfo->bind_param("ss", $checkfield, $pk);
                $statusInfo->execute();
                $statusInfo->close();
        } else {
                print_r($con->error);
     }  
    }
}
if($cmd=="EditStatusData") {
    echo "<form name=\"statusForm\" action=\"test.php?pk=".$pk."\" method=\"post\" enctype=\"multipart/form-data\">
                <h1>Editing information for Auction No: ".$pk."</h1>
                        <input type=\"checkbox\" name=\"checkboxes[]\" value=\"field\" ".$checkfield." />
                        <label for=\"field\">Test</label>
                        <br />
                        <input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
                        <input name=\"Submit\" type=\"submit\" value=\"submit\" />
        </form>";
}
?>

5 Cevap

iyi i bir tablo oluşturulur ve kodunuzu koştu ve bu benim için çalışıyor

the reason why it doesn't "look" like update is working, is because you are reading $saleid and $checkfield from the database then building an update statement that puts the same two values back into the database

muhtemelen yapmak isteyen ne değildir ki

Burada bu satır 'işaretli' olarak $ checkfield setleri,

 if (in_array('field', $checkboxes)) $checkfield = 'checked';

o zaman ('işaretli' değeri üzerine) veritabanından $ checkfield seti

while ($row = mysqli_fetch_assoc($getformdata)) {
   $saleid = $row['saleid'];
   $checkfield = $row['field'];

sonra geri veritabanına checkfield özgün değerini yazmak

$statusInfo->bind_param("ss", $checkfield, $pk);

emin değil GET ve POST tipi isteklerini karıştırabilir eğer

belki böylece pk gizli bir alan olarak geri geçirilen bu değişiklik?

 echo "<form name=\"statusForm\" action=\"test.php?pk=".$pk."\" method=\"post\" enctype=\"multipart/form-data\">

örneğin, tür bu gibi

echo "<form name=\"statusForm\" action=\"test.php\" method=\"post\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"pk\" value=\"".$pk."\">

İşte HTML gibi görünmelidir ne:

    <form id="aform" action="thisform.php" method="post">
       <input type="checkbox" name="agree" value="yes" />
       <input type="hidden" name="secret" value="shhh" />
       <input type="submit" value="do it" />
    </form>

Yukarıdaki ile yaparsanız:

  print_r($_POST);

Eğer bir dizi alacak ya vardır onlar onay kutusunu eğer bağlı olarak, => 'evet' ya da hiçbir şey [kabul], böylece kutuları ton yoksa dizi parantez koymak gerek.

SQL kısmına gelince, ben sütun kontrol için denetlenmeyen, 1 için 0 veya 1. 0 ya var bir tek tamsayı türü, yapım öneririz. Insert için gibi bir şey yapardı:

   $check_value = ($_POST['agree'] == 'yes') ? 1 : 0;
   $secret_stuff = $_POST['secret'];
   mysqli_query("Insert INTO sales_table (secret_column, agree_column)
                 VALUES ('$secret_stuff', '$check_value')");

Bu tabloya onay alacak. Bunu elde etmek için, bir ile gitmek gerekir:

  $results = mysqli_query("SELECT * from sales_table where secret_column = $secret_stuff")

  while($row = mysqli_fetch_assoc($results)) {
    $checked = ($row['agree_column'] == 1) ? "checked=\"checked\"" : "";
    $secret_stuff = $row['secret_column];
   }

   ?>
   <form action=blah method=post id=blah>
   <input type="checkbox" name="agree" value="yes" <?php echo $checked;?> />
   </form>

Üzgünüz, sonunda buhar kaybetti. Ama bu ön uç ve arka uç kapsar. 1/0 anahtarı kullanın ve sadece $ gibi bazı değişken bir 1 ise "'işaretli' checked =" için kontrol ayarlayın.

isset($_GET["pk"]), ama yine de daha sonra sorguda kullandığınız sürece $ pk değişkeni ayarını değiliz. Bu, diğer koşullara bağlı olduğundan, bu hata neden olabilir, iyi bir fikir değil. Ne sizin mantık gibi bakmak istiyorum şudur:

if pk is not set in form
    insert new record
    deal with error if insert failed
else
    update existing record
    check update count and deal with error if 0 records were updated
        (perhaps by doing an insert of the missing record)
end

Sadece bir yan not olarak, bu mysql gibi görünüyor REPLACE fonksiyonu sizin için kullanışlı gelirdi.

Bir onay kutusu işaretli olduğunda Ayrıca, değer zor bir şey olabilir. Ben yayınlanmıştır değeri ayarlanırsa, birine değer ayarlar bir işlev yazılı ve sıfır değilse bile ...

function checkbox_value($name) {
    return (isset($_POST[$name]) ? 1 : 0);
}

O sorguda düşünce sizin yayınlanmıştır checkbox değerini çalıştırmak ve her zaman bir ya da bir sıfır alabilirsiniz.