Php şeklinde değişkenler geçen Sorunu

4 Cevap php

Ben şu php form var.

Form yüklendiğinde, değerleri uygun onay-değişkeni atanacak ki ben bunu yapmaya çalışıyorum. Bu değişken kontrol içeriyorsa, html ile görüntülenen yolu, ilgili onay kutusunun işaretli neden olmalıdır. "" Işaretli veya "içerecektir.

Olduğu gibi, değişkenler geçirilen gibi görünmüyor. Ben SubmitInfo şube içinde silinmiş $ veya $ haber echo, onlar boş. Dahası, hiçbir şey veritabanına eklenen ediliyor, ve ben herhangi bir veritabanı hata almıyorum. Bunu nasıl kontrol edebilirim?

<?php
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"];
}
if (isset($_POST["deleted"])) {
    $deleted = $_POST["deleted"];
}
if (isset($_POST["notice"])) {
    $notice = $_POST["notice"];
}
$con = mysqli_connect("localhost","user","password", "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 * from STATUS where ARTICLE_NO = '$pk'");
$checkDeleted = "";
$checkNotice = "";
while ($row = mysqli_fetch_assoc($getformdata)) {
    $checkDeleted = $row['deleted'];
    $checkNotice = $row['notice'];
}
if($cmd=="submitinfo") {
    $statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
    if ($statusInfo = $con->prepare($statusQuery)) {
    	$statusInfo->bind_param("ss", $deleted, $notice);
    	$statusInfo->execute();
    	$statusInfo->close();
    	echo "true";
    } else {
    	echo "false";
    }
    print_r($con->error);
}
if($cmd=="EditStatusData") {
    echo "<form name=\"statusForm\" action=\"test.php\" method=\"post\" enctype=\"multipart/form-data\">
<h1>Editing information for auction: ".$pk."</h1>
Löschung Ebay:
<input type=\"checkbox\" name=\"deleted\" value=\"checked\" ".$checkDeleted." />
<br />
Abmahnung:
<input type=\"checkbox\" name=\"notice\"  value=\"checked\" ".$checkNotice."  />
<br />
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
} else {
    print_r($con->error);
}

4 Cevap

Hataları denetleme hakkında web sunucusu günlüklerini denetleyin veya php php.ini hataları görüntülüyor olun.

Eğer web sayfasına gönderiyorsunuz? $ Silinir ve $ ilan sadece POST istekleri üzerine kurulacaktır.

Giriş tipi "kutucuğuna" değeri boş bir dize ise IIRC, bu kontrol edilmeyecektir. Bu başka bir şey olup olmadığını kontrol edilecektir. Orada görünüyor gibi, değeri her zaman "kontrol" olacak.

Ben kodunuzu takip emin değilim ...

Sizin HTML vardır:

value="checked"

Hangi kullanıcı kutusunu kontrol eder ve formu göndermesi durumunda, bu field ("Erkek", diyelim ki, bir değer aksine) "işaretli" bir değer vermek anlamına gelir.

Sadece değerler olarak bu olduğundan, daha sonra "denetlenmeyen" olarak tabloya eklenen bir şey asla olamaz, ayrıca, giriş alanı kontrolsüz sahiptir ve DB çıktı sadece atanmış herhangi bir öznitelik olmadan orada oturan kontrol ... mi kasıtlı? Aksi takdirde size etkisi şey var, DB değeri içine inşa:

 <input type="checkbox" name="notice" value="checked" "Foo" />

Hangi gerçekten en azından bir şey yararlı, çok şey yapmazdı.

Son olarak, sonuç olarak ben doğru okuyorum, sen var, getir:

$checkedValue = $row['checked'];

Bu, birden fazla sonuç varsa, sadece son satır bu değer atama, bu yüzden sen, hangi nedenle olursa olsun, sonunda boş bir satır var mı varsa, bu size boş değişkenleri ve hiçbir hata vermek demektir. Belki de, bir dizi olduğu atamak demek istediniz? Eğer ilk satır (veya tek bir satır bile) tek olduğunu teyit böylece Ya da en azından, mysql_num_rows () gibi, sonuç sayısı bir kontrol yapın. Hatta bir failsafe eklemek ve bir yineleme sonra ise döngü sona sahip, sadece durumda olabilir.

Ah, son bir şey, sizin kod kullanırsanız Heredoc syntax aka EOD yazmak ve okumak için daha temiz ve daha kolay olacaktır. Bu ile, çift tırnak tüm yorum var olmaz ve siz yapabilirsiniz hala kullanıcı değişkenleri inline.

Form gönderme tarafı için kolay cevap aynı ad ve "kontrolsüz" bir değere sahip her onay kutusunu önce gizli bir girişi bulunmaktadır olduğunu. Onay kutusu işaretli sadece gizli girişin değeri üzerine olacaktır.

<input type="hidden" name="notice" value="unchecked" />
<input type="checkbox" name="notice" value="checked" />

Bu şekilde her zaman $ _POST ['uyarı'] için bir değer var.

Doğrulama hata yukarıda belirtilen ve onay kutusu işaretli durumunu ayarlamak için. "Işaretli" niteliği bir değeri olması gerekir xhtml için w3c standartlarına göre, bu durumda da "kontrol etti.

<?php

while ($row = mysqli_fetch_assoc($getformdata)) {
    $checkDeleted = ($row['deleted'] == 'checked') 
        ? 'checked="' . $row['deleted'] . '"' 
        : '';
    $checkNotice = ($row['notice'] == 'checked') 
        ? 'checked="' . $row['notice'] . '"' 
        : '';
}
?>

Şimdi "işaretli" senin nitelik standardına uygun olacaktır