Jump to content
Larry Ullman's Book Forums


  • Content Count

  • Joined

  • Last visited

Community Reputation

1 Neutral

About sendy

  • Rank
  1. Hi guys, i read about PDO in the book, then i read some PDO articles.. Most of the articles say that we should turn off PDO::ATTR_EMULATE_PREPARES if using MYSQL latest driver.. is this true? i searched some explanation why with recent mysql i should turn of PDO::ATTR_EMULATE_PREPARES, but unfortunately my newbie brain doesn't understand their explanation... all i know is PDO will send the query to the MYSQL when we use : $stmt = $pdo->prepare('query'); then PDO will send the data(placeholder's value) : $stmt->bindValue(':val', $value, PDO::PARAM_STR); $stmt-&g
  2. SOLVED sorry guys my mistake actually its a pretty easy answer why MySessionHandler class doesnt produce error wihtout session_write_close() in the end of script, session_set_save_handler() by default will register session_write_close() to register_shutdown_function() so if u want to make your own shutdown function for session then use : session_set_save_handler($SessionClass, FALSE) if u do this then u must provide session_write_close() in your class destructor source : http://php.net/manual/en/function.session-set-save-handler.php thank you Larry for the support
  3. yes i have , its written in database using pdo and its even success accessing db session(using pdo) in the next browser request i added if($_SERVER['REQUEST_METHOD'] == 'POST') { $_SESSION['post_data'] = $_POST['post_data']; } <form action="session_link.php" method="post"> <input type="text" name="post_data" /> <input type="submit" name="submit" value="store data" /> </form> and confirmed that MySessionHandler() success storing the session data from $_POST method to the database
  4. im still newbie and i dont know much, but from what i know , protected static function instantiate($record) { $object = new self; foreach ($record as $attribute=>$value) { if ($object->has_attribute($attribute)){ $object->attribute = $value; } } return $object; } new self() will return the class that has define the method(even if u call Photograph::instantiate()) which is your DatabaseObject. then in that code, u try to do : $object->attribute = $value /* $object is instance of Databas
  5. erm i don't know if this would help or not, but try to use new static() //for static binding will return the class that call it instead of new self() // will return the class that have the method definition (if u dont override the method) note: sorry for the bad english.. correct me if im wrong
  6. SOLVED for solution see the last part of my first post _______________________________________________________________________ hi , i read chapter 3 and try to pass session_set_save_handler with an object, here's the code for my session handler class: <?php class MySessionHandler implements SessionHandlerInterface { protected $conn = NULL; public function open($savePath, $sessionName) { if(is_null($this->conn)) { $dsn = 'mysql:host=localhost;dbname=php_advanced'; $username = 'root'; $password = 'passw
  7. erm actually i did fix that by removing the addslashes() function (yes i forgot that pdo will use prepared statements) and its good without PDO::PARAM_LOB. i think varbinary(32) is right since i have tested it by registering and login using 3 different passwords.. but correct me if im wrong since im still newbie
  8. I just read about hash_hmac() function in this book, it says something about that hash_hmac() function return a string that would potentially breaks the query so i tried to use it for storing password in DB , by using PDO <?php $dsn = 'mysql:host=localhost;dbname=test'; $username = 'root'; $pass = 'password'; $conn = new PDO($dsn, $username, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->setAttribute(PDO::ATTR_PERSISTENT, TRUE); $password = '123MonyeTSahuR456'; $p addslashes(hash_hmac('
  9. $q = "UPDATE users SET last_login = NOW() WHERE id = $id"; $r = mysqli_query($dbc, $r) ermm i think this one: $r = mysqli_query($dbc, $r) should be replaced with : $r = mysqli_query($dbc, $q)
  10. hi guys ! i have question about output buffering(chapter 18 page 561) i have searched google about it and it came with alot of debates, some say its good practice, some say its bad practice to use it, but they dont provide any code for testing why its good and why its bad.. so the question is : is it a good practice to always use it ? as Larry's statement in the book that says "There can be a performance improvement with output buffering, but the main benefit is that it eradicates those pesky headers already sent error messages." if its bad practice, please give good reasons
  11. ermm i dont get it about : "You can assign keys to a not yet existing array in PHP. It will then create it for you." i already tried to search google but didnt found anything , maybe it was because of wrong keywords.. do you have any link or reference about it?
  12. i think the problem lies here : $errors = array(); if(empty($email)) { $errors[] = "You forgot to enter the email"; } else { $email = mysqli_real_escape_string($conn, trim($email)); } if(empty($pass)) { $errors[] = "You forgot to enter the password"; } else { $pass = mysqli_real_escape_string($conn, trim($pass)); } because i use $errors = array(); what im thinking is like this, a bit mess up but solve the problem even tough its not the best way $errors = ''; if(empty($email)) { $errors = 'You forgot to enter the email'; } else { $email = mysqli_real_escape_string($conn, tr
  13. Hello guys, this is my first question as well as my first post in this community Add code to the handling of the $errors variable on the login page that uses a foreach loop if $errors is an array, or just prints the value of $errors otherwise. what im thinking is using is_array() function, to test $errors : if( is_array($errors) ) then i tried to use var_dump() to test $errors (even if there is only 1 error) unfortunately its still an array. i cant figure it out, i really appreciate any help, but please dont post any code, just tell me what to do
  • Create New...