PHP ve MySQL doğrulayarak sorun

4 Cevap php

Bu renk girdi ve saklanan veritabanına ve aşağıdaki hata kodu <p>This color has already been entered!</p> gösterilmesi gereken olmamalıdır eğer ben bir renk zaten veritabanına girilmiş olup olmadığını kontrol etmek için çalışıyorum. Ama nedense ben, iş bu olsun cant birisi lütfen bana yardımcı olabilir?

Renk adları $_POST['color'] hangi kullanıcı tarafından girilen bir dizidir girilir.

İşte renkleri toplayan html kodudur.

<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />

Burada PHP & olduğunu MySQL kodu.

for($i=0; $i < count($_POST['color']); $i++) {
    $color = "'" . $_POST['color'][$i] . "'";
}

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color = '$color' 
                             AND user = '$user_id' ");

if(mysqli_num_rows($dbc) == TRUE) {
    echo '<p>This color has already been entered!</p>';
} else if(mysqli_num_rows($dbc) == 0) {
    // enter the color into the database
}

4 Cevap

Önce tüm renkleri alıp onlara karşı kontrol etmelisiniz gereksiz querys önlemek için:

$colors = array();
$mysqli = mysqli_connect("localhost", "root", "", "sitename");
if($result = mysqli_query($mysqli,"SELECT color FROM colors WHERE user = '$user_id' ") {
    while($row = mysqli_fetch_array($result)) {
        $colors[] = $row['color'];
    }
    mysqli_free_result($result);
}

foreach($_POST['color'] as $color) {
    if(in_array($color, $colors) {
        echo '<p>Color ' . $color . ' has already been entered!</p>';
    } 
    else {
        // enter the color into the database
    }
}

Make sure to sanitize the user input!

Eğer aşağıdaki gibi bir şey kullanmak gerekir böylece birden fazla renk var.

$mysqli = mysqli_connect("localhost", "root", "", "sitename");

for($i=0; $i < count($_POST['color']); $i++) {
    $color = "'" . $_POST['color'][$i] . "'";

    $dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color = '$color' 
                             AND user = '$user_id' ");

    if(mysqli_num_rows($dbc) == TRUE) {
       echo '<p>'.$color.' color has already been entered!</p>';
    } else if(mysqli_num_rows($dbc) == 0) {
    // enter the color into the database
    }
}

Sen IN operatörünü kullanmanız gerekir. Örneğin,

$color = null;
for($i=0; $i < count($_POST['color']); $i++) {
    if ($color == null)
       $sep = '';
    else 
       $sep = ',';
    $color = $sep . "'" . $_POST['color'][$i] . "'";
}

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color IN ($color) 
                             AND user = '$user_id' ");

Bu aslında bir cevap değil, ama öğrenmek için çok önemli bir şey:

Ben basit bir şey demek: Eğer ilk SQL ile yalnızca, hiçbir PHP veya HTML uğraşmak zorunda. , Renkler kontrol çalıştırmak, bunu test etmek için bir SQL sorgusu oluşturun ve size statisfied kez - PHP için gidin. bir değişken aynı sorgu oluşturmak için, ve örnek bir ile karşılaştırın. Tamamlandığında, son anda HTML için gidebilirsiniz.

Yani, geliştirme süreci 3 aşamada bölünmesi gerekir:

  1. SQL sahne. Bir sorgu oluşturun. Ne istediğinizi sorgu bilmiyorsanız "Ben 3 renk adlarını ve bir tablo var bu renklerde herhangi bir tabloda zaten varsa nasıl kontrol." Gibi, SO somethink burada sor. Bir kez yapılır - Sorgu Tamam çalışır sağlamak ve istenen sonuçları döndürmek için check it out.
  2. PHP sahne. Eğer bir sorgu var, PHP komut echo. Ve, aşağıda bazı değişkenler bu sorgu üretmek kodu bir kod yazmak. Hem sorguları aynı elde edene kadar, karşılaştırmak için yazdırabilirsiniz.
  3. HTML sahne. Onlardan SQL sorgusu oluşturmak ve nihayet çalışacak PHP script içine renk adlarını gönderecek bir HTML formu olun.

Remember: to know which query you want to run is very-very important! Without this knowledge you cannot go any further
Every answer here lack to mention SQL query itself.