J'ai un site web avec sudoku. Les utilisateurs peuvent sauver leur Sudoku pour finir plus tard. Je voudrais optimiser ou raccourcir mon code. A1, A2, A3 ... [...] Sont le "nom" des champs individuels de Sudoku. J'utilise une bibliothèque PDO.
Ceci est le code PHP qui enregistre tous les champs Sudoku à la base de données: p> puis-je raccourcir ce code en quelque sorte à l'aide de boucles? Toute suggestion? P> et comment le faire? P> p>
3 Réponses :
Cela devrait faire ce que vous voulez
$query->bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT); $query->bindValue(':id_wynik', $_POST['id_wynik'], PDO::PARAM_INT); $alpha = ['a','b','c','d','e','f','g','h','i']; $max = 9; foreach ($alpha as $a){ for ($n=1; $n<=$max; $n++) { $query->bindValue(":$a$n", $_POST[$a$n], PDO::PARAM_INT); } }
Vous êtes en effet un maître de bête.
@Funkfortyniner et vous êtes, je crois, prenant le Michael Mon Ami mais c'est toujours agréable d'avoir de vos nouvelles :)
Votre code génère une erreur. J'ai changé $ _Post ['$ a $ n] à $ _post [' '. $ A.' '. $ N.' '] Et travaille maintenant bien. Merci!
Vous pouvez transmettre un tableau associatif en tant que paramètre sur la méthode code> exécuter code>:
Mais les valeurs sont traitées comme des chaînes que je crois et non des entiers
@Riggsfolly Vous êtes correct. Bien que cela fonctionne, les valeurs seront traitées comme des chaînes et MySQL devra la convertir en Int. Comme ce n'est pas trop de valeurs, l'impact sur la performance sera probablement négligeable, mais votre réponse est meilleure
$colNames = ''; $colValus = ''; $charArray = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'); foreach($charArray as $key => $char) { for($i=1; $i<=9; $i++) { $colNames .= ',' . $char . $i; $colValues .= ':' . $char . $i; } } $sqlQuery = 'INSERT INTO rozw (user_id, id_wynik, ' . $colNames . ' VALUES (:user_id, :id_wynik, ' . $colValues . '))'; $query->bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT); $query->bindValue(':id_wynik', $_POST['id_wynik'], PDO::PARAM_INT); foreach($charArray as $key => $char) { for($i=1; $i<=9; $i++) { $colVal = ':' . $char . $i; $postVal = $char . $i; $query->bindValue($colVal , $_POST[$postVal], PDO::PARAM_INT); } } $query->execute();
Oui bien sûr vous pourriez
Mais bien sûr, une telle structure de table crie de la conception inappropriée de la base de données. Envisagez de normaliser votre base de données.
@Votre sens commun Pourquoi pensez-vous que ma table est incorrecte? J'ai une table "Rozw" avec des cellules A1, A2, A3 ... qui correspondent à chaque champ de Sudoku. Comment dois-je le reconstruire?