Je déplace une page PHP] vers mon site Web Joomla et on m'a informé que je "devrais utiliser les normes et méthodes de codage de Joomla pour tout, ce inclut les requêtes de base de données "
Ma question est:
Comment devrais-je transformer mon ancien code PHP concernant les normes Joomla:
$query = "SELECT * FROM `TABLE 2` WHERE Power LIKE ".$input->get('Power', '', 'RAW')." AND Poles LIKE ".$input->get('Poles', '', 'RAW')."";
$results = mysql_query($query)
or die(mysql_error());
echo '<table class="table table-striped">';
echo '<tr><th>Тип по БДС IEC 60034</th><th>Мощност</th><th>Обороти</th><th>Тегло</th></tr>';
while ($row = mysql_fetch_array($results))
{
extract($row);
echo '<tr><td class="first">Електромотор тип '.$TYPE.'</td><td>'.($Power+0).' kW</td><td>'.$Speed.' мин.<sup>-1</sup></td><td>'.$Weight.' кг.</td></tr>';
}
echo '</table>';
?>
Ceci est le contenu du TABLEAU 2. J'utilise les valeurs de chaque ligne en tant que variables sur ma page.
Mis à jour le 01.04.2016 ---------------------
Peut-être quelque chose comme ce qui suit:
$db = JFactory::getDbo();
$poles = $input->get('Poles', '', 'RAW');
$power = $input->get('Power', '', 'RAW');
$query = $db->getQuery(true);
$query->select($db->quoteName(array('*')))
->from($db->quoteName('TABLE 2'))
->where($db->quoteName('Power') . ' LIKE ' . $db->quote($power))
->where($db->quoteName('Poles') . ' LIKE ' . $db->quote($poles));
$db->setQuery($query);
$results = $db->loadObjectList();
echo '<table>';
foreach ($results as $row)
{
echo '<tr>';
echo '<td class="first">Електромотор тип ' . $row->TYPE . '</td>';
echo '<td>' . ($row->Power+0) . ' kW</td>';
echo '<td>' . $row->Speed . ' мин.<sup>-1</sup></td>';
echo '<td>' . $row->Weight . ' кг.</td>';
echo '</tr>';
}
echo '</table>';
Je suggérerais sérieusement cependant que vous gardiez tous les noms de colonne de votre table en minuscules. Cela peut parfois devenir déroutant lorsque vous commencez à capitaliser Word ou à utiliser des majuscules.
Si le code ci-dessus ne fonctionne pas avec les clauses where()
, essayez de les remplacer par:
->where($db->quoteName('Power') . ' LIKE ' . $db->quote('%'.$power.'%'))
->where($db->quoteName('Poles') . ' LIKE ' . $db->quote('%'.$poles.'%'));
J'espère que cela t'aides
Selon la capture d'écran de votre table de base de données, vos valeurs Power
sont de type (float)
Et vos valeurs Poles
de type (int)
. Pour cette raison, vous pouvez être plus restrictif dans le processus de validation de votre saisie utilisateur .
$jinput = JFactory::getApplication()->input;
$power = $jinput->get('Power', '', 'float'); // sufficiently sanitize for querying
$poles = $jinput->get('Poles', '', 'int'); // sufficiently sanitize for querying
echo "<div>Резултати за мощност = $power & поляците = $poles</div>"; // Results for...
Passons maintenant à la sortie tablulaire:
echo "<table class=\"table table-striped\">";
$db = JFactory::getDBO();
try {
$query = $db->getQuery(true)
->select("TYPE AS Type, TRIM(Power) + 0 AS Power, Speed, Weight")
->from($db->qn("TABLE 2"))
->where("Power = $power AND Poles = $poles);
$db->setQuery($query);
if (!$results = $db->loadAssocList()) {
echo "<tr><td>Няма резултати</td></tr>"; // No Results
} else {
echo "<tr>";
echo "<th>Тип по БДС IEC 60034</th>";
echo "<th>Мощност</th>";
echo "<th>Обороти</th>";
echo "<th>Тегло</th>";
echo "</tr>";
foreach ($results as $row) {
echo "<tr>";
echo "<td class=\"first\">Електромотор тип {$row['Type']}</td>";
echo "<td>{$row['Power']} kW</td>";
echo "<td>{$row['Speed']} мин.<sup>-1</sup></td>";
echo "<td>{$row['Weight']} кг.</td>";
echo "</tr>";
}
}
} catch (Exception $e) {
echo "<tr><th>Query Syntax Error - Please notify developer</th></tr>";
/*
echo "<tr><th>DO NOT MAKE THESE DETAILS PUBLIC:";
echo "<div>Query: " . $query->dump() . "</div>";
echo "<div>Error: " . $e->getMessage() . "</div>";
echo "</th></tr>";
*/
}
echo "</table>";
Explications:
RAW
comme paramètre de filtre lors de la collecte des valeurs soumises, resserrez les restrictions en utilisant respectivement float
et int
. Ensuite, vos valeurs sont suffisamment vérifiées pour être utilisées dans la requête via une interpolation variable.<table>
, J’utilise un bloc try {} catch {}
Car c’est un moyen propre et lisible de traiter les erreurs pouvant survenir pendant le processus d’interrogation.select()
, je suis en supprimant les zéros de fin de Power
(plutôt qu'au moment de l'affichage) et en modifiant la casse de TYPE
pour qu'elle soit conforme avec les autres colonnes (préférence personnelle).$db->qn()
(le raccourci pour $db->quoteName()
) est appelé dans le nom de la table; cela n'est nécessaire que parce que le nom de la table contient un espace. S'il n'y avait pas d'espace, la citation en arrière pourrait être omise.LIKE
; =
Fera l'affaire. Parce que vos valeurs $power
Et $poles
Sont sûrement numériques, elles n'ont pas besoin d'être entre guillemets simples.!$results = ...
Permet à la fois de déclarer le résultat en une variable et de rechercher une valeur false-y pour réduire les lignes de code.