• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Get - odbieranie z adresu strony i pobieranie danych z MYSQL

Object Storage Arubacloud
0 głosów
586 wizyt
pytanie zadane 24 września 2016 w PHP przez Zbigniew Andrysiak Bywalec (2,470 p.)
edycja 24 września 2016 przez ScriptyChris

Witajcie

Znów mam pytanie, a wiem, że u Was mogę szukać pomocy. Nakierujcie mnie. Mam kod jak poniżej. Strona ma w nagłówku (wysyłane z cennik.php) "http://localhost/mobidoktor/cennikserwis.php?firma=Apple&model3=iPad&add=Prześlij"

Teraz tak mam w sql Iphone x4 i Ipad x2 (bo są różne usługi). Chciałbym wyświetlić je na stronie. Pobieram sobie z adresu strony gdzie model3 to np. Ipad. Gdy zrobię  

$mysqli->query("SELECT * FROM cennikmobi10") 

to listuje mi wszystkie, a jak zrobię

 $mysqli->query("SELECT * FROM cennikmobi10 where model3=$id "); 

 to wyrzuca mi błąd

"Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp1\htdocs\mobidoktor\cennikserwis.php on line 69"

Konia z rzędem kto mi pomoże

<?php
if (isset($_GET['model3']) )

{
            $id = $_GET['model3'];
            $result2 = $mysqli->query("SELECT * FROM cennikmobi10 where model3=$id "); //wywołanie artykułu
            $result = $mysqli->query("SELECT * FROM cennikmobi10");
            while ( $article = mysqli_fetch_array($result2) )
             {
  
      echo '<h3>' . $article['brand2'] . '</h3>' ; 
     echo '<br>'.  $article['price_b2c'] . '<br>' .  $article['price_b2b'] ;
    echo '</div>';
}

            }
?>

 

2 odpowiedzi

0 głosów
odpowiedź 24 września 2016 przez Ehlert Ekspert (212,790 p.)
wybrane 24 września 2016 przez Zbigniew Andrysiak
 
Najlepsza
Poczytaj o SQL injection bo właśnie stworzyłeś piękną dziurę do tego. Zainteresuj się PDO i binduj parametry.
komentarz 24 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
Póki co nie ma tego na serwerze - tworzę na localhost. Poczytam i sprawdzę.
komentarz 24 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
Czyli rozumiem, że lepiej jest wysłać dane nie za pomocą GET, a na przykład za pomocą POST. I mam szukać dalej. Dobrze rozumuje?
komentarz 24 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)

W dobrą stronę idę?

<?php
if (isset($_POST['model3']) )

{
            $id = $_POST['model3'];
            $result2 = $mysqli->prepare("SELECT * FROM cennikmobi10 where model3 = :id "); //wywołanie artykułu
           // $result = $mysqli->query("SELECT * FROM cennikmobi10");
          //  print_r($result2['model3']);
            while ( $article = mysqli_fetch_array($result2) )
             {
  
      echo '<h3>' . $article['brand2'] . '</h3>' ; 
     echo '<br>'.  $article['price_b2c'] . '<br>' .  $article['price_b2b'] ;
    echo '</div>';
}

            }
?>

 

komentarz 24 września 2016 przez efiku Szeryf (75,160 p.)
mysqli nie pozwala na  nazywanie parametrów bindowanych. Czyt. dokumentację.
0 głosów
odpowiedź 24 września 2016 przez efiku Szeryf (75,160 p.)

Zbinduj parametry w zapytaniu dla artykułu 

Bindowanie masz w dokumentacji, szukaj "php mysqli bind param" w Googlu -> 1 link i przykład oraz ta tableka:

Type specification chars
Character Description
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets

 

komentarz 24 września 2016 przez efiku Szeryf (75,160 p.)
Nie miej do mnie żalu, więcej pracy z dokumentacją, mniej straconego czasu w oczekiwaniu na odpowiedź tutaj na forum :)

PS: Wciąż używasz strukturalnego fetchowania danych mimo iż używasz obiektowego rodzaju połączenia klasy mysqli. Odsyłam do manuala  -> "php mysqli fetch_assoc"
komentarz 24 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
edycja 24 września 2016 przez Zbigniew Andrysiak

Nie mam żalu i dziękuję za nakierowanie. Swoją drogą - długa droga przede mną. Programowanie strukturalne itd. A człowiek tylko średnią szkołę skończył a potem uczyć się nie chciało i wyniki są. Napiszę później na jakim etapie jestem. W razie gdybyś mógł to podpowiesz jeszcze. 

P.S.Lepiej?



$model3 = $_GET['model3'];
$stmt = $db->prepare('SELECT * FROM cennikmobi10 WHERE model3 = :id');
$stmt->bindValue(':id', $model3, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch();

             
  
      echo '<h3>' . $row['brand2'] . '</h3>' ; 
     echo '<br>'.  $row['price_b2c'] . '<br>' .  $row['price_b2b'] ;
    echo '</div>';
komentarz 24 września 2016 przez efiku Szeryf (75,160 p.)
edycja 25 września 2016 przez efiku
Ooo PDO jest.

No jest nieco lepiej :)

Tu o stringach poczytaj ;) https://php-kurs.gitbooks.io/phpkurs/content/index.html Zanim zaczniesz rozdzielać html od php.
komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
No już czytam. Pozamieniałem sobie kilka plików (w tym configbase) i jadę z koksem. Mam nadzieję, że teraz będzie tylko lepiej. Dziękuję za podpowiedzi. Łapię się jeszcze na mysqli a nie PDO, ale daje radę. Za kilka miesięcy będę specem. :)
komentarz 25 września 2016 przez efiku Szeryf (75,160 p.)
Za kilka miesięcy to weźmiesz Slima/Silexa/Symfony z mikrokernelem i PHPStorma do pracy ;)
komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)

Pogadałbym na czacie, albo na priv, ale wiem, że czegoś takiego się nie lubi... :) W związku z poniższym kod, ale nie działa. Dalej dłubię get itd wyskakuje błąd - no gdzie robię ten błąd?

 

	<?php
	 if ( isset($_POST['add']) ) {


//$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
      $stmt = $db -> prepare('INSERT INTO `mobidoktor` (`klient`, `ticket`, `przyjecie` ,`category`, `imei`, `uwagi`)  VALUES(
        :klient,
        :ticket,
        :przyjecie,
        :category,
        :imei,
        :uwagi)'); // 1
      
      $stmt -> bindValue(':klient', $_POST['klient'], PDO::PARAM_STR); // 2
      $stmt -> bindValue(':ticket', $_POST['ticket'], PDO::PARAM_STR);
      $stmt -> bindValue(':przyjecie', $_POST['przyjecie'], PDO::PARAM_INT);
      $stmt -> bindValue(':category', (float)$_POST['category'], PDO::PARAM_STR);
      $stmt -> bindValue(':imei', $_POST['imei'], PDO::PARAM_INT);
      $stmt -> bindValue(':uwagi', $_POST['uwagi'], PDO::PARAM_INT);
      
      $ilosc = $stmt -> execute(); // 3
  
      if($ilosc > 0)
      {
        echo 'Dodano: '.$ilosc.' rekordow';
      }
      else
      {
        echo 'Wystapil blad podczas dodawania rekordow!';
      }
    }

			
          
					
	 		?>

 

komentarz 25 września 2016 przez efiku Szeryf (75,160 p.)

Jest forumowy IRC, zawsze ktoś tam siedzi, jeżeli ma czas, to pomoże a jak nie to odesle na forum z pytaniem. ;) Co nie zmienia faktu, że na IRC jest fajna atmosfera (link u góry forum)

Jaki błąd? 

<?php
// plik.php
if (isset($_POST['add'])) {
    require "connect.php";
    $stmt = $db->prepare('INSERT INTO `mobidoktor` (`klient`, `ticket`, `przyjecie` ,`category`, `imei`, `uwagi`)  VALUES(
        :klient,
        :ticket,
        :przyjecie,
        :category,
        :imei,
        :uwagi)'); // 1

    //
    // Tutaj łatwo dostać błąd, możliwe, że w formularzu nie ma name="ticket"np i wobec tego
    // $_POST['ticket'] === null + błąd notice.
    //
    $stmt->bindValue(':klient', $_POST['klient'], PDO::PARAM_STR); // 2
    $stmt->bindValue(':ticket', $_POST['ticket'], PDO::PARAM_STR);
    $stmt->bindValue(':przyjecie', $_POST['przyjecie'], PDO::PARAM_INT);
    $stmt->bindValue(':category', $_POST['category'], PDO::PARAM_STR);
    $stmt->bindValue(':imei', $_POST['imei'], PDO::PARAM_INT);
    $stmt->bindValue(':uwagi', $_POST['uwagi'], PDO::PARAM_STR);

    try {
        $stmt->execute();
        echo "Zapisano do bazy.";
    } catch (PDOException $exception) {
        die($exception->getMessage());
    }
}

<?php
/**
 * Created by PhpStorm.
 * User: efik
 * Date: 25.09.16
 * Time: 18:41
 */
try {
    $db = new PDO('mysql:host=localhost;dbname=produkty', 'root', 'root');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die( "Połączenie nie mogło zostać utworzone: {$e->getMessage()}");
}

Ja bym to widział tak.

komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)

Błąd Wystapil blad podczas dodawania rekordow!

A nie lepiej stworzyć $db i zrobić include configbase.php i tam łączyć się z bazą?

komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
Pomogło - Twój pierwszy pomysł, źle zrobiłem execute.

Ale w bazie sql nie widać, żeby coś zapisywało.
komentarz 25 września 2016 przez efiku Szeryf (75,160 p.)
Pokaż jeszcze formularz.
komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
Już znalazłem - zapisuje i działa.Zmieniłem configbase (według Twojej podpowiedzi) i wywaliło błąd. Zacząłem naprawiać i nawet datę mi wstawia. WIELKIE DZIĘKI :)
komentarz 25 września 2016 przez efiku Szeryf (75,160 p.)
Mój "config" to był ten drugi fragment kodu, pierwszy go ładował za pomocą require.

Include ostani raz używałem... 5 lat temu ;) Teraz mam composera i robię jeden require w całej aplikacji, resztę piszę w sposób obiektowy.

Spróbuj się zainteresować tematem gdy skończysz robić aplikację taką jak masz obecnie:

Może na początek coś mniejszego:

 composer + slim + twig.

Ale to gdy skończysz swoje dzieło.
komentarz 25 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
Jestem jak najbardziej za, ale na tę chwilę robię pokazówkę dla firmy, a potem będę ją ulepszał.

Podobne pytania

0 głosów
3 odpowiedzi 410 wizyt
pytanie zadane 9 stycznia 2017 w PHP przez blocks Początkujący (280 p.)
0 głosów
1 odpowiedź 589 wizyt
pytanie zadane 14 grudnia 2017 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 30 listopada 2015 w PHP przez makoso Mądrala (7,380 p.)

92,615 zapytań

141,465 odpowiedzi

319,777 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...