Page 1 sur 1

mysqli_num_rows

Posté : 16 sept. 2007, 09:53
par dunbar
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

Posté : 17 sept. 2007, 21:46
par Sékiltoyai
mysqli_num_rows() ne fonctionne que pour des requètes de sélection de données ( SELECT, SHOW TABLES, SHOW DATABASES, ... )

Posté : 18 sept. 2007, 06:03
par Cyrano
Tu devrais regarder du coté de mysqli_affected_rows() :-k

Posté : 18 sept. 2007, 16:33
par dunbar
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().

Posté : 18 sept. 2007, 21:29
par Cyrano
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.