Craft (Alchemy) – Recipes Known – Acquiring Recipes

a character in my group of 4/5, now at Level 2, put Ranks in Craft(Alchemy). He did not actually use it yet, but plans to do so.

My question is:

Which alchemical items is he at least theoretically able to craft? This is not about crafting time or DC!

There are hundreds of Items across the rulebooks, that are listed as “Alchemical Items” – alchemical powders, poisons, drugs, arrows etc.

Are there any RAW / RAI specifying which of this items he knows how to craft? How many? Up to a specific DC / price?

Directly adding to this question (please let me know, if this should be asked as a seperate question): If he does not know all alchemical recipes, how does he acquire new recipes?

Thanks in advance Pantheos

Best way of writing PHP, progressing & acquiring simple inputs & outputs

As my first simple PHP project, I’ve created a simple project that allows you to just enter your name and two numbers, where it displays them on the page and stores them in a database. It consists of 3 files: index.php, db.php & process.php. I wonder whether I have created the code efficiently.

I’m curious about all the talk behind procedural PHP vs PDO. I initially used some deprecated PHP5 functions and was corrected by the stack overflow community, but this has left me confused as to what specifically I should learn with PHP as a beginner. It sounds like procedural and PDO are very different, and that I should only pick one and learn that.

So my questions are as follows:

  1. Is the coding in my project acceptable?
  2. Is it similar to how most PHP projects are built? (i.e. are most procedural or PDO)
  3. What should I learn as a beginner? (procedural or PDO?)
  4. Do you have any beginner advice?

Any advice here would be very much appreciated as I’m new to PHP. Thanks for any help here. The files and code (excluding HTML & CSS) are below:

index.php:

<?php include 'db.php'; ?>  <?php // Fetch data from db $  query = mysqli_query($  con, 'SELECT * FROM data'); ?>  <!-- create a loop (while there are results in the DB, spit them out) -->             <?php while ($  row = $  query->fetch_assoc()) : ?>                 <li><?php echo $  row['t_name'] ?> entered <?php echo $  row['t_firstNo'] ?> and <?php echo $  row['t_secondNo'] ?> (result =                      <?php                         $  first = $  row['t_firstNo'];                         $  second = $  row['t_secondNo'];                         $  result = $  first * $  second;                         echo $  result;                     ?>)</li>             <?php endwhile ?>  <!-- if bad input, get & display error -->             <?php if(isset($  _GET['error'])) : // if error variable is there ?>                 <?php echo $  _GET['error']; // get the error ?>             <?php endif ?> 

db.php:

<?php  // Connect $  con = mysqli_connect("localhost", "tnnick", "PHPprojects", "timesNumbers");  // Test Connection if (mysqli_connect_errno()) {     echo 'Failed: '.mysqli_connect_error(); }  ?> 

process.php:

<?php include 'db.php' ; ?>  <?php     if(isset($  _POST['submit'])) { // if form submitted         $  nickname = mysqli_real_escape_string($  con, $  _POST['nickname']); // get the inputs         $  firstNo = mysqli_real_escape_string($  con, $  _POST['firstNo']);         $  secondNo = mysqli_real_escape_string($  con, $  _POST['secondNo']);     } ?>  <?php // validate inputs if(!isset($  nickname) || $  nickname=='' || !isset($  firstNo) || $  firstNo=='' || !isset($  secondNo) || $  secondNo=='' ) {     // if invalid input, send error to index.php     $  error = 'Bad input - try again.'; // create error message     header("Location: index.php?error=".urlencode($  error)); // attach to URL & send to index.php     exit(); } else {     // insert into DB     $  putIntoDB = "INSERT INTO data (t_name, t_firstNo, t_secondNo) VALUES ('$  nickname','$  firstNo','$  secondNo')";      // check it inserted     if(!mysqli_query($  con, $  putIntoDB)) {         die('Error');     } else {         header("Location: index.php");         exit();     } } ?>