Değişkenler "kaybolabilir"

3 Cevap php

Herhalde kendimi korkunç scripting ile bir aptal gibi görünmesi için gidiyorum ama burada biz gitmek.

Ben ikili bir yöntem kullanarak checkbox bilgi bir demet topluyorum bir form var. ON / SET = 1! Isset = 0

Her neyse, bütün sorgu biti haricinde planlandığı gibi gidiyor gibi görünüyor. Ben komut dosyasını çalıştırdığınızda, bu geçiyor ve hiç hata atar, ama ben think Ben DB içinde belirtilen güncelleme alanları olan Tom söylüyorum ne yapıyor değil.

Ben sert sorgu içine istenilen değerlere kodlu ettik ve DB güncelleme YAPAR. Ben kurduk ve sonra sorguda üzerine aradığım inanıyorum değişkenler dayanarak DB güncelleme DEĞIL.

Ben de komut çalıştıktan sonra, tüm gerekli değişkenleri yankılanan ve bu yüzden ben onları denetleyebilir hemen sonra çıkarken denedim ... ve hepsi oradalar. İşte bir örnek.

  ####FEATURES RECORD UPDATE
### HERE I DECIDE TO RUN THE SCRIPT BASED ON WHETHER AN IMAGE BUTTON WAS USED
if (isset($_POST["button_x"])) { 

### HERE I AM ASSIGNING 1 OR 0 TO A VAR BASED ON WHTER THE CHECKBOX WAS SET
if (isset($_POST["pool"])) $pool=1;
if (!isset($_POST["pool"])) $pool=0;
if (isset($_POST["darts"])) $darts=1;
if (!isset($_POST["darts"])) $darts=0;
if (isset($_POST["karaoke"])) $karaoke=1;
if (!isset($_POST["karaoke"])) $karaoke=0;
if (isset($_POST["trivia"])) $trivia=1;
if (!isset($_POST["trivia"])) $trivia=0;
if (isset($_POST["wii"])) $wii=1;
if (!isset($_POST["wii"])) $wii=0;
if (isset($_POST["guitarhero"])) $guitarhero=1;
if (!isset($_POST["guitarhero"])) $guitarhero=0;
if (isset($_POST["megatouch"])) $megatouch=1;
if (!isset($_POST["megatouch"])) $megatouch=0;
if (isset($_POST["arcade"])) $arcade=1;
if (!isset($_POST["arcade"])) $arcade=0;
if (isset($_POST["jukebox"])) $jukebox=1;
if (!isset($_POST["jukebox"])) $jukebox=0;
if (isset($_POST["dancefloor"])) $dancefloor=1;
if (!isset($_POST["dancefloor"])) $dancefloor=0;

### I'VE DONE LOADS OF PERMUTATIONS HERE... HARD SET THE 1/0 VARS AND LEFT THE $estab_id TO BE PICKED UP.  SET THE $estab_id AND LEFT THE COLUMN DATA TO BE PICKED UP.  ALL NO GOOD.  IT _DOES_ WORK IF I HARD SET ALL VARS THOUGH

mysql_query("UPDATE thedatabase SET pool_table='$pool', darts='$darts', karoke='$karaoke', trivia='$trivia', wii='$wii', megatouch='$megatouch', guitar_hero='$guitarhero', arcade_games='$arcade', dancefloor='$dancefloor' WHERE establishment_id='22'");

 ###WEIRD THING HERE IS IF I ECHO THE VARS AT THIS POINT AND THEN EXIT(); they all show up as intended. 

header("location:theadminfilething.php");
exit();

TEŞEKKÜRLER TÜM!

3 Cevap

Sizin kod gerçekten bazı hata denetimini kullanabilirsiniz. Eğer komut hataları görüntüleyen aktive emin olun.

(Zaten eşdeğer bir şey yapmadıysanız) ve test ortamında örneğin ana yazısının üstündeki bu ekleyin:

error_reporting( E_ALL | E_STRICT );
ini_set( 'display_errors', 1 );

Sonra (yukarıdaki bağımlı olmasa da) emin gibi bir şey ile sorgu sonucunu soruşturma yapmak:

if( false === mysql_query( 'UPDATE ...etc' ) )
{
   echo 'query failed with error:' . mysql_error();
}

Benim tahminim bu sütun adı karaoke yanlış yazılmış olduğu hata ile başarısız olacaktır. Ama daha hataları olabilir.

Ayrıca, hsz' suggestions (sorunun muhtemelen kök gerçi) spot on. Kolay kodunu korumak için yapar, ve önemli ölçüde azaltır kodu.

Senin gibi bir şey kullanmanızı öneririz:

$fields = array('pool', 'darts', 'karaoke', 'trivia', ...);
foreach ( $fields as $field ) {
    $$field = isset($_POST[$field]) ? 1 : 0;
}

Bunun yerine, if s 20 satır.

Sizin sütunlar ENUM veya int yazın? int if - kesme bırakın.

Öncelikle, bir değişkene sql sorgu dizesi oluşturmak ve sonra (mysql_query onu geçmek), header () hat açıklama ve hata ayıklama için sorgu çıktı. Örneğin:

...
$sql="UPDATE thedatabase SET pool_table='$pool', darts='$darts', karoke='$karaoke', trivia='$trivia', wii='$wii', megatouch='$megatouch', guitar_hero='$guitarhero', arcade_games='$arcade', dancefloor='$dancefloor' WHERE establishment_id='22'";
print("$sql");
mysql_query($sql);
//header("location:theadminfilething.php");
exit();
...

İkincisi, senaryoyu çıkarken Tho bile, onun iyi bir uygulama her zaman parantez maç. Eğer kod sonunda ise ifadesi için son kuşak eksik.

Bu phpMyAdmin veya komut satırında sokmak 'elle' it yürüterek çalışırsa $ sql değişken çıkış değeri görebilirsiniz. Ne olur?