Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Dodawanie rekordów
Forum PHP.pl > Forum > Przedszkole
Lee
Mam problem z dodawaniem rekordów do bazy danych MySQL używając klas w php5. Otóż gdy któreś z pól formularzu jest niewypełnione (nieobowiązkowe typu gg) to skrypt dodający wpis wysypuje się, wywala:
Cytat
Column count doesn't match value count at row 1

Co znaczy, że nie zgadza się ilość kolumn o czym wiem, ale nie wiem jak temu zapobiedz. Otóż dane wysyłam do metody w ten sposób:
  1. <?php
  2. $params = array('kolumna1', 'kolumna2');
  3. $values = array($dane1 $dane2);
  4. $mysql -> add_row($params, $values, $nazwa_tabeli);
  5. ?>

W klasie, metoda tworzy z tego zapytanie
  1. <?php
  2. public function add_row($params, $values, $table) {
  3. $db_query = "INSERT INTO `$table` (";
  4. foreach ($params as $param) {
  5. $db_query .= '`'.$param.'`,';
  6. }
  7. $db_query .= '``) VALUES(';
  8. foreach ($values as $value) {
  9. $db_query .= '''.$value.'',';
  10. }
  11. $db_query .= ''')';
  12. $db_query = str_replace(array(',``',','''), '', $db_query);
  13. echo $db_query;
  14. $this -> query = mysql_query($db_query) or die (mysql_error());
  15.  
  16. return 0;
  17. }
  18. ?>

I wykonuje je, tylko, że jeżeli przekazuję pustą zmieną do tablicy $values to po prostu jest wolne miejsce i wszystko się wysypuje. Jaki macie pomysł na naprawę tego skryptu? Bo ja nie mam żadnego worriedsmiley.gif Wypełnianie NULLami zmiennych chciałbym odstawić, bo chciałbym, żeby skrypt był w miarę uniwersalny.
Kicok
Zastosuj implode" title="Zobacz w manualu PHP" target="_manual

  1. <?php
  2.  
  3. $db_query = "INSERT INTO `$table` (`";
  4. $db_query .= implode( "`, `", $params );
  5. $db_query .= "` VALUES ('";
  6. $db_query .= implode( "', '", $values );
  7. $db_query .= "')";
  8.  
  9. echo $db_query;
  10.  
  11. ?>


Jeśli ilość elementów tablicy $params jest równa ilości elementów tablicy $values to nie powinno jużci tego błędu wyrzucać.
Lee
Dzięki wielkie, działa smile.gif Nie pomyślałem żeby użyć funkcji implode zapomniałem o niej tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.