2017-09-03 1 views
1

Je suis en train de coder ma première application php et je la base sur un tutoriel sur lequel je travaillais. Mon code fonctionne correctement jusqu'à ce que j'arrive à la requête $ var = $ connection-> ("INSERT INTO .... Etc

A ce stade, le code immédiatement après le premier $ s'affiche en clair . dans Firefox (google montre le tout sous forme de texte bla)

Je vais poster mon code ici.

<?php 



$dbServername = "localhost"; 
$dbUsername = "root"; 
$dbPassword = ""; 
$dbName = "cowboyserver"; 

$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword); 
mysqli_select_db($dbName, $conn); 


$email = ($_POST['email']); 

if(!$conn){ 
    echo 'error'; 
}else{ 
    $query = $conn->query("INSERT INTO email_list (email) VALUES ('$email')"); 
} 
mysqli_query($query); 
header("Location: ../index.html?signup=success"); 
echo '<p>email entered !! ! ! ! ! ! !! !! ! ! ! ! !</p>' ; 

de plus, voici le HTML::::

<form autocomplete="on" action="includes/signup.inc.php" method="POST"> 
    <input type="email" name="email" placeholder="put your email here" class="blah"/> 
</form> 

EDIT : Après avoir essayé quelques solutions, j'ai trouvé que mon code php casse à un point apparemment aléatoire dans le code. Dans la deuxième réponse publiée, par exemple, le code php s'exécute jusqu'à ce qu'il arrive à "$ conn-> connect_error" dans l'instruction if, puis imprime tout après le -> au lieu de l'exécuter.

+3

** ATTENTION **: Lorsque vous utilisez 'mysqli' vous devriez utiliser [requêtes paramétrées] (http://php.net/manual/fr/mysqli.quickstart.prepared-statements.php) et [' bind_param' ] (http://php.net/manual/fr/mysqli-stmt.bind-param.php) pour ajouter des données utilisateur à votre requête. ** N'utilisez PAS ** l'interpolation ou la concaténation de chaîne pour y parvenir car vous avez créé un [bogue d'injection SQL] grave (http://bobby-tables.com/). ** NE JAMAIS ** mettre directement dans une requête les données utilisateur '$ _POST',' $ _GET' ou ** tout **, cela peut être très dangereux si quelqu'un cherche à exploiter votre erreur. – tadman

+2

Note: L'interface orientée objet de 'mysqli' est significativement moins verbeuse, ce qui facilite la lecture et l'audit du code, et n'est pas facilement confondue avec l'interface' mysql_query' obsolète. Avant de vous investir trop dans le style procédural, cela vaut la peine de changer. Exemple: '$ db = new mysqli (...)' et '$ db-> prepare (" ... ")' L'interface procédurale est un artefact de l'ère PHP 4 quand l'API 'mysqli' a été introduite et ne devrait pas être utilisée dans une nouvelle – tadman

+1

Beaucoup de problèmes peuvent être détectés et résolus en [permettant des exceptions dans 'mysqli'] (https://stackoverflow.com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli) donc des erreurs – tadman

Répondre

3

Les modifications nécessaires: -

1.Need pour changer le nom du fichier signup.inc.php-signup.php puis l'utiliser dans de comme ci-dessous: -

<form autocomplete="on" action="includes/signup.php" method="POST"> 
    <input type="email" name="email" placeholder="put your email here" class="blah"/> 
</form> 

2.CHANGER dans signup.php (la fichier que vous avez renommé) code (les modifications sont commentées): -

<?php 
//comment these two lines when code executed successfully 
error_reporting(E_ALL); 
ini_set('display_errors',1); 

if(!empty($_POST['email']){ // check posted data coming or not 
    $dbServername = "localhost"; 
    $dbUsername = "root"; 
    $dbPassword = ""; 
    $dbName = "cowboyserver"; 

    $conn = mysqli_connect($dbServername, $dbUsername, $dbPassword,$dbName); //add dbname here itself 
    //check conneced or not 
    if(!$conn){ // $ missed 
    die('connection problem'.mysqli_connect_error());//check for real connection problem 
    }else{ 
     $email = $_POST['email'];// remove() 

     //don't mix oop way to procedural way and use prepared statements 

     $stmt = mysqli_prepare($conn, "INSERT INTO email_list (email) VALUES (?)")); 

     /* bind parameters for markers */ 
     mysqli_stmt_bind_param($stmt, "s", $email); 

     /* execute query */ 

     if(mysqli_stmt_execute($stmt)){//check query executes or not 
      header("Location: ../index.html?signup=success"); 
      echo '<p>email entered !! ! ! ! ! ! !! !! ! ! ! ! !</p>'; 
      exit(); 
     }else{ 
      echo "insersion failde because of".mysqli_error($conn); 
     } 
    } 

}else{ 
    echo "please fill the form"; 
} 

Note: - toujours utiliser prepared statements pour éviter de SQL INJECTION. Merci

+0

J'ai édité mon code, et cela semble juste mais honnêtement je n'ai aucune idée de ce que je regarde. Je l'exécuterai et je reviendrai avec vous après que le panneau XAMPP ait à nouveau l'erreur du mauvais port 80. – Quibble

+0

Lorsque je cours le code c'est ce qui se passe dans le navigateur: email entré !! ! ! ! ! ! !! !! ! ! ! ! ! '; } else {echo "insertion faild bc de" .mysqli_error ($ conn); }}} else {echo "plz remplit le formulaire"; } – Quibble

+0

J'ai enlevé le fichier htaccess qui contenait deux lignes mais qui gâchait des choses, mais maintenant il m'obtient une erreur d'analyse: "Erreur de syntaxe, inattendue '{' dans C: \ xampp \ htdocs \ folder \ includes \ signup .php sur la ligne 6 – Quibble

2

Essayez ceci. Changez votre form pour inclure un bouton submit. Alors seulement vous pouvez accéder aux valeurs en utilisant $_POST.

<form autocomplete="on" action="includes/signup.php" method="POST"> 
    <input type="email" name="email" placeholder="put your email here" class="blah"/> 
    <input type="submit" value="Form Submission" name="submitBtn"> 
</form> 

Votre Page signup.php:

<?php 

$dbServername = "localhost"; 
$dbUsername = "root"; 
$dbPassword = ""; 
$dbName = "cowboyserver"; 

// Create connection 
$conn = new mysqli($conn = new mysqli($dbServername, $dbUsername, $dbPassword, $dbName)); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

if(isset($_POST['submitBtn'])) { //form submission occured 

    $email = $_POST['email']; 
    $sql = "INSERT INTO email_list (email) VALUES ('$email')"; 

    if ($conn->query($sql)) { 
     echo '<p>email entered !! ! ! ! ! ! !! !! ! ! ! ! !</p>'; 
     header("Location: ../index.html?signup=success"); 
     exit(); 

    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

} else { 
    echo "Form Submission Error"; 
} 

$conn->close(); 
?> 

Espérer il est utile.

+0

Ce code cesse de fonctionner au "->" dans la ligne if ($ conn-> connect_error) {et le reste du code jusqu'à ce que la fin s'imprime sous forme de texte:/ – Quibble

+0

Manqué un crochet de fermeture dans l'étape Créer une connexion. –