J'ai un formulaire en HTML, mais ce n'est pas une configuration normale, je suppose. Je posterai le code du fichier HTML (PHP) et le php pour l'envoyer à la base de données.

<form action="upload.php" method="POST">
    <!-- Name input-->
    <div class="form-group">
      <label class="control-label" for="name">Name</label>
      <div class="">
        <input id="name" name="name" placeholder="First and Last Name" class="form-control input-md" type="text" required>
      </div>
    </div>
    <div class="form-group">
        <label class=" control-label" for="supportingDoc">Upload Supporting Documentation</label>
        <div class="">
            <input id="supportingDoc" name="supportingDoc" class="input-file" type="file" style="margin-top: .5em; margin-left: 4em;">
        </div>
    </div>
    <hr>
      <!-- Submit -->
      <div class="form-group">
        <label class="control-label" for="submit"></label>
        <div class="">
          <button value="Submit" type="submit" id="submit" name="submit" class="btn btn-danger" style="border-radius: 25px;">Submit</button>
        </div>
      </div>
</form>

Voici mon SQL / PHP

<?php
    $servername = "localhost";
    $username = "xxx";
    $password = "xxx";
    $dbname = "xxx";
    // Create connection
    $con = mysqli_connect("localhost","xxx","xxx","xxx");
    // Check connection
    if (mysqli_connect_errno()){
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    if (isset($_REQUEST['name'])){
        // set variables

        $name = mysql_real_escape_string($_POST['name']);
        $supportingDoc = mysql_real_escape_string($_POST['supportingDoc']);

        $sql = "INSERT INTO `tablew` (name,  supportingDoc) VALUES ('$name', '$supportingDoc')";
        $result = mysqli_query($con,$sql);

        if ($con->query($sql) === TRUE) {
            echo "New record created successfully";
            printf("New record created successfully");
        } else {
            echo "Error: " . $sql . "<br>" . $con->error;
            printf("Error: " . $sql . "<br>" . $con->error);
        }

        $con->close();
    }
?>

J'ai essayé toutes sortes de variantes et rien ne s'affiche dans phpmyadmin. J'ai même répliqué à partir d'un site précédent que j'ai créé et cela ne fonctionnait toujours pas lol.

Je vois qu'il y a des variables pour les informations de connexion et je les mets toujours dans le mysqli, mais je suis à cette seule chose depuis environ 8 heures maintenant et je suis à court de jus, alors j'espère que quelqu'un verra ce que j'ai raté.

Merci d'avance pour toute aide à tous.

=================================================== ========================= MISE À JOUR: J'ai fait toutes les modifications mentionnées ci-dessus et maintenant je reçois ceci:

Avertissement: mysqli_connect (): (HY000 / 1049): base de données inconnue

Je peux voir la base de données dans phpmyadmin et Sequel Pro. Je me suis également assuré de définir le mot de passe et de me connecter à «root». Mon code est le suivant pour la connexion:

    $con = mysqli_connect("localhost","root","root","epboarding");
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

Et ceci est mon POST:

if (isset($_REQUEST['submit'])){
// set variables
$name = mysqli_real_escape_string($con, $_POST['name']);
$sql = "INSERT INTO `wos` (name) VALUES ('$name')";
$result = mysqli_query($con,$sql);

phpmyadmin

mysql error

5
TomG103 30 déc. 2017 à 07:26

9 réponses

Meilleure réponse

Les problèmes suivants peuvent être présents:

  1. Erreur de téléchargement. Utilisez enctype = "multipart / form-data" dans la balise form.
  2. Corrigez les détails de Mysql_connect, c'est-à-dire nom d'utilisateur, mot de passe, nom de base de données.
  3. mysql_real_escape_string est obsolète. Utilisez mysqli.
  4. Vérifiez à nouveau les noms de vos colonnes, c'est-à-dire nom, supportDoc.
9
TBI 30 déc. 2017 à 08:41

Votre code html est erroné. Chaque fois que vous souhaitez utiliser un fichier de type d'entrée, vous devez mettre la balise <form> dans <form enctype="multipart/form-data">. Si vous ne déclarez pas le enctype, alors PHP ne peut pas lire le fichier.

3
Mr Hery 30 déc. 2017 à 04:36

Essayez ceci

Le problème est qu'après avoir cliqué sur le bouton d'envoi, il ne touche pas le (isset($_REQUEST['name']))

Changes le

if (isset($_REQUEST['submit'])){ //code here}

Parce que le nom de votre bouton est soumis.

Utilisez l'injection SQL comme

$con->real_escape_string($_POST['name']);
1
Naren Verma 30 déc. 2017 à 05:22
  1. Si vous utilisez un compte par défaut sur une installation locale, votre code de connexion ressemblera probablement à ceci:

     <?php $con = mysqli_connect('localhost','root','');
                  mysqli_select_db('epboarding', $con); ?>
    
  2. utilisez enctype = "multipart / form-data" dans la balise form lorsque vous utilisez le type de fichier.

      <form  name="" method="POST" action="" enctype="multipart/form-data"> 
    

3. changer la ligne suivante

    if (isset($_REQUEST['name'])){

À

       if (isset($_REQUEST['submit'])){
  1. corrigez la syntaxe lorsque vous publiez des données comme mysql sur mysqli.
1
Dee_wab 8 janv. 2018 à 12:34

D'après la capture d'écran de PhpMyAdmin, il semble que la base de données fonctionne sur le port 8889, ce qui signifie que vous auriez besoin de:

$ con = mysqli_connect ("localhost", "xxx", "xxx", "xxx", 8889);

1
Chris Moreton 8 janv. 2018 à 16:02

Tu dois mettre

<form enctype="multipart/form-data"> 

Lors du téléchargement du fichier. corrigez votre html.

2
Avinash Gupta 3 janv. 2018 à 04:54

Pour l'erreur de base de données inconnue. Je suis simplement allé aux opérations dans phpmyadmin et j'ai changé le nom de la base de données et cela a fonctionné. essayez-le si vous n'avez pas encore résolu le problème.

1
BjornIronside76 1 janv. 2018 à 20:32

En plus de @tbi answer

  • Vérifiez php.ini pour la taille maximale de la publication, cela provoque l'échec de la requête POST si la taille dépasse la taille définie dans php.ini

post_max_size=20M upload_max_filesize=20M

  • vérifiez votre connexion SQL et vos permissions sur la base de données
  • utilisez enctype = "multipart / form-data" dans votre formulaire uniquement lorsque vous devez télécharger des fichiers (pour des raisons de sécurité)

  • enfin, n'oubliez pas de lier vos paramètres de publication pour éviter l'injection SQL Liaison de paramètres

1
Diaa Saada 5 janv. 2018 à 23:16

En plus de ce que les autres ont dit, j'ai pensé vous fournir un script bien rangé et des ressources (espérons-le) utiles pour vous d'autres problèmes.

http://php.net/manual/en/mysqli.construct.php

Quel est le problème avec l'utilisation de $ _REQUEST []?

https://www.w3schools.com/sql/sql_injection.asp

En ce qui concerne votre erreur de base de données inconnue, c'est que votre base de données n'existe pas, qu'elle est mal nommée dans votre script PHP ou qu'elle n'est pas disponible via localhost.

$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli ( $servername, $username, $password, $dbname );

// Check connection
if ( $conn->connect_error ) {
    echo "Failed to connect to MySQL: " . $conn->connect_error;
}

// Check if values are set with post rather than request, as this is deprecated and can output unexpected results
if ( isset( $_POST['name'] ) ) {
    // Set variables
    $name = $_POST['name'];
    $supportingDoc = $_POST['supportingDoc'];

    // Prepare a statement and bind parameters to prevent sql injection
    $stmt = $conn->prepare( "INSERT INTO `tablew` (name,  supportingDoc) VALUES (?, ?)" );
    $stmt->bind_param( 'sb', $name, $supportingDoc );

    if ( $stmt->execute() ) {
        echo "New record created successfully";
        printf( "New record created successfully" );
    } else {
        echo "Error: " . $stmt->error;
        printf( "Error: " . $stmt->error );
    }
    $stmt->close();
    $conn->close();
}
1
gnusey 10 janv. 2018 à 08:19