mysql db için güncelleme mantığı ile sorunlar

2 Cevap php

Ben mesaj geri mysql veritabanına aşağıdaki PHP formu var. Benim sorun güncelleştirme sorgusu iş gibi görünüyor, ama her zaman "kontrol" ile yazılır. Ne yapmak istiyorum onay veritabanından geçerli değeri olsun ve sonrası bir değer varsa o, bunun yerine olsun. Şimdi ... bu neden çalışmıyor? Bu _POST ise kontrol ederken ben bir başka madde olması gerekiyor? Bu durum buysa, ben bile $ checkDeleted = "" ile değişken initilise gerekiyor;?

<?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"];
}
$checkDeleted = "";
$con = mysqli_connect("localhost","user","pw", "db");
$getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");
while ($row = mysqli_fetch_assoc($getformdata)) {
    $ARTICLE_NO = $row['ARTICLE_NO'];
    $checkDeleted = $row['deleted'];
}
$checkboxes = (isset($_POST['checkboxes'])? $_POST['checkboxes'] : array());
if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';
if($cmd=="submitinfo") {
    if ($ARTICLE_NO == null) {
    	$statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
    	if ($statusInfo = $con->prepare($statusQuery)) {
    		$statusInfo->bind_param("ss", $pk, $checkDeleted);
    		$statusInfo->execute();
    		$statusInfo->close();
    	} else {
    		print_r($con->error);
    	}
    } else if ($ARTICLE_NO == $pk) {
    	$statusQuery = "UPDATE STATUS SET deleted = ? WHERE ARTICLE_NO = ?";
    	if ($statusInfo = $con->prepare($statusQuery)) {
    		$statusInfo->bind_param("ss", $checkDeleted, $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\">
                        <input type=\"checkbox\" name=\"checkboxes[]\" value=\"deleted\" ".$checkDeleted." />
                        <label for=\"deleted\">Delete</label>
                        <input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
                        <input name=\"Submit\" type=\"submit\" value=\"submit\" />
        </form>";
}
?>

Ben gerektiği halde .. hiç fark yapılmış, aşağıdakilere checkDeleted ayarlamak için çizgiyi değiştirmeyi denedim?

if (in_array('deleted', $checkboxes)) {
$checkDeleted = 'checked';
} else {
$checkDeleted = '';
}

edit: Tamam, ben bu işe almak başardı, ancak değiştirdikten sonra var

$ CheckDeleted = in_array ($ onay kutularını 'silindi')? 'Işaretli':'';

Aşağıdaki cevap başına, ama bu yine de işe yaramadı. Çalışması için ben veritabanı sorgusu kaldırmak ve neden SubmitInfo şube içinde bir ve EditStatusData şube içinde bir ... ile değiştirmek zorunda kaldı? Neden sadece tek bir sorgu olması mümkün değil mi?

if($cmd=="submitinfo") {

$getformdata = $con->query("select ARTICLE_NO from STATUS where ARTICLE_NO = '$pk'");

while ($row = mysqli_fetch_assoc($getformdata)) {
    $ARTICLE_NO = $row['ARTICLE_NO'];
}    
    if ($ARTICLE_NO == null) { etc

ve

if($cmd=="EditStatusData") {
$getformdata = $con->query("select deleted from STATUS where ARTICLE_NO = '$pk'");

while ($row = mysqli_fetch_assoc($getformdata)) {
    $checkDeleted = $row['deleted'];
} etc

2 Cevap

Bu diğer soruya hemen hemen aynıdır

http://stackoverflow.com/questions/904879/mysql-not-updating-from-php-form/905834#905834

kodu ile yanlış bir şey yok, bu tam istediğiniz gibi çalışıyor

Ne yapmak istiyorum veritabanından geçerli değeri olsun ve sonrası bir değer varsa o, bunun yerine olsun.

case 1: html form with no tick

  1. veritabanı $ checkDeleted = 'işaretli' okunan
  2. $ _POST ['onay kutularını'] ['silindi'] ayarlı değilse, olduğu gibi $ checkDeleted bırakın
  3. veritabanına 'kontrol' yazıyor

case 2. html form with tick

  1. veritabanı $ checkDeleted = 'işaretli' okunan
  2. $ _POST ['onay kutularını'] ['silindi'] ayarlı ise, 'kontrol' $ checkDeleted = değiştirmek
  3. veritabanına 'kontrol' yazıyor

Eğer bir kene ya da varsa o zaman kontrol için veritabanı değeri değişti zamanlar çok olursa olsun, bunu değiştirmek için hiçbir yolu yoktur

Ben ne yapmak istiyorum, her zaman bu durumda, onay kutusu ayarlanır ne olursa olsun veritabanı değerin üzerine farz olur

Bu satırı değiştirin

 if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';

bununla

 $checkDeleted = in_array('deleted', $checkboxes) ? 'checked' : '';

Veri GET'ing eğer bu sadece çalışır:

$getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");

İsteğiniz POST ise kod $ pk ayarlı değil. Onlar $ _GET ['pk'] sevdim herhangi bir veri koymak olabilir ayrıca bir kullanıcı olarak bu satırda $ pk değişkeni kaçmak gerekir ve bu SQL sorgusu kırılabilir.