Co tu jest zepsute (Undefined offset: 1 Undefined offset: 2)

0

$data = [$linki];
    $query=$db->prepare("INSERT INTO tabela (id,tytul,link,se,od,co) VALUES (NULL,:tytul,:link,:se,:od,:co) ");
    foreach( $data as $wstaw){
        foreach($wstaw as $d){
            $c=explode(" ",$d);
            $s=$c[0];$e=$c[1];$l=$c[2]; // tu problem 
//Undefined offset: 1  Undefined offset: 2
            $query->bindParam(':tytul',$tytul,PDO::PARAM_STR);
            $query->bindParam(':link',$l,PDO::PARAM_STR);
            $query->bindParam(':se',$s,PDO::PARAM_STR);
            $query->bindParam(':od',$e,PDO::PARAM_STR);
            $query->bindParam(':co',$co,PDO::PARAM_STR);
            $query->execute();
            echo $l.'<br>'; // tu wyświetla prawidłowo wszystko 
             
            }
        }
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'link' cannot be null


O ile rozumiem co oznacza fatal error ,to nie mam pojęcia dlaczego wystąpił
Doradźcie proszę jak to naprawić

5

Po pierwsze, Twój zapis

$s=$c[0];$e=$c[1];$l=$c[2];

można zastąpić:

[$s, $e, $l] = $c;

a nawet

[$s, $e, $l] = explode(" ",$d);

A co do samego problemu, no jasno widać że array $c nie ma indexu 1 ani 2, znaczy to że ma tylko index 0, czyli ma jeden element. Można się z tego domyślić że explode() zwrócił jedno-elementowy array, bo Twoje $d pewnie nie ma spacji.

Proponuję przed explode(" ",$d); zrobić var_dump($d) oraz var_dump($c) i dowiesz się co tam jest.


PS: I na miłość boską, nie deklaruj zmiennych o nazwach a, b, c, d, etc. tylko nazwij je jakoś.

0

Dziękuje za zainteresowanie
Już działa teraz mam jeszcze pytanie jedno.
Ja obsłużyć coś takiego jak dodaje kilka linków naraz (bo to właśnie robie ) i dajmy na to że z 10 linków w bazie są już 4 z nich
W jaki sposób zrobić żeby pominęło te linki które już są a resztę dodało ?
Mam nadzieje że da się to obsłużyć PHP

0

Przy każdym linku sprawdzaj czy już istnieje w tabeli i jeśli tak to pomijaj?

0

Pytanie tylko jak skoro linki przychodzą jednym postem ?

0

Mam jeszcze jeden problem związany z tym
Mianowicie przy zapisywaniu do bazy pierwszy link zapisuje się prawidłowo ale już drugi i każdy kolejny zapisuje się w tak jakby po enterze
https://zapodaj.net/b552eb611688e.png.html
Jak to naprawić ?

0

nikt nie wie jak temu zaradzić ?
Musi być jakiś sposób żeby nie zostawiało pustego wiersza

1
Michał sz napisał(a):

Mam jeszcze jeden problem związany z tym
Mianowicie przy zapisywaniu do bazy pierwszy link zapisuje się prawidłowo ale już drugi i każdy kolejny zapisuje się w tak jakby po enterze
https://zapodaj.net/b552eb611688e.png.html
Jak to naprawić ?

Domyślam się, że przedstawiona informacja na zrzucie ekranu dotyczy kolumny tytuł? Jeśli tak to:

$query->bindParam(':tytul',trim($tytul),PDO::PARAM_STR);
Michał sz napisał(a):

Dziękuje za zainteresowanie
Już działa teraz mam jeszcze pytanie jedno.
Ja obsłużyć coś takiego jak dodaje kilka linków naraz (bo to właśnie robie ) i dajmy na to że z 10 linków w bazie są już 4 z nich
W jaki sposób zrobić żeby pominęło te linki które już są a resztę dodało ?
Mam nadzieje że da się to obsłużyć PHP

Co do tego problemu.

$data = [$linki];
$query=$db->prepare("INSERT INTO tabela (id,tytul,link,se,od,co) VALUES (NULL,:tytul,:link,:se,:od,:co) ");
foreach( $data as $wstaw)
{
    foreach($wstaw as $d)
    {

        $c = explode(" ",$d);
        $s = $c[0]; $e = $c[1]; $l = $c[2];

        // tu wstawiasz zapytanie do bazy o pobranie wyników z tabeli
        // przykład:: SELECT `id` FROM `tabela` WHERE `tytul`=':tytul' OR `link`=':link'
        // przepuszczasz to przez IF, jeśli znalazło jakiś podobny wynik używasz "continue;"
        // przykład:: if (count($result) > 0) continue;

        $query->bindParam(':tytul',$tytul,PDO::PARAM_STR);
        $query->bindParam(':link',$l,PDO::PARAM_STR);
        $query->bindParam(':se',$s,PDO::PARAM_STR);
        $query->bindParam(':od',$e,PDO::PARAM_STR);
        $query->bindParam(':co',$co,PDO::PARAM_STR);
        $query->execute();
        echo $l.'<br>'; // tu wyświetla prawidłowo wszystko 
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1