2013-05-23 4 views
1

J'essaye de renvoyer une valeur de ma base de données basée sur une entrée d'utilisateur sur mon formulaire. Lorsque j'exécute le code en utilisant une valeur, cela fonctionne mais quand je mets la variable, ce n'est pas le cas. Je suis sûr que c'est quelque chose de simple, mais je ne comprends pas?en utilisant une variable dans une requête mysqli?

Voici le code qui fonctionne:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '201'"); 


while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 

Quand je change à cela, il ne fait pas:

$beam_num = $_POST['Beam Number']; 

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '$beam_num'"); 

while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 
+2

Essayez d'imprimer la valeur de '$ _POST ['Beam Number']' avant la requête et vérifiez si elle est vide ou non. –

+0

Vous utilisez MySQLi, vous devriez donc utiliser des instructions préparées! http://php.net/manual/en/mysqli.prepare.php –

Répondre

4

Alors $_POST['Beam Number'] est vide.

De même, vous ne devez jamais mettre d'entrée utilisateur, telle que la publication de données, directement dans une requête. Google SQL injection et comment l'empêcher.

Essayez le débogage $_POST['Beam Number']. Vous devriez voir qu'il est vide et ensuite vous devez découvrir pourquoi il est vide.

Édition S'il existe une valeur, alors déboguez la chaîne de requête en la plaçant d'abord dans une variable.

error_log($beam_num); 

$query = "SELECT cost_ft FROM Beams WHERE number = '$beam_num'"; 

error_log($query); 

$sql_beam = mysqli_query($link,$query); 

Ensuite, si vous rencontrez toujours des problèmes, veuillez fournir les valeurs enregistrées.

+0

Il ya une valeur là-bas, en regardant l'injection maintenant, merci – user2407883

+0

va montrer mon ignorance, comment puis-je déboguer $ _POST [«Beam Number»]? – user2407883

+0

J'ai inclus cela dans mon édition en utilisant 'error_log()'. Déboguer une variable signifie simplement examiner cette valeur à un point particulier de votre code. Si vous ne savez pas où se trouve votre journal des erreurs, faites simplement écho à la valeur de votre navigateur si vous développez lcoalyl, puis recherchez comment le trouver. –

0

Modifier votre deuxième ligne à ceci:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '". $beam_num ."'"); 
+0

Cela n'aurait pas d'importance. – Kermit

+0

Cela se traduira par exactement la même chaîne ne le ferait pas. Sa syntaxe est parfaite pour autant que je sache. Une variable dans une chaîne entre guillemets doubles doit être évaluée. –

1

variables dans un travail de recherche mieux quand renfermée entre accolades comme ceci:

$beam_num = $_POST['Beam Number']; 

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '{$beam_num}'"); 

while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 

Cela devrait résoudre le problème, si elle ne marche pas alors essayez cela:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = $beam_num"); 

J'avais que dans un de mes codes et cela a fonctionné.

+0

Les baguettes arrières sont pour la table et les colonnes; les guillemets simples sont pour les variables non entières que vous transmettez. Dans ce cas, les guillemets étaient corrects à l'origine. – andrewsi

+0

bien d'édition cela! Merci! – pattyd

+0

Merci pour l'aide andrewsi et pattyd, Il s'est avéré être un problème avec la forme, pas le php. – user2407883

Questions connexes