Skocz do zawartości

Problem z dodawaniem do bazy


Buncol

Rekomendowane odpowiedzi

Cześć !

Jako, że zacząłem się uczyć PHP na początek postanowiłem napisać skrypt, który sprawdza pozycje i dopisuje do bazy danych.

Kod dostępny tutaj: https://pastie.org/private/rgoqav7oqh6pgoutq6xka

Problem polega na tym, że dopisuje tylko ostatnio sprawdzoną frazę a nie wszystkie. Trzeba na początku utworzyć jakąś pętlę, która będzie odpowiedzialna za sprawdzanie i dopisywanie wszystkich fraz.

Możecie coś doradzić jak taką pętlę stworzyć ?

Pozdrawiam

Marcin

Fotografia ślubna: www.marcindrechna.com

Odnośnik do komentarza
Udostępnij na innych stronach

PO pierwsze proponuje stosowac procedury aby troche było łatwiej w tym dłubać. I łatwiej widoczne były by te pętle które trzeba zrobić

Oczywiście można też sie bawic w obiektowość (zalecane)

$stmt = $pdo -> query('SELECT * FROM fraza LEFT JOIN strona USING (adresid) ');	 // wybieranie danych z tabeli

foreach($stmt as $row)
{
  PROCEDURE_JEDEN_WIERSZ;
}

Odnośnik do komentarza
Udostępnij na innych stronach

Maximus Marius dzięki za odpowiedź. Mógłbyś mi napisać jak utworzyć taką procedurę, ponieważ pierwszy raz spotykam się z tym pojęciem.

Oczywiście można też sie bawic w obiektowość (zalecane)

Tak wiem, ale na razie muszę nauczyć się programować strukturalnie.

Fotografia ślubna: www.marcindrechna.com

Odnośnik do komentarza
Udostępnij na innych stronach

proceduje = wykonuje, czyli możesz za pośrednictwem tej pętli dodwać do bazy wiersze pojedynczo

Ale jak to zrobić ?

foreach($stmt as $row)
{
  PROCEDURE_JEDEN_WIERSZ;
}

Co tutaj(PROCEDURE_JEDEN_WIERSZ;) wpisać ?

Bo z tym dodawaniem kombinuje już od dwóch dni, ale sam nie dam rady :/

Fotografia ślubna: www.marcindrechna.com

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czy dobrze Cię zrozumiałem. Wpisałem coś takiego:

	  $stmt = $pdo -> query('SELECT * FROM fraza LEFT JOIN strona USING (adresid) ');	 // wybieranie danych z tabeli

foreach($stmt as $row)
{
  $pdo -> query(' INSERT INTO fraza VALUES ('adresid','slowo') ');
}

Jeśli tak miało być to pojawia się błąd: Parse error: syntax error, unexpected T_STRING in / ... on line 20 (czyli ta: $pdo -> query(' INSERT INTO fraza VALUES ('adresid','slowo') '); )

Fotografia ślubna: www.marcindrechna.com

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli tak miało być to pojawia się błąd: Parse error: syntax error, unexpected T_STRING in / ... on line 20 (czyli ta: $pdo -> query(' INSERT INTO fraza VALUES ('adresid','slowo') '); )

daj $pdo -> query(' INSERT INTO fraza VALUES ("adresid","slowo") ');

Odnośnik do komentarza
Udostępnij na innych stronach

w Twoim skrypcie, który wrzuciłeś w pastie jest uzywane przykładowe dodawanie:

$pdo -> exec('INSERT INTO `pozycja` (`adresid`, `frazaid`, `miejsce`, `data`)VALUES(

\''.$_POST['adresid'].'\',

\''.$_POST['frazaid'].'\',

\''.$_POST['miejsce'].'\',

\''.$_POST['data'].'\')');

na tej podstawie musisz wykminić co jak dodać

pozycja - nazwa tablei w bazie

adresid`, `frazaid`, `miejsce`, `data - nazwy kolumn, muszą być takie jakie są w strukturze bazy

reszta w $_POST to bazy wartości które dodajesz do bazy

;)

Teraz pojawił mi się taki błąd:

Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

oznacza to ze kazdy rekord w tabeli ma np 5 pól a Ty dodajesz inną liczbę , dwa, sześć etc

Odnośnik do komentarza
Udostępnij na innych stronach

Kod trochę przerobiłem: https://pastie.org/private/rc68fmm1pd4bvhrct3zcw

Teraz dodaje bez

foreach($stmt as $row)
{
  PROCEDURE_JEDEN_WIERSZ;
}

Ale pojawił się inny problem. Jak np. nie wszystkie frazy sprawdzi, albo dodam w między czasie coś nowego to pojawia się taki błąd:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-1-2009-01-18' for key 1' in /home/buncol/ftp/a/cron.php:75 Stack trace: #0 /home/buncol/ftp/a/cron.php(75): PDO->exec('INSERT INTO `po...') #1 {main} thrown in /home/buncol/ftp/a/cron.php on line 75

A zapisane tam jest: \''.$_POST['data'].'\')');

Fotografia ślubna: www.marcindrechna.com

Odnośnik do komentarza
Udostępnij na innych stronach

Duplicate entry '1-1-2009-01-18' for key 1

W tabeli bazy danych masz ustawiony klucz, który zapobiega pojawieniu się dwóch takich samych rekordów o jakimś polu, np masz tabele z adresami stron i masz w nich pola: adres strony i właściciel. Jeśli ustawisz sobie klucz na pole adres strony i będziesz miał w bazie onet.pl i będziesz chciał dodać jeszcze raz wyskoczy taki błąd.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności