Döngü / Kaydet Fonksiyon otomatikleştirme için çalışılıyor

2 Cevap

EDIT: sayfalar arasındaki fark $ q2, q3 $, örneğin, $ q13, q14 $, $ q15 olur, sadece $ q1 - onlar şeklinde sorulardır.

Hi all,

Ben aşağıdaki kodu vardır:

$rguid = $_POST["r"];
$ip=substr($_SERVER['REMOTE_ADDR'], 0, 50);
$browser=substr($_SERVER['HTTP_USER_AGENT'], 0, 255);   

$q1 = $_POST["q1"];
$q2 = $_POST["q2"];
$q3 = $_POST["q3"];
$q4 = $_POST["q4"];
$q5 = $_POST["q5"];
$q6 = $_POST["q6"];
$q7 = $_POST["q7"];
$q8 = $_POST["q8"];

$respondent_id = decode_respondent_guid($rguid);
$rcount=respondent_status($respondent_id);

if ($rcount==0) {

    $proc = mysqli_prepare($link, "INSERT INTO tresults (respondent_id, ip, browser, q1, q2, q3, q4, q5, q6, q7, q8) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
    mysqli_stmt_bind_param($proc, "issiiiiiiii", $respondent_id, $ip, $browser, $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8);
    mysqli_stmt_execute($proc);
    $mysql_error = mysqli_error($link);
    if ($mysql_error!="") {
        printf("Unexpected database error: %s\n", $mysql_error);
        mysqli_stmt_close($proc);
        mysqli_clean_connection($link);
        exit();
    } else
    {
        mysqli_stmt_close($proc);
        mysqli_clean_connection($link);
        update_completion_status($respondent_id, 'Started');
        header("Location: page2.php?r=".$rguid);
    }
}

Sorun yok - Bu kod bir tedavi çalışır.

Şu anda, bu kodu ben her bir form ile 5. Php sayfaları varsa, ben her sayfaları verileri kaydetmek 5 save.php sayfaları gereken bir 'form' sayfasında (yani ilgili bir 'tasarruf' sayfasında görüntülenir benim SQL veritabanına veri kaydetmek için veritabanı). Ne istiyorum ben gibi birçok 'form' sayfaları ile çalışacak bir tek save.php sayfasına sahip olmaktır. Peki yerine elle kurulumu olan ve her sayfayı kaydetmek değiştiğini, onu otomatikleştirir.

Ben, vb bir foreach veya döngü gibi bir şey şüpheli olsa ben, bunu yapmak için kodlama hiçbir fikrim yok

Herhangi bir öneriniz?

Teşekkürler,

Homer.

2 Cevap

Aslında aynı "kaydetmek" sayfası için 5 formu sayfaları her birinde formun "eylem" olarak ayarlayabilirsiniz. Ama her sayfa o diğerlerinden farklı olması ve genelleme olabilir yaptığını kaydetmek ne farkında olmak zorunda. Örneğin, komut sonunda belirli bir sayfada (sayfa2.php) yeniden yönlendiriyorsunuz. # 1 kaydetmek farklı bir sayfaya gitmek gerekiyordu, o yönlendirme nereye gitmeli belirlemek için yeterli bilgi (sizin formdan) bu komut için geçmek zorunda.

Yukarıdaki kaldırdı soruların ve benim cevap mükemmel olmayabilir her zaman mevcut ihtar referans ile ...

Ben veritabanına bu cevapların depolama işlemek için tek bir "save.php" dosyası oluşturarak öneririm. Bu dosyaya cevapları gönderen sayfalar arasında ayırt etmek için, basit "page" (veya benzeri) olarak adlandırılan bir ek POST alanı bulunmaktadır. Bu alan bir hidden alanı olarak teslim ediliyor form içinde yer olabilir.

Ben de iki ek "firstQuestion" olarak adlandırılan alanları ve "lastQuestion" eklenmesi ve bu sayfadan ilk ve son soru tamsayılar içeren sonra işleyici kodlama yapacak öneririm çok daha kolaydır.

Ardından, "save.php" dosyası içinde, şu olabilir:

$fields = array();

$firstQ = int_val( $_POST['firstQuestion'] );
$lastQ = int_val( $_POST['lastQuestion'] );

for( $i=$firstQ ) ; $i<=$lastQ ; $i++ ) {
    $fields[$i] = mysqli_real_escape_string( $link , $_POST['q'.$i] );
}

$sqlFields = 'q'.implode( ', q' , array_keys( $fields ) );
$sqlValues = implode( ', ' . $fields );

$sqlQuery = sprintf( 'INSERT INTO tresults (respondent_id, ip, browser, %s ) VALUES ( %s, %s, %s, %s );' ,
              $sqlFields ,
              $respondent_id ,
              $ip ,
              $browser ,
              $sqlValues );
$proc = mysqli_prepare( $link, $sqlQuery );
mysqli_stmt_execute( $proc );

Eğer bir sonraki sayfaya yönlendirme Sonra nerede, daha aşağı, sadece, $_POST['page'] değişkeni toplamak tane ekleyin ve sayfa adının içine ekleyebilirsiniz.

$redirectPage = 'page'.( int_val( $_POST['page'] )+1 ).'.php';
header( 'Location: '.$redirectPage.'?r='.$rguid );