[PHP] Alle gegevens uit tabel halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
Ik ben bezig met een cms en ik wil graag alle gegevens uit een tabel halen. De bovenste rij bevat de kolomamen en de rijen daaronder bevatten alle rijen van de tabel. Het script moet dit kunnen zonder te weten welke kolomnamen en hoeveel kolommen de tabel bevat. Ik heb vanalles geprobeerd, volgesmij moet het met een while lus in een while lus. Dit heb ik nu, mijn vraag gaat over het gedeelte bij de vraagtekens.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
include("connect.php");
function maxlength($string,$aantal) {
if(strlen($string) > $aantal) { 
$string = substr($string, 0, ($aantal - 3)) . "..."; 
} 
return $string;
}
$table = "nieuws";
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script src="sorttable.js"></script>
</head>
<body>
<table class="sortable" border="1" cellpadding="5">
<tr class="dik">
<?
$result_fields = mysql_query("SHOW COLUMNS FROM $table");
while ($fields = mysql_fetch_array($result_fields)) {
echo "<td>".ucfirst($fields['Field'])."</td>";
// haal kolomnamen uit tabel
}
echo "<td colspan='2' class='sorttable_nosort'>Actie</td></tr>";
$result = mysql_query("SELECT * FROM $table");
while ($row = mysql_fetch_array($result)) {
echo "<tr>";
while(??) {
echo "??";
}
echo "<td><a href='edit.php?id=".$id."'><img src='images/edit.gif' alt='Wijzigen'></a></td>\n<td><a href='delete.php?id=".$id."'><img src='images/trash.gif' alt='Verwijderen'></a></td></tr>";
}
?>
</table>
</body>
</html>

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 12:42

orf

PHP:
1
2
3
foreach($row as $col){
   echo '<td>' . htmlspecialchars($col) . '</td>';
}

[ Voor 38% gewijzigd door orf op 26-05-2008 19:54 ]


Acties:
  • 0 Henk 'm!

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 23-06 10:24
jij gaat nu vragen aan ons hoe je data uit een database in een tabel gooit? Is dat niet een beetje basic en opzoekbaar via google?

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 31-05 16:40
Kijk eens naar de functie mysql_fetch_assoc. Wat heb je verder zelf al geprobeerd? Al wat gezocht/gevonden op internet?

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Ik zie
code:
1
$table = "nieuws";

Betekent dit dat je alle nieuwspagina's wilt weergeven? En hoe ziet je tabelstructuur (MySQL) eruit?

Als je gewoon alles weer wilt geven uit bijvoorbeeld een news tabel:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<table>
<tr>
<th>ID</th><th>Titel</th><th>Voorbeeld</th>
</tr>
<?php

$data = mysql_query("SELECT * FROM news WHERE 1 ORDER BY id DESC");
while($result = mysql_fetch_assoc($data))
{

  echo "<tr>\n<td>".$result['id']."</td><td>".$result['title']."</td><td>".substr($result['message'],0,50)."...</td>\n</tr>\n";

}
?>
</table>


Verders kun je natuurlijk nog een LIMIT x,y in de query gooien die afhankelijk is van welke pagina je wilt wilt bekijken (1000 berichten op één pagina kijkt zo onoverzichtelijk). Dus iets met $_GET, maar zo creatief kun je zelf ook wel zijn.

[ Voor 18% gewijzigd door Bitage op 26-05-2008 19:52 ]


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
Ja, maar ik wil 1 cms maken voor alle tabellen. Ik test deze toevallig op de tabel nieuws. Deze bevat id,titel,bericht,datum. Maar dat wil ik van tevoren niet geven, hij moet zoveel td's maken als kolommen in de tabel. Of kan dit niet? Heb ook al het een en ander geprobeerd met while en each, ook arrays.. Maar het lukt me niet.

Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Ik hoop dat het niet voor gebruik buiten localhost is, want je moet nog een hoop leren.

Maar als ik je sp zo lees, dan wil je dus, van een willekeurige tabel in MySQL, de kolommen (of eigenlijk de namen ervan), en de bijbehorende rijen laten zien, op dezelfde wijze als dit gebeurd zoals in phpMyAdmin?

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
AndriesLouw schreef op maandag 26 mei 2008 @ 19:52:
[...]


Ik hoop dat het niet voor gebruik buiten localhost is, want je moet nog een hoop leren.

Maar als ik je sp zo lees, dan wil je dus, van een willekeurige tabel in MySQL, de kolommen (of eigenlijk de namen ervan), en de bijbehorende rijen laten zien, op dezelfde wijze als dit gebeurd zoals in phpMyAdmin?
Precies, hoe doe je dat?

Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php

include('connect.php');

function maxlength($string,$aantal) {
    if(strlen($string) > $aantal) { 
        $string = substr($string, 0, ($aantal - 3)).'...'; 
    } 
    return $string;
}

$table = 'nieuws';

?>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="stylesheet.css">
        <script src="sorttable.js"></script>
    </head>
    <body>
    <table class="sortable" border="1" cellpadding="5">
        <tr class="dik">
        <?php
            // Haal kolommen van de tabel op
            $result_fields = mysql_query("SHOW COLUMNS FROM ".$table);
            while ($field = mysql_fetch_array($result_fields)) {
                echo '          <td>'.ucfirst($fields['Field']).'</td>'.PHP_EOL;
            }
        ?>
            <td colspan="2" class="sorttable_nosort">Actie</td>
        </tr>
        <?php
            $result = mysql_query("SELECT * FROM ".$table);
            while ($row = mysql_fetch_row($result)){
                $kolommen = '';
                foreach($row AS $index => $value){
                    $kolommen .= '          <td>'.maxlength($value,50).'</td>'.PHP_EOL;
                }
                $id = $row[0];
                echo <<<EOF
        <tr>
            {$kolommen}
            <td><a href="edit.php?id={$id}"><img src="images/edit.gif" alt="Wijzigen"></a></td>
            <td><a href="delete.php?id={$id}"><img src="images/trash.gif" alt="Verwijderen"></a></td>
        </tr>
EOF;
            }
        ?>
        </table>
    </body>
</html>


Zoiets zou je op weg moeten helpen.. De HTML is echter nog niet valid, en $table wordt verder niet gecontroleerd op inhoud, houd hier rekening mee.

[ Voor 152% gewijzigd door AndriesLouw op 26-05-2008 20:08 ]

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 12:42

orf

Een foreach loop is alles wat je nodig hebt :?

Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Met een foreach doorloop je een array, degene die van mysql_fetch_row komt bijvoorbeeld. 1 rij is in die functie: $row[0], $row[1], etc, etc. De index (0, 1, etc, etc) "gooi je weg", de value houd je over.

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
edit:
Voor de code, zie Bitage in "[PHP] Alle gegevens uit tabel halen"

Zoiets zou het moeten worden. Verder niet getest, maar het zou een schop in de goeie richting zijn. Iig PHPMyAdmin-achtig.

@ hieronder: ik dacht al dat ik iets vergeten was :/ * Bitage goes again

[ Voor 92% gewijzigd door Bitage op 26-05-2008 21:18 ]


Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Bitage schreef op maandag 26 mei 2008 @ 20:13:
(..)

Zoiets zou het moeten worden. Verder niet getest, maar het zou een schop in de goeie richting zijn. Iig PHPMyAdmin-achtig.
Die mist alleen de rijen en velden nog ;)

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
Bedankt voor de (snelle) reacties. Die EOF laat ik er denk ik even buiten, ik snap daar nog niet zo veel van. En Bitage, bedankt maar dit is volgensmij niet wat ik bedoel. Wat ik wil hebben is dat je een pagina hebt met bovenaan een dropdown menu, waaruit je de tabellen uit de database kunt selecteren. Dan krijg je de hele tabel te zien en kun je records bewerken, verwijderen of toevoegen.

Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Euh, het mooiste zou dan natuurlijk zijn om 2 scripts te hebben en dan met AJAX te gaan werken, maar ik denk dat je het nu even in één script wilt? In ieder geval zou ik eens wat dieper ingaan op de MySQL SHOW-queries, die geven je een hele hoop info.

Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
Bitage schreef op maandag 26 mei 2008 @ 20:21:
Euh, het mooiste zou dan natuurlijk zijn om 2 scripts te hebben en dan met AJAX te gaan werken, maar ik denk dat je het nu even in één script wilt? In ieder geval zou ik eens wat dieper ingaan op de MySQL SHOW-queries, die geven je een hele hoop info.
Ik ga ook nog met ajax werken... Ook inderdaad eerst ff controleren of er wel iets in de tabellen staat. Maar het leek me handig eerst de basis van het script af te hebben, en dan uit gaan breiden.

EDIT: ben nu al de hele tijd aan het proberen. Dit zou toch ongeveer moeten werken? (als je ervan uitgaat dat elke tabel een kolom met 'id' bevat)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
include("connect.php");
function maxlength($string,$aantal) {
if(strlen($string) > $aantal) { 
$string = substr($string, 0, ($aantal - 3)) . "..."; 
} 
return $string;
}
$table = "nieuws";
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script src="sorttable.js"></script>
</head>
<body>
<table class="sortable" border="1" cellpadding="5">
<tr class="dik">
<?
$result_fields = mysql_query("SHOW COLUMNS FROM $table");
while ($fields = mysql_fetch_array($result_fields)) {
// echo "<td>".ucfirst($fields['Field'])."</td>";
// haal kolomnamen uit tabel
}
echo "<td colspan='2' class='sorttable_nosort'>Actie</td></tr>";
$result = mysql_query("SELECT * FROM ".$table);
while ($row = mysql_fetch_array($result)) {
echo "<tr>";
foreach ($row AS $key => $value) {
echo "<td>".$value."</td>";
}
echo "<td><a href='edit.php?id='".$row['id']."'>Edit</a></td><td><a href='remove.php?id='".$row['id']."'>Remove</a></td></tr>";
}
?>
</table>
</body>
</html>

[ Voor 51% gewijzigd door Anoniem: 191432 op 26-05-2008 20:36 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-06 11:51

Janoz

Moderator Devschuur®

!litemod

Dit zou toch ongeveer moeten werken?
Lijkt me dat je dat ook heel simpel zelf kunt testen toch?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
Janoz schreef op maandag 26 mei 2008 @ 20:42:
[...]

Lijkt me dat je dat ook heel simpel zelf kunt testen toch?
Ja, heb ik ook gedaan maar hij werkt niet. Zie hier het resultaat:
[img=http://img385.imageshack.us/img385/6249/nieuwsqo9.th.jpg]

Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Vervang mysql_fetch_array eens door _assoc

Uitleg: _array geeft het zowel in nummers, als in namen van kolommen terug.

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
En hoe doe ik het dan bij de link van het bewerken en verwijderen ($row['id']) ?

[ Voor 109% gewijzigd door Anoniem: 191432 op 26-05-2008 21:03 ]


Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Die houd je gewoon zo, daar hoef je niks aan te veranderen. Alleen _array naar _assoc aanpassen is meer dan voldoende.

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

Anoniem: 191432

Topicstarter
AndriesLouw schreef op maandag 26 mei 2008 @ 21:04:
Die houd je gewoon zo, daar hoef je niks aan te veranderen. Alleen _array naar _assoc aanpassen is meer dan voldoende.
De link is blablabla/edit.php?id=
En dan niks...

EDIT ik zie het, klein haakje teveel voor het dubbele haakje.
Superbedankt allemaal!!

[ Voor 13% gewijzigd door Anoniem: 191432 op 26-05-2008 21:12 ]


Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Zo, deze werkt. Moet je alleen wel zelf een actie.php bestand maken met de bewerkingen op de tabellen, maar dat kun je zelf wel.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<script>

function exploreTable(dropdown)
{
  
  if(dropdown.value != "0")
  {
  
    window.location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?table="+dropdown.value;
  
  }
  
}

</script>

<?php

$database = "cms";

// Tabellen ophalen en weergeven in dropdown

$fetch_tables = mysql_query("SHOW TABLES");
while($table = mysql_fetch_assoc($fetch_tables))
{
  
  $tables[] = $table['Tables_in_'.$database];
  
}

echo "<select name=\"table\" onchange=\"exploreTable(this);\">\n<option value=\"0\">Selecteer een tabel\n";

$num = 0;
while($num < count($tables))
{

  echo "<option value=\"".$tables[$num]."\">".$tables[$num]."\n";
  
  $num = $num + 1;

}

echo "</select>\n<br><br>\n";

// Hier gaan we pas wat doen als er een tabel geselecteerd is

if(isset($_GET['table']))
{

  $columns = mysql_query("SHOW COLUMNS FROM ".$_GET['table']);
  
  echo "<table caption=\"".$_GET['table']."\">\n<tr>\n";
  
  while($col = mysql_fetch_assoc($columns))
  {
    
    echo "<th>".$col['Field']."</th>";
    
  }
  
  echo "<th><i>Actie</i></th>\n</tr>\n";
  
  $data = mysql_query("SELECT * FROM ".$_GET['table']." WHERE 1");
  
  while($row = mysql_fetch_assoc($data))
  {
    
    echo "<tr>\n";
    
    foreach($row as $field)
    {
      
      echo "<td>".$field."</td>";
      
    }
    
    echo "<td><a href=\"actie.php?table=".$_GET['table']."&act=edit\"><img src=\"edit.gif\" border=\"0\"></a> <a href=\"actie.php?table=".$_GET['table']."&act=del\"><img src=\"del.gif\" border=\"0\"></a></td></tr>\n";
    
  }
  
  echo "</table>";

}

?>


Hier nog 2 plaatjes die in dezelfde map als het script moeten:
Afbeeldingslocatie: http://img88.imageshack.us/img88/7/delzv1.gif
del.gif
Afbeeldingslocatie: http://img88.imageshack.us/img88/7059/editgy5.gif
edit.gif

Acties:
  • 0 Henk 'm!

  • BlackWhizz
  • Registratie: September 2004
  • Laatst online: 08-12-2024
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?
include("connect.php");

function maxlength($string,$aantal) {
    if(strlen($string) > $aantal) { 
        $string = substr($string, 0, ($aantal - 3)) . "..."; 
    } 
    return $string;
}

$table = "nieuws";

?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script src="sorttable.js"></script>
</head>
<body>
<table class="sortable" border="1" cellpadding="5">
<tr class="dik">
<?
$rData = mysql_query("SELECT * FROM $table");
$i = 0;

while ($aData = mysql_fetch_assoc($rData)) 
{
    if ( $i == 0 )
    {
        echo '<tr>';
        // Als de teller 0 is dan de kolomnamen weergeven
        $aFields = array_keys($aData);
        
        foreach ( $aFields AS $sField )
        {
            echo '<th>'.$sField.'</th>';
        }
        echo '</tr>';
    }
    
    echo '<tr>';
    foreach ( $fields AS $sField => $sValue )
    {
        echo '<td>'.htmlentities($sValue ,ENT_QUOTES).'</td>';
    }
    echo '</tr>';
    
    $i++;
}
?>
</table>
</body>
</html>

Je bedoelt zoiets?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-06 11:51

Janoz

Moderator Devschuur®

!litemod

"Het werkt niet" zonder verdere uitleg is iets dat we hier eigenlijk niet willen zien. Hoe moeten wij nu weten wat er fout is en waarom de uitkomst niet is wat je verwacht? Veel handiger is om gewoon zelf te vertellen wat er gebeurt en waarom dat niet is wat je verwacht en hoe het verschilt met de uitkomst die je wel verwacht.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Je kunt ook nog de kolom namen apart ophalen (met DESC mijntabel oid), dan heb je ook het datatype en de grootte enzo erbij.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • AndriesLouw
  • Registratie: December 2005
  • Laatst online: 26-06 13:02
Voor degene die nu nog reageren, het is een aantal posts terug al opgelost..
Anoniem: 191432 schreef op maandag 26 mei 2008 @ 21:10:
(..)
EDIT ik zie het, klein haakje teveel voor het dubbele haakje.
Superbedankt allemaal!!

Specificaties | AndriesLouw.nl


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Om kolomnamen te printen kan je simpelweg de associatieve keys van de 1e row weergeven. Geen extra query voor nodig. :z

En de PHPmyAdmin is gewoon open source, dus ipv 10x ernaar verwijzen kan je het ook gewoon even bekijken. Helaas is het ook meteen een les in spaghetti code... :+

[ Voor 41% gewijzigd door Voutloos op 27-05-2008 08:14 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 27-06 07:04

Bosmonster

*zucht*

Anoniem: 191432 schreef op maandag 26 mei 2008 @ 19:51:
Ja, maar ik wil 1 cms maken voor alle tabellen. Ik test deze toevallig op de tabel nieuws. Deze bevat id,titel,bericht,datum. Maar dat wil ik van tevoren niet geven, hij moet zoveel td's maken als kolommen in de tabel. Of kan dit niet? Heb ook al het een en ander geprobeerd met while en each, ook arrays.. Maar het lukt me niet.
Das geen CMS, maar een TMS (table management system, net verzonnen, al geldt dit voor de meeste CMS'en van technische partijen).

Jammer dat dit soort dingen nog steeds vanuit de datastructuur worden ontworpen.
Pagina: 1