2017-02-24 1 views
1

Ich habe 2 Probleme, mein erstes Problem ist, dass ich einen Fehler mit meinem PHP-Skript habe. Es gib mir im Grunde diesesMeine SQL-Abfrage funktioniert nicht + Einfügen eines Bildes in MariaDB

Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in /customers/1/d/9/the-scientist.fr/httpd.www/api/addPost.php:30 Stack trace: #0 {main} thrown in /customers/1/d/9/the-scientist.fr/httpd.www/api/addPost.php on line 30 

Und mein zweites Problem ist, dass ich versuche, ein Bild in einer Reihe in MariaDB einzufügen, ich die gleiche Sache wie phpMyAdmin für die Bild-Aufnahme in einer BLOB-Reihe tun mag. Also, das ist mein PHP-Skript ist:

<?php 
try 
{ 
    $db = new PDO('mysql:host=the-scientist.fr.mysql;dbname=the_scientist_fr_appli_posts;charset=utf8', 'the_scientist_fr_appli_posts', 'arthur2205'); 
} 
catch(Exception $e) 
{ 
    die('Erreur : '.$e->getMessage()); 
} 
// $security = new White\Security; 

$post = $_POST; 
$img = base64_encode(file_get_contents($_FILES['img']['tmp_name'])); 
$title = addslashes($post['title']); 
$description = addslashes($post['description']); 
$fullDesc = addslashes($post['full']); 
// if (!empty($title) & !empty($description) & !empty($fullDesc) & !empty($img)) { 

// } 
// else { 
// // header("Location: form.php?error=Fill the form!"); 
// } 

$stmt = $db->prepare("INSERT INTO posts (title, description, img, fullDesc, likes) VALUES (:title, :description, :img, :fullDesc, :likes)"); 

$stmt->bindParam(':title', $title); 
$stmt->bindParam(':description', $description); 
$stmt->bindParam(':img', $img); 
$stmt->bindParam(':fullDesc', $fullDesc); 
$stmt->bindParam(':likes', 0); 

$stmt->execute(); 

    // header("Access-Control-Allow-Origin: *"); 
header("Location: form.php?error=$sql"); 

Auch ist dies die Form:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionic/1.3.2/css/ionic.min.css"> 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<form enctype="multipart/form-data" class="form" id="form" action="./addPost.php" method="POST"> 
     <div class="list"> 
      <label class="item item-input"> 
      <input type="text" placeholder="Titre" class="AddPosttitle" name="title"> 
      </label> 
      <label class="item item-input"> 
      <input class="description" type="text" placeholder="Mot Clés" maxlength="60" name="description"> 
      </label> 
      <label class="item item-input"> 
      <div> 
       <span id='button_upload'>Image : </span> 
       <input type='file' class="img" name="img"> 
      </div> 
      </label> 
      <label class="item item-input"> 
      <textarea placeholder="Description" class="full" name="full"></textarea> 
      </label> 
      <div class="padding"> 
       <button class="button button-block button-positive submit-btn" type="submit"> 
       Envoyer 
      </button> 
      </div> 
     </div> 
    </form> 
    <style type="text/css"> 
     .form { 
      background: #FFF; 

     } 
    </style> 
    <?php 
    if (!empty($_GET['error'])){ 
     ?> 
     <script type="text/javascript"> 
      function findGetParameter(parameterName) { 
       var result = null, 
        tmp = []; 
       var items = location.search.substr(1).split("&"); 
       for (var index = 0; index < items.length; index++) { 
        tmp = items[index].split("="); 
        if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); 
       } 
       return result; 
      } 
      alert(findGetParameter("error")); 
     </script><?php 
    } 
    ?> 

Ich denke, dass mein Problem an dieser Stelle, ist ziemlich klar, wenn Sie weitere Informationen benötigen, wenden Sie sich in der Kommentarabschnitt.

+1

ich weiß nicht, ob dies ein Online-Test-Problem. Sie sollten jedoch in Betracht ziehen, die legale PDO-Verbindung nicht in eine Datenbank zu stellen. (Wenn das die legit Verbindung ist) –

+0

Über Ihr zweites Problem: Sie haben gerade angegeben, was Sie tun möchten und den Code, den Sie verwenden, aber nicht, was das Problem ist. Funktioniert der Insert nicht, sind die Daten nicht das was du erwartest, etc.? – jeroen

+0

@ B.Dionys Keine Sorge, ich weiß, was ich mache, Sie können nur von meinem Server auf den MariaDB-Server zugreifen. –

Antwort

2

Über das erste Problem: Sie verwenden:

$stmt->bindParam(':likes', 0); 

bindParam() erwartet einen Parameter, eine Variable.

Wenn Sie nur einen Wert binden möchten, sollten Sie bindValue() statt:

$stmt->bindValue(':likes', 0); 
Verwandte Themen