çoklu seçim kutusundan MySQL için birden fazla kaydı gönderme

2 Cevap php

Ben çoklu seçim kutusundan seçilen seçeneklerin sayısına bağlı olarak bir MySQL tabloya birden fazla satır eklemek için çalışıyorum. şu anda (ne olursa olsun seçilen kaç seçenek var) bir satır ekleme ama 'strategyname' sütunu her zaman boştur.

Herhangi Birden fazla satır eklemek için ve neden seçeneklerin değerleri tabloya gönderilmiyor nasıl fikir?

İşte şeklidir:

<form method="POST" action="update4.php">

<input type="hidden" name="id" value="1">

<p class="subheadsmall">Strategies</p>

<p class="sidebargrey">

<?php

    		$result = mysql_query("SELECT strategyname FROM sslink WHERE study_id = '{$_GET['id']}'");
    			if (!$result) {
    				die("Database query failed: " . mysql_error());
    			}

while($row = mysql_fetch_array($result)) {
    $strategyname = $row['strategyname'];


    echo $strategyname.'<br />';
}

?>
        <p class="subheadsmall">Add a strategy... (hold down command key to select more than one)</p>

<select name="strategylist" multiple="multiple">
     <?php

    		$result = mysql_query("SELECT * FROM strategies");
    			if (!$result) {
    				die("Database query failed: " . mysql_error());
    			}

while($row = mysql_fetch_array($result)) {
    $strategylist = $row['name'];
    $strategyname = htmlspecialchars($row['name']);
    echo '<option value="' . $strategylist . '" >' . $strategyname . '</option>' . '\n';
}

?>
</select>
    </p>



<input type="submit" class="box" id="editbutton" value="Update Article">

</form>

Bu veritabanına gönderir budur:

<?php
$id=$_POST['id'];
$test=$_POST['strategylist'];
$db="database";

$link = mysql_connect("localhost", "root", "root");
//$link = mysql_connect("localhost",$_POST['username'],$_POST['password']);
if (! $link)
die("Couldn't connect to MySQL");
mysql_select_db($db , $link) or die("Select Error: ".mysql_error());
//for($i=0;$i<sizeof($_POST["test"]);$i++)
//{
//$sql = "insert into tbl_name values ($_POST["test"][$i])"; }
//sql = "INSERT INTO table_name VALUES ('" . join(",",$_POST["test"]) . "')";
$result=mysql_query("INSERT INTO sslink (study_id, strategyname) VALUES ('$id','" . join(",",$_POST["strategylist"]) . "')")or die("Insert Error: ".mysql_error());
mysql_close($link);
print "Record added\n";
?>

2 Cevap

Puan çift:

  • da select oldukça tek bir değeri daha bir dizi içerecektir PHP anlatmak için strategylist[] adında gereken
  • Sizin insert kodu o zaman tüm bu seçenekleri tek bir satırın alanına birleştirilmiş olmak istiyorum (göründüğü gibi) sürece, içerdiği her bir eleman için yeni bir ekleme oluşturarak, o dizinin üzerinde yineleme gerekiyor.

Şu anda, form sadece (PHP'nin açısından) tek bir seçeneği verir, bu yüzden sadece tek bir satır eklemek için gidiyor.

Dizinin üzerinde yineleme için, bu gibi bir şey kullanabilirsiniz:

foreach($_POST["strategylist[]"] as $s) {
    # do the insert here, but use $s instead of $_POST["strategylist[]"]
    $result=mysql_query("INSERT INTO sslink (study_id, strategyname) " .
       "VALUES ('$id','" . join(",",$s) . "')")
        or die("Insert Error: ".mysql_error());
}

İki şey:

  1. Bunu birden çok seçim ile sayfanın kaynağını görmek, oraya <option value="something"> çizgiler görebilirsiniz? Değerleri boş? Bu dosyanın en üstünde $row['strategyname'] kullanıyor ve daha sonra $row['name'] kullandığınızı bana garip görünüyor. Ben bu boş StrategyName sütunun neden olabilir şüpheli.

  2. Birden çok seçim işlemek için seçin etiket olarak belirtmelidir

    <select name="strategylist[]" multiple="multiple">
    

    Ekstra [] içinde seçimlerin tümünü bir dizi oluşturmak için PHP söyler. Sen gibi dizinin üzerinde daha sonra döngü yapabilirsiniz:

    $strategylist = $_POST['strategylist'];
    for ($i = 0; $i < count($strategylist); $i++) {
        $strategyname = $strategylist[$i];
        // Insert a record...
    }