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

Dodanie do tabeli sql w jednym id więcej niż jedno zdjęcie w php PDO

Object Storage Arubacloud
+1 głos
418 wizyt
pytanie zadane 10 marca 2022 w PHP przez gatka84 Bywalec (2,150 p.)

Witajcie, próbuje swoich sił w php PDO i napotkałam podczas przerabiania tutorialii na problem mianowicie chce przy zapisie w jednym wpisie do bazy przesłać do kolumn kilka zdjęć (np2 lub więcej max 5) i tekstu, mam już działający kod ale wysyła tylko jedno zdjęcie myślałam, że jeśli zrobię analogicznie z większą ilością nie powinno być problemu a tu jednak

if(isset($_REQUEST['btn_insert']))
{
	try
	{
		$author	= $_REQUEST['txt_author'];	//textbox name "txt_author"
		$title	= $_REQUEST['txt_title'];	//textbox name "txt_title"
		$excerpt	= $_REQUEST['txt_excerpt'];	//textbox name "txt_excerpt"
		$content	= $_REQUEST['txt_content'];	//textbox name "txt_content"
			
		$image_file	= $_FILES["txt_file"]["name"];
		$type		= $_FILES["txt_file"]["type"];	//file name "txt_file"	
		$size		= $_FILES["txt_file"]["size"];
		$temp		= $_FILES["txt_file"]["tmp_name"];
		
		$path="upload/".$image_file; //set upload folder path
		
		if(empty($author)){
			$errorMsg="Please Enter Name";
		}
		else if(empty($image_file)){
			$errorMsg="Please Select Image";
		}
		else if($type=="image/jpg" || $type=='image/jpeg' || $type=='image/png' || $type=='image/webp') //check file extension
		{	
			if(!file_exists($path)) //check file not exist in your upload folder path
			{
				if($size < 1000000) //check file size 1MB
				{
					move_uploaded_file($temp, "upload/" .$image_file); //move upload file temperory directory to your upload folder
				}
				else
				{
					$errorMsg="Your File To large Please Upload 5MB Size"; //error message file size not large than 5MB
				}
			}
			else
			{	
				$errorMsg="File Already Exists...Check Upload Folder"; //error message file not exists your upload folder path
			}
		}
		else
		{
			$errorMsg="Upload JPG , JPEG , PNG & WEBP File Formate.....CHECK FILE EXTENSION"; //error message file extension
		}
		
		if(!isset($errorMsg))
		{
			$insert_stmt=$db->prepare('INSERT INTO blog(blog_date,blog_author,blog_title,blog_excerpt,blog_content,blog_image) VALUES(:fdate,:fauthor,:ftitle,:fexcerpt,:fcontent,:fimage)'); //sql insert query					
            $insert_stmt->bindValue(':fdate',time());
			$insert_stmt->bindParam(':fauthor',$author);	
			$insert_stmt->bindParam(':ftitle',$title);	
			$insert_stmt->bindParam(':fexcerpt',$excerpt);	
			$insert_stmt->bindParam(':fcontent',$content);	
			$insert_stmt->bindParam(':fimage',$image_file);	  //bind all parameter 
		
			if($insert_stmt->execute())
			{
				$insertMsg="File Upload Successfully........"; //execute query success message
				header("refresh:3;index.php"); //refresh 3 second and redirect to index.php page
			}
		}
	}
	catch(PDOException $e)
	{
		echo $e->getMessage();
	}
}

?>

i teraz powieliłam dla zdjęcia jeszcze jeden input i dodałam do nazwy 1 -> tzn w input - name="txt_file1", następnie pozostałe wartości które przyjmują od tego input info do wstawienia do bazy

$image_file1	= $_FILES["txt_file1"]["name"];
		$type1		= $_FILES["txt_file1"]["type"];	//file name "txt_file"	
		$size1		= $_FILES["txt_file1"]["size"];
		$temp1		= $_FILES["txt_file1"]["tmp_name"];

to samo z

$insert_stmt->bindParam(':fimage1',$image_file1);

i teraz nie bardzo wiem (czytaj skończyły mi się już pomysły z kombinacjami ;/ ) jak prawidłowo powinno się zrobić

$path1="upload/".$image_file1;

i dalej sprawdzanie czy już taki plik istnieje tu nie wiem jak zrobić po " , " żeby sprawdzał czy istnieje zdjęcie dla każdego z osobna które ma być wgrane

if(!file_exists($path, $path1)

i podanie ścieżki zapisu tu też nie wiem jak powinno się prawidłowo to dodać, zrobiłam tak

move_uploaded_file($temp1, "upload/" .$image_file1);

jak pisałam wcześniej kombinuje już od jakiegoś czasu szukałam na necie ale w większości pokazane jest dla jednego zdjęcia lub przy multi zapisuje na raz ale każde w nowym wierszu a chciała bym to zapisać w jednej tabeli do jednego id nie wiem czy to jasno opisałam no chyba że tak się nie robi to prosiła bym o podpowiedz lub nakierowanie co z czym i jak to powinno się robić.

komentarz 10 marca 2022 przez gatka84 Bywalec (2,150 p.)

Nie wiem czy dobrze rozumiem ale nie chodzi mi o  "input file multiple php" bo w ten sposób wysyłam w jednym input wiele plików ja chce kilka input każdy wysyła file coś takiego

<form method="post" class="form-horizontal" enctype="multipart/form-data">
        <div class="container pt-5">
            <div class="row">
                <div class="col-12">
                    <h1 class="fs-1 mb-3">Blog Creator</h1>
                </div>

                <!-- Autor -->
                <div class="col-12 col-md-6">
                    <div class="floating-form mb-3">
                        <input type="text" name="txt_author" class="form-control" />
                        <label for="">Author</label>
                    </div>
                </div>

                <!-- img Card -->
                <div class="col-12 col-md-6">
                    <div class="floating-form mb-3">
                        <input type="file" name="txt_file" class="form-control" />
                        <label for="">Zdjęcie strona tytułowa</label>
                    </div>
                </div>

                <!-- Tytuł -->
                <div class="col-12 col-md-6">
                    <div class="floating-form mb-3">
                        <input type="text" class="form-control" name="txt_title" />
                        <label for="">Tytuł bloga</label>
                    </div>
                </div>

                <!-- Text Card -->
                <div class="col-12">
                    <div class="floating-form mb-3">
                        <input type="text" name="txt_excerpt" class="form-control" />
                        <label for="">Treść karty</label>
                    </div>
                </div>

                <!-- img -1 -->
                <div class="col-12 col-md-6">
                    <div class="floating-form mb-3">
                        <input type="file" name="txt_file1" class="form-control" />
                        <label for="">Zdjęcie 1 na strone</label>
                    </div>
                </div>

                <!-- p -->
                <div class="col-12">
                    <div class="floating-form mb-3">
                        <textarea type="text" name="txt_content" class="form-control" rows="8"></textarea>
                        <label for="">p</label>
                    </div>
                </div>

                <!-- h2 -->
                <div class="col-12">
                    <div class="floating-form mb-3">
                        <input type="text" name="txt_contenth1" class="form-control" />
                        <label for="">h2</label>
                    </div>
                </div>

                <!-- p -->
                <div class="col-12">
                    <div class="floating-form mb-3">
                        <textarea type="text" name="txt_contentp2" class="form-control" rows="8"></textarea>
                        <label for="">p</label>
                    </div>
                </div>

                <!-- img -->
                <div class="col-12 col-md-6">
                    <div class="floating-form mb-3">
                        <input type="file" name="txt_file2" class="form-control" />
                        <label for="">Zdjęcie 2</label>
                    </div>
                </div>
    </div>
</form>

natomiast nie wiem czy w ten sposób powinno się robić

komentarz 10 marca 2022 przez VBService Ekspert (253,340 p.)

@gatka84, BTW, jeżeli atrybut for elementu <label> jest pusty nie ma potrzeby zapisywać go tak

<label for="">Author</label>

wystarczy tak

<label>Author</label>

 

ale "zalecane" jest "używać" for np.

<input type="text" id="txt_author" name="txt_author" class="form-control" />
<label for="txt_author">Author</label>

 

3 odpowiedzi

+3 głosów
odpowiedź 10 marca 2022 przez SzkolnyAdmin Szeryf (86,360 p.)
Po pierwsze kontrolka formularza musi obsługiwać możliwość przesłania wielu plików na raz. Po drugie skorzystaj z własności tablicy plików, która przesyłasz w ten sposób. Poszukaj: "input file multiple php".
komentarz 10 marca 2022 przez gatka84 Bywalec (2,150 p.)
Ok dzięki za podpowiedz zaraz będę to sprawdzać natomiast nie wiem czy dobrze się rozumiemy ja chcę w osobnych input przesyłać pliki każdy do osobnej komórki (kolumny) ale w jednej lini tak żeby były przypisane do jednego id w tabeli
0 głosów
odpowiedź 10 marca 2022 przez gatka84 Bywalec (2,150 p.)
edycja 10 marca 2022 przez gatka84

ok wykombinowałam tak ale znowu utknęłam tzn

<?php
    $field='txt_file';
    $e=array();
   
        if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_FILES[ $field ] ) ){
        $obj=$_FILES[ $field ];
        try
	{        
        foreach( $obj["name"] as $index => $void ){
           
            $image_file = $obj["name"][ $index ];
            $type = $obj["type"][ $index ];
            $size = $obj["size"][ $index ];
            $temp = $obj["tmp_name"][ $index ];
                                
				if($size < 5000000) //check file size 1MB
				{
					move_uploaded_file($temp, "upload/" .$image_file); //move upload file temperory directory to your upload folder
				}
				else
				{
					$errorMsg="Your File To large Please Upload 5MB Size"; //error message file size not large than 5MB
				}	
            
    }

w html testuje jak przesłać do bazy kilka input files

 <form method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>Files to upload:</legend>

            <div class="form-group row">
                <label class="col-sm-2 col-form-label">
                    1: <input type="file" class="form-control-file col-sm-10" name="txt_file[1]">
                </label>
            </div>

            <div class="form-group row">
                <label class="col-sm-2 col-form-label">
                    2: <input type="file" class="form-control-file col-sm-10" name="txt_file[2]">
                </label>
            </div>

            <div class="form-group row">
                <label class="col-sm-2 col-form-label">
                    3: <input type="file" class="form-control-file col-sm-10" name="txt_file[3]">
                </label>
            </div>
        </fieldset>
        <button type="submit" class="btn btn-primary" name="upload">Upload</button>
    </form>

i tak wyśle 3 pliki do wskazanego folderu i teraz nie potrafię wymyślić jak zrobić żeby przechwycił przy wysłaniu info o lokalizacji pliku i zapisał go do tabeli każdy do osobnej tabeli w jednym wierszu

i tak w pierwotnym założeniu łapane dane były

$image_file	= $_FILES["txt_file"]["name"];
		$type		= $_FILES["txt_file"]["type"];	//file name "txt_file"	
		$size		= $_FILES["txt_file"]["size"];
		$temp		= $_FILES["txt_file"]["tmp_name"];

a tu nie wiem jak przypisać osobno txt_file1 , txt_file2 itd żeby wiedział który plik gdzie jest no chyba że idę w złą stronę to proszę o podpowiedź.

0 głosów
odpowiedź 11 marca 2022 przez VBService Ekspert (253,340 p.)
edycja 12 marca 2022 przez VBService

Sprawdź ten zapis formularza - naciśnij button upload bez wypełniania i zobacz co zwróci

var_dump($_POST)
var_dump($_FILES)

w odniesieniu do

INSERT INTO blog (blog_date, blog_author, blog_title, blog_excerpt, blog_content, blog_image
  VALUE ...;
<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    var_dump($_POST);
    var_dump($_FILES);
  }
?>
<form method="post" enctype="multipart/form-data" class="form-horizontal">
  <div class="container pt-5">
    <div class="row">
      <div class="col-12">
        <h1 class="fs-1 mb-3">Blog Creator</h1>
      </div>
    </div>

    <!-- Autor -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="text" id="txt_author" name="txt_author" class="form-control" />
        <label for="txt_author">Author</label>
      </div>
    </div>

    <!-- Zdjęcie tytułowe -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-1" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-1">Zdjęcie strona tytułowa</label>
      </div>
    </div>

    <!-- Tytuł -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="text" id="txt_title" name="txt_title" class="form-control" />
        <label for="txt_title">Tytuł bloga</label>
      </div>
    </div>

    <!-- Treść karty -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <input type="text" id="txt_excerpt" name="txt_excerpt" class="form-control" />
        <label for="txt_excerpt">Treść karty</label>
      </div>
    </div>

    <!-- Zdjęcie 1 -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-2" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-2">Zdjęcie 1 na strone</label>
      </div>
    </div>

    <!-- Treść paragraf p 1 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <textarea type="text" id="txt_content-1" name="txt_content[]" class="form-control" rows="8"></textarea>
        <label for="txt_content-1">p</label>
      </div>
    </div>

    <!-- Treść nagłówek h2 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <input type="text" id="txt_content-2" name="txt_content[]" class="form-control" />
        <label for="txt_content-2">h2</label>
      </div>
    </div>

    <!-- Treść paragraf p 2 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <textarea type="text" d="txt_content-3" name="txt_content[]" class="form-control" rows="8"></textarea>
        <label for="txt_content-3">p</label>
      </div>
    </div>

    <!-- Zdjęcie 2 -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-3" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-3">Zdjęcie 2 na strone</label>
      </div>
    </div>

    <button type="submit" class="btn btn-primary">Upload</button>
  </div><!-- class="container pt-5" -->    
</form>

 

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    var_dump($_POST);
    var_dump($_FILES['txt_img_file']);
  }
?>
<form method="post" enctype="multipart/form-data" class="form-horizontal">
  <div class="container pt-5">
    <div class="row">
      <div class="col-12">
        <h1 class="fs-1 mb-3">Blog Creator</h1>
      </div>
    </div>
 
    <!-- Autor -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="text" id="txt_author" name="txt_author" class="form-control" />
        <label for="txt_author">Author</label>
      </div>
    </div>
 
    <!-- Zdjęcie tytułowe -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-1" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-1">Zdjęcie strona tytułowa</label>
      </div>
    </div>
 
    <!-- Tytuł -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="text" id="txt_title" name="txt_title" class="form-control" />
        <label for="txt_title">Tytuł bloga</label>
      </div>
    </div>
 
    <!-- Treść karty -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <input type="text" id="txt_excerpt" name="txt_excerpt" class="form-control" />
        <label for="txt_excerpt">Treść karty</label>
      </div>
    </div>
 
    <!-- Zdjęcie 1 -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-2" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-2">Zdjęcie 1 na strone</label>
      </div>
    </div>
 
    <!-- Treść paragraf p 1 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <textarea type="text" id="txt_content-1" name="txt_content[]" class="form-control" rows="8"></textarea>
        <label for="txt_content-1">p</label>
      </div>
    </div>
 
    <!-- Treść nagłówek h2 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <input type="text" id="txt_content-2" name="txt_content[]" class="form-control" />
        <label for="txt_content-2">h2</label>
      </div>
    </div>
 
    <!-- Treść paragraf p 2 -->
    <div class="col-12">
      <div class="floating-form mb-3">
        <textarea type="text" d="txt_content-3" name="txt_content[]" class="form-control" rows="8"></textarea>
        <label for="txt_content-3">p</label>
      </div>
    </div>
 
    <!-- Zdjęcie 2 -->
    <div class="col-12 col-md-6">
      <div class="floating-form mb-3">
        <input type="file" id="txt_file-3" name="txt_img_file[]" class="form-control" />
        <label for="txt_file-3">Zdjęcie 2 na strone</label>
      </div>
    </div>
 
    <button type="submit" class="btn btn-primary">Upload</button>
  </div><!-- class="container pt-5" -->    
</form>

 

i wtedy dla blog_content np. gdy na stronie ma być jako jeden blok html

    $content_post = $_POST['txt_content'] ?? null;
    if ($content_post) {
      $content = $element = '';
      for ($i=0; $i<count($content_post); $i++) {
        $element = ($i == 1) ? 'h2':'p';
        $content .= "<{$element}>{$content_post[$i]}</{$element}>";
      }
    }

    ...

    $insert_stmt->bindParam(':fcontent',$content);

 

lub gdy ma być łączone z innym html-em

    $content_post = $_POST['txt_content'] ?? null;
    if ($content_post)
      $content = implode('|', $content_post);
 
...
 
$insert_stmt->bindParam(':fcontent',$content);

w trakcie pobierania danych z bazy danych

$sql = "SELECT * FROM blog WHERE ...";
$result = $conn->query($sql);
$row = $result->fetch_assoc();

$blog_html = '<p><span class="date">'.$row['blog_date'].'</span> '.$row['blog_author'].'</p>';

...

$content = explode('|', $row['blog_content']);
$p_1 = $content[0];
$h2  = $content[1];
$p_2 = $content[2];
$blog_html .= '<div class="content">
                 <div>Lorem ...</div>
                 <p>'.$p_1.'</p>
                 <div>Lorem ...</div>
                 <h2>'.$h2.'</h2>
                 <p>'.$p_2.'</p>
               <div>';

 

a dla blog_image

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //... tu dane z $_POST;

    $img_file_post = $_FILES['txt_img_file'] ?? null;
    if ($img_file_post) {
      $allowed_type = ['image/jpg', 'image/jpeg', 'image/png', 'image/webp'];
      $errorMsg = [];
      $image_file = '';     

      for ($i=0; $i<3; $i++) {
        if ($img_file_post['name'][$i] !== '') {
          if (in_array($img_file_post['type'][$i], $allowed_type)) {
            if ($img_file_post['size'][$i] < 5000000) {
              $path = 'upload/'.$img_file_post['name'][$i];
              if (!file_exists($path)) {
                if (move_uploaded_file($img_file_post['tmp_name'][$i], $path)) {
                  $image_file .= $img_file_post['name'][$i].'|';
                }
              } else {
                $errorMsg[] = 'File number '.($i+1).' already exists... Check upload folder';
              }
            } else {
              $errorMsg[] = 'Your file number '.($i+1).' to large, please upload up to 5MB size';
            }
          } else {
            $errorMsg[] = 'Upload JPG, JPEG, PNG & WEBP file formate... Check Extension for file number '.($i+1);
          }
        }
      }

      $image_file = rtrim($image_file, '|');
      if ($errorMsg) printf(implode('<br>', $errorMsg));     
    }

    ...

    $insert_stmt->bindParam(':fimage',$image_file);  
  }
?>

 

ewentualna dalsza pomoc w komentarzach, bo teraz kolejny krok jest z Twojej strony (bo może wiesz co z tym dalej zrobić, jak oczywiście ten koncept Tobie się spodoba). smiley

komentarz 14 marca 2022 przez VBService Ekspert (253,340 p.)

BTW, tu i tu teżwink

(in_array ($img1, $image_file))

brakuje na początku if-a

if (in_array ($img1, $image_file)) { ...

 

komentarz 14 marca 2022 przez VBService Ekspert (253,340 p.)

=== $img1 <-- nie będzie równy

BTW, operator === (strict equality) to

strict equality

 

The strict equality operators (=== and !==) use the Strict Equality Comparison Algorithm to compare two operands.

  • If the operands are of different types, return false.
  • If both operands are objects, return true only if they refer to the same object.
  • If both operands are null or both operands are undefined, return true.
  • If either operand is NaN, return false.
  • Otherwise, compare the two operand's values:
    • Numbers must have the same numeric values. +0 and -0 are considered to be the same value.
    • Strings must have the same characters in the same order.
    • Booleans must be both true or both false.
komentarz 14 marca 2022 przez VBService Ekspert (253,340 p.)
edycja 14 marca 2022 przez VBService

Ten kod nawet po poprawieniu błędów składni

<script>
var element = document.getElementById("txt_file-1").value;
// element zawiera wartość typu string więc musisz użyć " np. cudzysłowy
if (element == "<?php echo $img1?>") {
    <?php 
     
        if (in_array ($img1, $image_file)) {
          $index = array_search( $img1, $image_file);
          $image_file[$index] = $img_file_post['name'][$index];
          $path = 'upload/' .$img1;
          unlink($path);
        } 
    ?>
}
</script>

po wykonaniu się kodu php i zwróceniu zawartości do przeglądarki, będzie wyglądał mniej więcej tak

<script>
  var element = document.getElementById("txt_file-1").value;
  // załóżmy, że w $img1 był łańcuch tekstowy np. taki obrazek123.png
  if (element == "obrazek123.png") {
  }
</script>

 

komentarz 14 marca 2022 przez VBService Ekspert (253,340 p.)
edycja 14 marca 2022 przez VBService

Czy możesz mieć taki koncept kolumn w tabeli w bazie danych?

INSERT INTO blog (
   blog_id,
   blog_date,
   blog_author,
   blog_title,
   blog_excerpt,
   blog_contentp1,
   blog_contenth1,
   blog_contentp2,
   blog_image1,
   blog_image2,
   blog_image3
) VALUE (...);

to by mogło uprościć ewentualne uaktualnianie choćby obrazków.

komentarz 14 marca 2022 przez gatka84 Bywalec (2,150 p.)
taki mam bazowy wygląd kolumn w bazie ale przy takim układzie nie potrafiłam usunąć "update" danego zdjęcia jeśli to było jedno z kilku zapisanych w danym wierszu dlatego spróbowałam twojej propozycji i przy okazji sporo się ucząc i teraz tak podany przez ciebie układ kolumn mam cały czas po prostu obecnie wszystkie zdjęcia były ładowane blog_image

a przy takim układzie jest prostszy sposób na edycje, ew usunięcie jak w przerabianym przykładzie gdzie trafiłam na ścianę

Podobne pytania

0 głosów
0 odpowiedzi 117 wizyt
0 głosów
2 odpowiedzi 370 wizyt
pytanie zadane 14 maja 2020 w PHP przez spicedagger Użytkownik (530 p.)
0 głosów
2 odpowiedzi 437 wizyt
pytanie zadane 17 kwietnia 2022 w PHP przez molik Użytkownik (950 p.)

92,568 zapytań

141,422 odpowiedzi

319,634 komentarzy

61,956 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!

...