2017-06-22 1 views
1

J'essaie d'insérer des données d'un simple formulaire de registre dans MySQL. J'ai ma base de données hébergée sur Amazon AWS RDS, en utilisant DBeaver pour l'éditer. Lorsque je cours le code, je reçois ce qui suitJe n'arrive pas à comprendre pourquoi mon PHP n'insère pas dans MySQL DB

affected_rows. "Données insérées dans la base de données."; } else {echo "Une erreur est survenue Les articles n'ont pas été ajoutés."; } $ db-> close(); ?>

Comment résoudre ce problème? Mon code PHP est-il faux? Je suis confus si je ne peux pas utiliser MySQLi, comment pourrais-je déterminer cela? Je suppose qu'Amazon RDS MySQL est compatible.

<?php 
// create short variable names 
$name=$_POST['name']; 
$birthdate=$_POST['birthdate']; 
$email=$_POST['email']; 
$password=$_POST['password']; 
$address=$_POST['address']; 
$city+$_POST['city']; 

if (!get_magic_quotes_gpc()) { 
    $name = addcslashes($name); 
    $birthdate = addslashes($birthdate); 
    $email = addcslashes($email); 
    $password = addcslashes($password); 
    $address = addcslashes($address); 
    $city = addcslashes($city); 
} 

$host='xxxxxx' 
$user='admin' 
$password='xxxxx' 
$dbname='users' 
@ $db = mysqli_connect($host,$user,$password,$dbname) 

if (mysqli_connect_errno()) { 
    echo 'Error: Could not connect to database. Please try again later.'; 
    exit; 
} 

// Execute the query 
$query = "INSERT INTO vestorinfo (name,birthdate,email,password,address,city) 
    VALUES ('$_POST[name]','$_POST[birthdate]','$_POST[email]','$_POST[password]','$_POST[address]','$_POST[city]')"; 
$result = mysqli_query($query) 
     or die ("Couldn't execute query."}; 

if ($result) { 
    echo $db->affected_rows." data inserted into database."; 
} else { 
    echo "An error has occurred. The items were not added."; 
} 

$db->close(); 
?> 

Voici le formulaire de la page html

<div id="registerform"> 
    <form action="php/registerprocess.php" method="post" class="form-horizontal"> 

<fieldset> 

<!-- Form Name --> 

<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="name">Name</label> 
    <div class="col-md-4"> 
    <input id="name" name="name" placeholder="Your name" class="form-control input-md" required="" type="text"> 

    </div> 
</div> 

<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="birthdate">Birth Date</label> 
    <div class="col-md-4"> 
    <input id="birthdate" name="birthdate" placeholder="07/04/1950" class="form-control input-md" required="" type="text"> 

    </div> 
</div> 

<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="email">Email</label> 
    <div class="col-md-4"> 
    <input id="email" name="email" placeholder="" class="form-control input-md" required="" type="text"> 

    </div> 
</div> 

<!-- Password input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="password">Password</label> 
    <div class="col-md-4"> 
    <input id="password" name="password" placeholder="" class="form-control input-md" required="" type="password"> 
    <span class="help-block">Must be &gt;= 8 characters including at least 1 number</span> 
    </div> 
</div> 

<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="email">Address</label> 
    <div class="col-md-4"> 
    <input id="address" name="address" placeholder="" class="form-control input-md" required="" type="text"> 
    </div> 
</div> 

<!-- Text input--> 
<div class="form-group"> 
    <label class="col-md-4 control-label" for="email">City</label> 
    <div class="col-md-4"> 
    <input id="city" name="city" placeholder="" class="form-control input-md" required="" type="text"> 
    </div> 
</div> 
</div> 

</fieldset> 
+3

Il semble que votre PHP ne fonctionne pas et pourquoi ne pas renvoyer l'erreur réelle? –

+1

Vous êtes très ouvert pour l'injection SQL. Puisque vous utilisez mysqli, profitez des [instructions préparées] (http://php.net/manual/fr/mysqli.quickstart.prepared-statements.php) et [bind_param] (http://php.net/ manual/fr/mysqli-stmt.bind-param.php). Cela permettra de résoudre tous les problèmes de devis gênants que vous pourriez avoir. Vérifiez également les erreurs mysqli en cours de route. – aynber

+0

'$ city + $ _ POST ['city'];' devrait être '$ city = $ _ POST ['city'];' Aussi après avoir défini toutes ces valeurs, pourquoi retombez-vous à utiliser les valeurs $ _POST dans votre insert ? –

Répondre

1

Votre code est à risque d'injection sql et vous devez utiliser param lier au lieu de var comme _POST $ respecter de toute façon à vous remettre en question les disparus insérer des valeurs pourrait être parce que sont liés au fait que vous faites référence à l'indice de $ _POST en mauvais sens

par exemple: en utilisant une concaténation vous devez

$query = "INSERT INTO vestorinfo (name,birthdate,email,password,address,city) 
     VALUES ('" . $_POST['name'] ." , " . $_POST['birthdate'] .", " . 
     $_POST['email'] . "," . $_POST['password'] . "," . 
     $_POST['address'] . "," . $_POST['city'] . ")"; 
+0

Cependant, il y a beaucoup d'autres problèmes, comme le PHP qui n'est même pas exécuté. – chris85

+0

@ chris85. pourrait être . Je n'ai donné qu'un premier aperçu. – scaisEdge

+0

Je voudrais au moins avoir le PHP à exécuter avant de commencer à gérer les problèmes d'injection – PhilFredo