2015-06-11 2 views
0

Я пытаюсь использовать этот https://gist.github.com/linssen/2773872 на моей работе php, но этот код показывает только текст массива и не обновляется в моей базе данных.Сортировка PHP MYSQL

Главная:

<ul id="test-list"> 
<?php do { ?> 
<li id="listItem_<?php echo $row_dados['id']; ?>"><img src="images/arrow.png" alt="move" width="16" height="16" class="handle" /><strong><?php echo $row_dados['posicao']; ?></strong></li> 
<?php } while ($row_dados = mysql_fetch_assoc($dados)); ?> 
</ul> 

Это создает цикл, чтобы получить все записи из базы данных и показать его.

Сценарий:

<script type="text/javascript"> 
// When the document is ready set up our sortable with it's inherant function(s) 
$(document).ready(function() { 
$("#test-list").sortable({ 
handle : '.handle', 
update : function() { 
var order = $('#test-list').sortable('serialize'); 
$("#info").load("process-sortable.php?"+order); 
} 
}); 
}); 
</script> 

процесс-sortable.php:

<?php 
/* This is where you would inject your sql into the database 
    but we're just going to format it and send it back 
*/ 

foreach ($_GET['listItem'] as $position => $item) : 
    $sql[] = "UPDATE `dados` SET `posicao` = $position WHERE `id` = $item"; 
endforeach; 

print_r ($sql); 
?> 

Но это только печатает результат я хотел бы изменить этот код на самом деле обновить свою базу данных.

Результат:

Array 
(
    [0] => UPDATE `dados` SET `posicao` = 0 WHERE `id` = 4 
    [1] => UPDATE `dados` SET `posicao` = 1 WHERE `id` = 3 
    [2] => UPDATE `dados` SET `posicao` = 2 WHERE `id` = 1 
    [3] => UPDATE `dados` SET `posicao` = 3 WHERE `id` = 2 
    [4] => UPDATE `dados` SET `posicao` = 4 WHERE `id` = 5 
    [5] => UPDATE `dados` SET `posicao` = 5 WHERE `id` = 6 
    [6] => UPDATE `dados` SET `posicao` = 6 WHERE `id` = 7 
    [7] => UPDATE `dados` SET `posicao` = 7 WHERE `id` = 8 
    [8] => UPDATE `dados` SET `posicao` = 8 WHERE `id` = 9 
    [9] => UPDATE `dados` SET `posicao` = 9 WHERE `id` = 10 
    [10] => UPDATE `dados` SET `posicao` = 10 WHERE `id` = 277 
    [11] => UPDATE `dados` SET `posicao` = 11 WHERE `id` = 278 
) 

Так его работает нормально, но не изменяет базу данных, основанную на этой линии.

Так что probem, вероятно, находится на process-sortable.php, поэтому любая помощь будет потрясающей.

Cumps.

ответ

0

connection в вашу базу данных, затем prepare и execute.

<?php 
/* Connect to an ODBC database using driver invocation */ 
$dsn  = 'mysql:dbname=testdb;host=127.0.0.1'; 
$user  = 'dbuser'; 
$password = 'dbpass'; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
    $stmt = $dbh->prepare('UPDATE `table` SET `position` = :position WHERE `id` = :id') ; 

    foreach ($_GET['listItem'] as $position => $item) { 
     $stmt->execute(array(':position' => $position, ':id' => $item)); 
    } 
} catch (PDOException $e) { 
    echo 'Something went wrong: ' . $e->getMessage(); 
} 
+0

Doesnt дать какую-либо ошибку, но его не обновляет базу данных. – Bruno

+0

хорошо разрешить ошибки и ошибки отображения – venca

0

Этот код gist принадлежит вам или вам ссылки? Кстати, вы проверяете соединение с базой данных и откуда стоит $ item?

Вы можете установить $ item из $ _POST/$ _GET, sql выбрать или определить непосредственно перед выполнением обновления sql. Проверьте мой фрагмент кода ниже, я поставил комментарий, так что вы можете прочитать проще:

<?php 
// Create connection to database 
$con = mysqli_connect("localhost","your_db_username","your_db_password","your_db_name"); 

// Validate database connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

// You need to get $item from somewhere else (e.g : You set as variable $item=1) 
$item = 1; 

// You update statement here 
foreach ($_GET['listItem'] as $position){ 
    $sql = "UPDATE dados SET posicao = {$position} WHERE id = {$item}"; 
    if (mysqli_query($conn, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($conn); 
    } 
} 

mysqli_close($conn); 
?> 
+0

не работает, я улучшил вопрос, чтобы вы могли получить его лучше. И btw элемент $ get get from main из

  • Bruno

    0

    Вы можете использовать процессный sortable.php файл как

     <?php 
        /* This is where you would inject your sql into the database 
         but we're just going to format it and send it back 
        */ 
    
        foreach ($_GET['listItem'] as $position => $item) : 
         $sql[] = "UPDATE `dados` SET `posicao` = $position WHERE `id` = $item"; 
        endforeach; 
    
        $sql_str = implode(',',$sql); 
        //execute $sql_str in mysql query string you will get output 
    
        print_r ($sql_str); 
        ?>