mysqli_num_rows

ViPHP
ViPHP | 2291 Messages

16 sept. 2007, 09:53

Bonjour,

Je crée un script qui me permet de faire des requêtes sql à partir d'un formulaire.(pour un exercices par pour réinventer la roue :wink: )
Mon code :
<?php
/*Va chercher les valeurs pour l'hôte, l'user, et le pass pour la connexion MySQL*/
include "mysql.php";

/*Affiche le titre de la page*/
echo "<html>
		<head><Title>Envoie d'une requête SQL</Title></head>
			<body>";

	if(ini_get("magic_quotes_gpc") == "1")
	{
		$_POST['query'] = stripslashes($_POST['query']);
	}

	if(!empty($_POST['form']))
	{
		$cxn = mysqli_connect($host, $user, $password,
		                      $_POST['database']);
        $result = mysqli_query($cxn,$_POST['query']);

        echo "Base de données sélectionnée :
        									<b>{$_POST['database']}</br><br>
        	Requête : <b>{$_POST['query']}</b>
        	<h3>Résultats : </h3><hr>";
        if($result == false)
        {
        	echo "<h4>Erreur SQL : ".mysqli_error($cxn)."</h4>";
        }
        elseif(mysqli_num_rows($result) == 0)
        {
        	echo "<h4>Requête exécutée.
        			  Aucun résultat envoyé.</h4>";
        }
        else
        {
            /*Affiche les résulstats*/
        	echo "<table border = '1'><thead><tr>";
        	$finfo = mysqli_fetch_fields($result);
        	foreach($finfo as $field)
        	{
        		echo "<th>".$field->name."</th>";
            }
            echo "</tr></thead>
                  <tbody>";
            for ($i=0;$i < mysqli_num_rows($result);$i++)
            {
            	echo "<tr>";
            	$row = mysqli_fetch_row($result);
            	foreach($row as $value)
            	{
            		echo "<td>".$value."</td>";
            	}
            	echo "</tr>";
            }
            echo "</tbody></table>";
          }

          /*Affichage du formulaire avec les boutons après les résultats*/
          $query = str_replace("'","%&%",$_POST['query']);
          echo "<hr><br>
          		<form action='{$_SERVER['PHP_SELF']}' method='POST'>
          			<input type='hidden' name='query' value='$query'>
          			<input type='hidden' name='database' value={$_POST['database']}>
          			<input type='submit' name='queryButton' value='Nouvelle requête'>
          			<input type='submit' name='queryButton' value='Modifier la requête'>
          		</form>";
          	exit();
          }

          /*Affichage du formulaire de saisie*/
          if ($_POST['queryButton'] != "Modifier la requête")
          {
          	$query = " ";
          }
          else
          {
          	$query = str_replace("%&%","'",$_POST['query']);
          }

?>

	<form action=<?php echo $_SERVER['PHP_SELF']; ?> method="POST">
	<fieldset>
	<legend>Formulaire de saisie.</legend>
	<table>
		<tbody>
		<tr>
			<td style="text-align: right; font-weight: bold">Saisir le nom de la
			base de données : </td>
			<td>
			<input type="text" name="database" value=<?php echo $_POST['database']; ?> ></td>
		</tr>
		<tr>
			<td style="text-align: right; font-weight: bold" valign="top">Saisie
			de la requête SQL : </td>
			<td><textarea name="query" cols="60" rows="10"><?php echo $query ;?></textarea></td>
		</tr>
		<tr>
			<td colspan="2" style="text-align: center">
			<input type="submit" value="Valider la requête" /></td>
		</tr>
	</tbody>
	</table>
	</fieldset> <input type="hidden" name="form" value="yes" />
</form>

</body>

</html>
Mon soucis est que chaque fois que je j'introduit une requête j'ai un message d'erreur.
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result
La ligne en question est ici :
elseif(mysqli_num_rows($result) == 0)
        {
        	echo "<h4>Requête exécutée.
        			  Aucun résultat envoyé.</h4>";
Par contre malgré le message d'erreur les requêtes s'éffectue :wink:

D'avance merci
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 5924 Messages

17 sept. 2007, 21:46

mysqli_num_rows() ne fonctionne que pour des requètes de sélection de données ( SELECT, SHOW TABLES, SHOW DATABASES, ... )

Mammouth du PHP | 19672 Messages

18 sept. 2007, 06:03

Tu devrais regarder du coté de mysqli_affected_rows() :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

18 sept. 2007, 16:33

mysqli_num_rows() ne fonctionne que pour des requètes de sélection de données ( SELECT, SHOW TABLES, SHOW DATABASES, ... )
Effectivement les requêtes en question fonctionne trés bien :)
Tu devrais regarder du coté de mysqli_affected_rows()
Je me retrouve avec la même erreur :?: :cry:

Et se qui me tracasse ou/et que je ne comprend pas dans la doc est ceci
Pour les requêtes de sélection, la fonction mysqli_affected_rows() fonctionne de la même façon que la fonction mysqli_num_rows().
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 19672 Messages

18 sept. 2007, 21:29

Alors vérifie que l'exécution de ta requête est correcte, ça sent l'erreur qui fait que ce qui suit ne peut pas fonctionner non plus.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: