Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysq]Problem z foreach i insert into.
Forum PHP.pl > Forum > PHP
ko1
Witam, mam problem z wpisaniem do bazy mysql danych z tablicy. Najpierw wpisuje do tablicy dane z pliku xls, dane wczytuja sie prawidlowo. Potem gdy w petli foreach chce przez insert into wpisac do bazy te dane, wpisuje się do bazy tylko część danych. Gdy usune linijkę z insert into ta sama pętla wypisuje na ekran prawidlowo wszystkie wpisy tablicy, gdy jednak zamiast wypisania na ekran chce wpisac do tabeli mysql wpisuje się tylko część danych z tablicy. Z góry dziękuje. Kod:
CODE
$t = array_unique($wynik);

$data = date("Y-m-d");
foreach ($t as $value4) {

$czy2 = @mysql_query("select * from arty where mail = '$value4'");
$czy3 = @mysql_query("select * from mailinglist where email = '$value4'");

if(@mysql_num_rows($czy2) == 0 && @mysql_num_rows($czy3) == 0 ){

echo "\n";
echo "$value4 \n $n";

$dodaj = @mysql_query("INSERT INTO mailinglist (email, data, category) VALUES('$value4', '$data', $typ)") or die(mysql_error());

}
}
?>
WebCM
Zdefiniowałeś zmienne $data i $typ?

Zainteresuj się rozszerzeniem MySQLi" title="Zobacz w manualu PHP" target="_manual i podpinaniem danych do zapytania. Masz wtedy pewność, że dane zostaną wysłane do serwera bezpiecznie (oczywiście jeśli pochodzą z zewnątrz - czyli od internauty - musisz je zabezpieczyć - np. aby nie wcisnął kodu HTML i nie wykradł informacji - htmlspecialchars" title="Zobacz w manualu PHP" target="_manual).
elemek
zapewne typ kolumny do której wpisujesz dane to varchar(255) spróbuj mediumtext w ten wszystko powinno się zmieścić ;]
franki01
Cytat(WebCM @ 21.08.2008, 17:08:37 ) *
Zdefiniowałeś zmienne $data i $typ?

Zainteresuj się rozszerzeniem MySQLi" title="Zobacz w manualu PHP" target="_manual i podpinaniem danych do zapytania. Masz wtedy pewność, że dane zostaną wysłane do serwera bezpiecznie (oczywiście jeśli pochodzą z zewnątrz, musisz je zabezpieczyć - np. aby nie zawierały kodu HTML - htmlspecialchars" title="Zobacz w manualu PHP" target="_manual).

Nie htmlspecialchars, tylko mysqli_real_escape_string" title="Zobacz w manualu PHP" target="_manual - to ma znaczenie.

Może ta linijka:
Kod
if(@mysql_num_rows($czy2) == 0 && @mysql_num_rows($czy3) == 0 ){
sprawia, że niektóre dane nie są dodawane.

Daj na górze kodu $i = 0;, a potem bezpośrednio pod zapytaniem INSERT $i++;. Po wykonaniu pętli wyświetl $i i zobacz czy jest tyle samo dodanych rekordów w tabeli. Porównaj to z ilością emaili z danych wejściowych. Wynik napisz tu.
ko1
Dzieki za odpowiedz. Tak wszystkie zmienne są zdefiniowane. Dziwne jest to ze np, że gdy w tablicy jest kilkaset komórek, to wszystko wpisuje się dobrze, jednak gdy komórek jest np 10000 to wczytuje się tylko 1000(ten tysiąc wczytany jest też prawidłowo) jednak reszta staje, także dalsza cześć akrtyptu się nie wykonuje.

Franki, tego własnie próbowałem i ta dodatkowa iteracja jest prawidłowa, wynosi tyle ile powinno byc wpisów.
elemek
hmm niejasno napisałeś, wiec problem jest nie z danymi w kolumnie a z ilością wierszy tak?

spróbuj zwiększyć limit czasu wykonania skryptu smile.gif

dodaj to na początek skryptu.

  1. <?php
  2. ?>
franki01
Może skrypt wykonuje się za długo i jest przerywany.. set_time_limit" title="Zobacz w manualu PHP" target="_manual - spróbuj tego. Ustaw to na set_time_limit(0); i może wszystko się doda. Jeżeli robisz to na wykupionym hostingu, to ta komenda może czasami nie działać. Wtedy możesz też spróbować ini_set('max_execution_time', 0);, które z założenia powinno działać tak samo.

EDIT:
elemek mnie wyprzedził winksmiley.jpg
ko1
Tak elemek i franki mają racje, wieelkieee dzięki ludzie, faktycznie limit wynosił 30 sekund i gdy komórek byo z 10000 to rzeczywiscie skrypt przerywał wykonanie. Jeszcze raz dzieki wielkie!
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.