Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]header(), Problem z wywolaniem polecenia
Kaczmar
post 27.08.2019, 21:45:10
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


Witam
Mam problem z wywolaniem komendy header(). Problem polega na tym ze komende otwarcia nowej strony poprzedza proste zapytanie sql. Jesli mam kilka rekordow w bazie to skrypt sie wywoluje i dziala komenda header() ale kiedy w bazie rekordow jest troche wiecej to tak jakby zapytanie sql sie wydluza i nie odpala sie ta komenda...
Go to the top of the page
+Quote Post
leonpro778
post 28.08.2019, 05:53:18
Post #2





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


Co znaczy "się wydłuża" ? Może jakiś timeout jest w PHP ustawiony? Pokaż kod jak masz to zrobione. Wyskakują Ci jakieś błędy?
Go to the top of the page
+Quote Post
Tomplus
post 28.08.2019, 07:43:05
Post #3





Grupa: Zarejestrowani
Postów: 1 479
Pomógł: 176
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Może wywołanie header() ci się zapętla?
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 07:53:41
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


Chodzi o to że klikam przycisk i jeśli wypełnione są pola w inputach to ona mają się zaktualizować w bazie a następnie ma się przeładować nowa strona.
Działa to bez problemu dla około 10 rekordów w bazie ale jak jest ich więcej to przestaje się wykonywać to polecenie o przeładowaniu strony.
Baza się aktualizuje tak jak trzeba ale nie przeładowuje się do innej strony.

Kod
if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        
        $stmt = $pdo->query('SELECT * FROM `magazyn` ORDER BY `magazyn`.`name` ASC, ID, count, link');
        
        
        foreach($stmt as $row)
        {
            
            
            $stmt = $pdo -> prepare('UPDATE magazyn
                SET count=:count
                WHERE ID=:ID;
                ');
            
            if ($_POST['ilosc'.$row['ID']] <> '') {
                
                $dodanie = $_POST['ilosc'.$row['ID']];
                $nowa_wartosc = $row['count'];
                
                $stmt -> bindValue(':ID', $row['ID'], PDO::PARAM_INT);      
                $stmt -> bindValue(':count', $nowa_wartosc - $dodanie, PDO::PARAM_INT);
               ;
            }
            

            $stmt->execute();
            
            
        }
        
        header('Location:/chlodnia/index.html');
        
    }
Go to the top of the page
+Quote Post
viking
post 28.08.2019, 09:18:31
Post #5





Grupa: Zarejestrowani
Postów: 5 345
Pomógł: 900
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jak masz milion rekordów w tej bazie to wiadomo że takie zapytanie musi wszystkie przerobić. Nie możesz tego przerobić żeby aktualizować tylko rekordy z forma?


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 09:54:33
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


to sie wywala juz przy 10 rekordach...
Go to the top of the page
+Quote Post
trueblue
post 28.08.2019, 09:55:51
Post #7





Grupa: Zarejestrowani
Postów: 5 500
Pomógł: 1503
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jak to się dzieje, że zmienna $stmt jest używana jako tablica, a w pętli nadpisywana?


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 10:14:09
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


zmieniłem to ale nie pomogło
Go to the top of the page
+Quote Post
trueblue
post 28.08.2019, 10:19:47
Post #9





Grupa: Zarejestrowani
Postów: 5 500
Pomógł: 1503
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A zdradzisz jak teraz wygląda kod?


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 10:29:11
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


Kod
if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
                          
       $stmt = $pdo->query('SELECT * FROM `magazyn` ORDER BY `magazyn`.`name` ASC, ID, count, link');

        foreach($stmt as $row)
        {
            
        
        $stmte = $pdo -> prepare('UPDATE magazyn
                SET count=:count
                WHERE ID=:ID;
                ');    
        
        if ($_POST['ilosc'.$row['ID']] <> '') {
            
            $dodanie = $_POST['ilosc'.$row['ID']];
            $nowa_wartosc = $row['count'];
            
            $stmte -> bindValue(':ID', $row['ID'], PDO::PARAM_INT);            
            $stmte -> bindValue(':count', $nowa_wartosc + $dodanie, PDO::PARAM_INT);
    
           ;        
            
        }

        $stmte->execute();

        };
        header('Location:/chlodnia/index.html');
    }
Go to the top of the page
+Quote Post
trueblue
post 28.08.2019, 10:31:20
Post #11





Grupa: Zarejestrowani
Postów: 5 500
Pomógł: 1503
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A co zawiera zmienna $stmt?
Wstaw przed foreach:
Kod
var_dump($stmt);


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 11:48:39
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


object(PDOStatement)#3 (1) { ["queryString"]=> string(70) "SELECT * FROM `magazyn` ORDER BY `magazyn`.`name` ASC, ID, count, link" }
Go to the top of the page
+Quote Post
trueblue
post 28.08.2019, 13:19:09
Post #13





Grupa: Zarejestrowani
Postów: 5 500
Pomógł: 1503
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Prawdopodobnie chodzi o nazwę kolumny count, należałoby ją ująć w odwróconych apostrofach, czyli `count`.
Ale:
1. Nie jest Ci potrzebna klauzula ORDER BY w zapytaniu, chyba, że wykorzystujesz wyniki tego zapytanie gdzieś dalej,
2. Nie potrzeba wyciągać wszystkich kolumn, bo wykorzystujesz tylko count i id,
3. Zapytanie SELECT nie jest potrzebne jeśli nie wykorzystujesz wyników gdzieś dalej,

4. Całość możesz uprościć do pętli po otrzymanych id. W środku pętli UPDATE na zasadzie `count`=`count`+:dodanie,
5. Zamiast bindValue możesz użyć bindParam przygotowując zapytanie tylko raz, przed pętlą foreach.


--------------------
Go to the top of the page
+Quote Post
viking
post 28.08.2019, 13:19:16
Post #14





Grupa: Zarejestrowani
Postów: 5 345
Pomógł: 900
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


To możesz zmodyfikować jak sugerowałem aby zapytanie pobierało tylko rekordy podlegające modyfikacji? Chyba że zawsze zmieniasz wszystkie z bazy. Do tego zmienił bym to co wysyłasz postem na dane tablicowe.


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 15:09:26
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


dziękuję za wszelką pomoc
rozwiązanie jest banalne ale jednocześnie "dziwne" ale nie wiem jak to mogłem przeoczyć.
Przy generowaniu formularza zrobiłem coś takiego:
Kod
<input type="number" name="ilosc'.$row['ID'].'"/>


jak zauważycie na końcu dałem /
i po usunięciu wszystko działa jak trzeba
kurde nie wiem dlaczego dla 15 rekordów było OK a powyżej 15 przestawało działać
Go to the top of the page
+Quote Post
viking
post 28.08.2019, 15:18:18
Post #16





Grupa: Zarejestrowani
Postów: 5 345
Pomógł: 900
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zamknięcie elementu jest poprawne. Pewnie wpływalo na coś zupełnie innego gdzieś wcześniej. Ja bym wrzucił w takim razie do validatora w3c cały html strony. Inna sprawa że to co robisz jest nieoptymalne.


--------------------
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 15:41:07
Post #17





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


Wiem że robię to chałupniczo ale nie jestem informatykiem a mam do zrobienia w firmie bardzo prosty programik. Już się ucieszyłem że działa ale niestety przedwcześnie.
załaczam cały plik (oczywiście bez danych do bazy)
skrypt ma na celu pobrać za bazy fotkę, ilość i nazwę.
Następnie mają się wyświetlić przy produkcie inputy w które wpisuje się ilości a następnie jednym przysiskiem ma sie zaktualizować ilość przy produkcie a strona się ma przeładować w inne miejsce...
Wszystko działa poza tym pierdzielonym przeładowaniem strony
Zerknijcie błagam jeszcze raz bo przecież oszaleję...
Kod
try{
    $pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';port='.$port, $username, $password );
    echo '';//Połączenie nawiązane!
}catch(PDOException $e){
    echo 'Połączenie nie mogło zostać utworzone.<br />';
}

echo '<h1>PODAJ DODAWANĄ ILOŚĆ </h1>';

try
{
    
  // $stmt = $pdo->query('SELECT ID, name, count, link FROM magazyn');
     $stmt = $pdo->query('SELECT * FROM `magazyn` ORDER BY `magazyn`.`name` ASC, ID, count, link');
    echo '<form method="post">';
    
    foreach($stmt as $row)
    {   echo '<div class="prod">';
            
                echo '<div><img src="http://www.'.$row['link'].'" alt="foto" height="200" width="200"></div>';
            
            
            echo '<div class="oooo">';
                echo '<h2>'.$row['name'].'</h2> | stan: '.$row['count'].'</br>';
                
                
                
               echo 'WPROWADŹ ILOŚĆ: <input type="text" name="ilosc'.$row['ID'].'">';
            
             //   echo 'WPROWADŹ ILOŚĆ: <input type="number" name="ilosc'.$row['ID'].'"/>';
            //  echo 'WPROWADŹ ILOŚĆ: <input type="number" name="ilosc'.$row['ID'].'"/>';
                
        echo '</div></div>';        
    }
    
    
     $stmt->closeCursor();
    
    echo '
         <div style="display: block; clear: both; height: 2px"></div>
         <a href="../chlodnia/index.html" class="anuluj">« ANULUJ</a>  
         <div class="but_dodaj">
         <input type="submit"  value="+ DODAJ" name="f">
         </div>
         </form>
        ';
    
}
catch(PDOException $e)
{
    echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
}


// aktualizacja stanów
try
{
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
                          
       //  $stmt = $pdo->query('SELECT ID, name, count, link FROM magazyn');
       $stmt = $pdo->query('SELECT * FROM `magazyn` ORDER BY `magazyn`.`name` ASC, ID, count, link');

      
        foreach($stmt as $row)
        {
          
        $stmte = $pdo -> prepare('UPDATE magazyn
                SET `count`=:count
                WHERE ID=:ID;
                ');    
        
        if ($_POST['ilosc'.$row['ID']] <> '') {
            
            $dodanie = $_POST['ilosc'.$row['ID']];
            $nowa_wartosc = $row['count'];
          //  echo $nowa_wartosc;
          
            $stmte -> bindValue(':ID', $row['ID'], PDO::PARAM_INT);            
            $stmte -> bindValue(':count', $nowa_wartosc + $dodanie, PDO::PARAM_INT);
            //$stmt -> bindValue(':count', $_POST['ilosc'.$row['ID']], PDO::PARAM_INT);      
           ;        
            
         }

         $stmte->execute();

         };
        
         header('Location:/chlodnia/index.html');

    }
}

catch(PDOException $e)
{
    echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
}
Go to the top of the page
+Quote Post
dublinka
post 28.08.2019, 15:55:07
Post #18





Grupa: Zarejestrowani
Postów: 271
Pomógł: 33
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


a ten goly srednik pod koniec co tam robi
Go to the top of the page
+Quote Post
Kaczmar
post 28.08.2019, 16:07:03
Post #19





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.08.2019

Ostrzeżenie: (0%)
-----


usunąłem średnik ale nadal nie działa
Go to the top of the page
+Quote Post
dublinka
post 28.08.2019, 16:14:11
Post #20





Grupa: Zarejestrowani
Postów: 271
Pomógł: 33
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


ten ?

  1. //$stmt -> bindValue(':count', $_POST['ilosc'.$row['ID']], PDO::PARAM_INT);
  2. ;
  3.  


cos wogole sie wyswietla?
daj zamiast header jakies echo i spraedz czy sie wysw
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.09.2019 - 19:44