mysql_num_cols

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich wollte mir ein kleines Script schreiben, wo ich SQL selber in ein Formular schreiben kann und mir dann die Tabelle angezeigt wird (also NUR für SELECT-Statements). Beim googlen kam ich auf mysql_num_cols, aber anscheinend kann die PHP Version 4.x meines Webspace-Providers diese Funktion nicht. wie kann ich es anders lösen?
PHP:
<?php
include("connect.php");

echo '
<form action="'.$_PHPSELF.'" method="post">
<table border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td>
			<textarea name="sql" cols="50" rows="10"></textarea>
		</td>
		<td>
			<input type="submit" value="Send">
			<input type="reset" value="Reset">
		</td>
	</tr>
</table>
</form>';

if(isset($_POST["sql"]))
{
	$sql = $_POST["sql"];
	
	$result = mysql_query($sql);
	$cols = mysql_num_cols($result);
	echo '<table border="0" cellspacing="0" cellpadding="0">';
	while($data = mysql_fetch_array($result))
	{
		echo '<tr>';
		for($i = 1; $i <= $cols; $i++)
		{
			echo '<td>'.$data[$i].'</td>';
		}
		echo '</tr>';
	}
	echo '</table>';
}
?>


Gruß Radhad
 
Hallo,
so vielleicht:
PHP:
<?php
include("connect.php");

echo '
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<table border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>
            <textarea name="sql" cols="50" rows="10"></textarea>
        </td>
        <td>
            <input type="submit" value="Send">
            <input type="reset" value="Reset">
        </td>
    </tr>
</table>
</form>';

if(isset($_POST["sql"]))
{
    $sql = mysql_real_escape_string($_POST["sql"]);
    
    $result = mysql_query($sql) or die(mysql_error());
    echo '<table border="0" cellspacing="0" cellpadding="0">';
    while($data = mysql_fetch_array($result))
    {
        echo '<tr>';
        for ($i = 0; $i < count($data); $i++)
        {
            echo '<td>'.$data[$i].'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}
?>
mfg
forsterm
 
Zuletzt bearbeitet:
Der Ansatz ist zwar gut, aber er hat 2 Probleme:

1. ist das Ergebnis von count($data) 10 - bei einer Tabelle mit 4 Spalten.
2. wird dies mehrmals durchgeführt, was ja eigentlich unnötig ist.

Habe aber die Lösung eben gefunden: mysql_num_fields()

Außerdem hole ich sogar die Spaltennamen aus der Tabelle heraus :)
Wer das Script benutzen will, kanns natürlich gerne nehmen. Zum lernen von SQL find ich das ganz praktisch. Werde mal versuchen das weiter auszubauen. Weiß jemand, wie ich Strings splitte mit PHP, wie die Funktion heißt? Weil vielleicht will ich ja mal 2 Tabellen gleichzeitig ausgeben lassen oder einen UPDATE oder CREATE oder INSERT Befehl machen... Wenn ihr ein paar Tipps hättet dazu, wie ich das lösen kann, wär ich sehr dankbar!

PHP:
<?php
include("connect.php");

echo '
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<table border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>
            <textarea name="sql" cols="50" rows="10"></textarea>
        </td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Send">
            <input type="reset" value="Reset">
        </td>
    </tr>
</table>
</form><br><br>';

if(isset($_POST["sql"]))
{
    $sql = mysql_real_escape_string($_POST["sql"]);
    
    $result = mysql_query($sql) or die(mysql_error());
    $count = mysql_num_fields($result);
    echo '<table border="1" cellspacing="0" cellpadding="0" width="100%"><tr>';
    for($i = 0; $i < $count; $i++)
    {
		echo '<td>'.mysql_field_name($result, $i).'</td>';
    }
    echo '</tr>';
    while($data = mysql_fetch_array($result))
    {
        echo '<tr>';
        for ($i = 0; $i < $count; $i++)
        {
            echo '<td>'.$data[$i].'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}
?>


Gruß Radhad
 
Zuletzt bearbeitet:
Hallo,

mit foreach ginge es noch einfacher:
PHP:
if(isset($_POST["sql"]))
{
    // Macht hier keinen Sinn!
    //$sql = mysql_real_escape_string($_POST["sql"]);
    
    $result = mysql_query($sql) or die(mysql_error());
    echo '<table border="1" cellspacing="0" cellpadding="0" width="100%">';
    while($data = mysql_fetch_row($result))
    {
        echo '<tr>';
        foreach ($data as $field)
        {
            echo '<td>'.$field.'</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}

Grüße,
Matthias
 
Da war ich schneller ;)

Da ich für "mysql_field_name($result, $i)" eine Zählervariable brauche, ist Lösung 1 (von mir gepostet) besser, obwohl es mit der foreach-Schleife schöner aussieht :)
 
Zurück