zoek probleempje ... database geeft geen waarde ... ook niet als de waarde wel bestaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henry V

Henry V

09/06/2012 12:46:01
Quote Anchor link
Ik loop tegen een probleem aan.
Ik heb een zoek functie gemaakt in de admin, zodat ik makkelijk en snel op een gebruikers naam kan zoeken en zo vervolgens alle informatie krijg over deze gebruiker.

Maar hij geeft alleen maar een foutafhandeling in beeld als zoek resultaat,
ook al bestaat de gebruikersnaam wel.

De database table is als volgt opgebouwd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
CREATE TABLE IF NOT EXISTS `site_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user` varchar(20) NOT NULL,
  `pass` varchar(20) NOT NULL,
  `voornaam` varchar(50) NOT NULL,
  `familienaam` varchar(50) NOT NULL,
  `straathuisnummer` varchar(50) NOT NULL,
  `postcode` varchar(7) NOT NULL,
  `woonplaats` varchar(50) NOT NULL,
  `land` varchar(255) NOT NULL,
  `state` varchar(255) NOT NULL,
  `email` varchar(50) NOT NULL,
  `datum` bigint(20) NOT NULL,
  `rekenen` varchar(1) NOT NULL,
  `sexemvs` varchar(1) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3924 ;
?>


Dit is de php code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
ini_set('display_errors', 'On');
error_reporting(E_ALL);

echo "<table border='0' cellpadding='5' width='100%'>
  <tr bgcolor='#cfcfcf'>
    <td width='100%' class='TextListe'><b>Zoek op Gebruikers Naam</b></td>
  </tr>
</table>"
;

$user = $_POST['user'];

    {

        $getaa1 = mysql_query("SELECT * FROM site_user WHERE user LIKE '%$user%'");
    }

    
    if($user == 0 ){
            echo "<table border='0' cellpadding='5' width='100%'>
              <tr>
                <td width='100%' class='TextListe' bgcolor='#FF6666'>Geen zoekresultaten. Pas je zoekopdracht aan. </td>
              </tr>
            </table>"
;
            echo '<br/>';
        }
else {
                while ($geta1 = mysql_fetch_array($getaa1)){
                echo "<table border='0' cellpadding='5' width='100%'>
                  <tr bgcolor='#cfcfcf'>
                    <td width='10%' class='TextListe'><b>ID</b></td>
                    <td width='15%' class='TextListe'><b>Registratie Datum</b></td>
                    <td width='10%' class='TextListe'><b>Geslacht</b></td>
                    <td width='15%' class='TextListe'><b>Gebruikers Naam</b></td>
                    <td width='15%' class='TextListe'><b>Wachtwoord</b></td>
                    <td width='10%' class='TextListe'><b>Land</b></td>
                    <td width='10%' class='TextListe'><b>Provincie</b></td>
                    <td width='15%' class='TextListe'><b>E-mail Adres</b></td>
                  </tr>
                </table>"
;
                
                echo "<table border='0' cellpadding='5' width='100%'>
                  <tr>
                    <td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[id] </td>
                    <td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[datum] </td>
                    <td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[sexemvs] </td>
                    <td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[user] </td>
                    <td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[pass] </td>
                    <td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[land] </td>
                    <td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[state] </td>
                    <td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[email] </td>
                  </tr>
                </table>"
;
                echo '<br/>';
                }
        }

      
echo "<table border='0' cellpadding='5' width='100%'>
    <tr>
      <td width='100%' class='TextListe' bgcolor='#cfcfcf'><b>Nieuwe zoek opdracht </b></td>
    </tr>
  </table>"
;
      
echo "<form action='gebruikers.php' method='post'>
  <table border='0' cellpadding='5' width='100%'>
    <tr>
      <td width='40%' class='TextListe' bgcolor='#B3E6B3'>
        <b>Gebruikers Naam: </b> <input type='text' name='user' />
      </td>
      <td align='left' width='60%' class='TextListe' bgcolor='#B3E6B3'>
        <input type='submit' value='Submit' />
      </td>
    </tr>
  </table>
</form>"
;
?>


Met error reporting krijg ik de volgende melding te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
Notice: Undefined index: user in /home/admin/domains/------/public_html/admin/includes/gebruikers.inc.php on line 74
?>

Regel 74 is in dit geval:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$user
= $_POST['user'];
?>

Natuurlijk ook logisch dat ik deze melding krijg, aangezien in eerste instantie geen user naam is ingevuld.
Zodra ik een bestaande user naam intik krijg ik deze Notice niet meer te zien.
Maar alsnog krijg ik geen gegevens van deze user te zien, maar enkel alleen de fout afhandeling "Geen zoekresultaten. Pas je zoekopdracht aan."

Ik weet even niet waar de fout zit, misschien zie ik het over het hoofd.
Ik heb het zelfde ook gedaan op een andere pagina binnen de admin, maar dan zoeken op IP adres en daar werkt het volledig naar behoren.

P.s. de file gebruikers.php is als volgt opgebouwd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
include('header.php');
include("includes/gebruikers.inc.php");
include("footer.php");
?>
 
PHP hulp

PHP hulp

15/11/2024 08:05:05
 
Erwin H

Erwin H

09/06/2012 12:58:39
Quote Anchor link
En daarom zegt iedereen altijd 'variabelen buiten quotes halen'.

$geta1[id] (regel 41 en verder)

is niet correct. Had je het buiten quotes gehaald had je het waarschijnlijk eerder gezien.

Toevoeging op 09/06/2012 13:00:09:

Daarnaast gebruik je dubbele en enkele quotes ook eigenlijk verkeerd om. Gebruik dubbele voor de attributen in HTML en enkele voor strings in php.
 
Obelix Idefix

Obelix Idefix

09/06/2012 13:04:35
Quote Anchor link
Bouw een correcte foutafhandeling in.
Wat is het nut van { } op regel 13/15?
Controleer of $_POST bestaat met isset.
Opmaak niet inline maar via css.
Waarom mysql_fetch_array en geen mysql_fetch_assoc?
 
Henry V

Henry V

09/06/2012 13:29:18
Quote Anchor link
@Erwin: Wat bedoel je precies met:

En daarom zegt iedereen altijd 'variabelen buiten quotes halen'.

$geta1[id] (regel 41 en verder)

@Obelix: De foutafhandeling is gemaakt met deze tut: http://www.phphulp.nl/php/tutorial/overig/beginnersfouten-tegengaan/763/
{ } op regel 13 / 15 heeft inderdaad geen nut, die heb ik over het hoofd gezien en is inmiddels verwijderd.
Hoe kan ik $_POST controleren met isset?
cs inline is nu omdat ik eerst wil hebben dat het werkt, daarna zal dat veranderen via een .css
Wat is het verschil tussen array en assoc?
 
Erwin H

Erwin H

09/06/2012 13:35:44
Quote Anchor link
Henry V op 09/06/2012 13:29:18:
@Erwin: Wat bedoel je precies met:

En daarom zegt iedereen altijd 'variabelen buiten quotes halen'.

$geta1[id] (regel 41 en verder)

Omdat als je de variabelen in de regels die ik aanhaalde buiten quotes had gehaald, dan had je door middel van de kleurtjes alleen al kunnen zien dat dit:
$geta1[id]
dus dit:
$geta1['id']
had moeten zijn. id is een key voor de array $geta1, het is een string. Een string moet tussen quotes.
 
Obelix Idefix

Obelix Idefix

09/06/2012 13:51:31
Quote Anchor link
Henry V op 09/06/2012 12:46:01:
Dit is de php code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
echo "<table border='0' cellpadding='5' width='100%'>
<tr>
<td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[id] </td>
<td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[datum] </td>
<td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[sexemvs] </td>
<td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[user] </td>
<td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[pass] </td>
<td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[land] </td>
<td width='10%' class='TextListe' bgcolor='#B3E6B3'>$geta1[state] </td>
<td width='15%' class='TextListe' bgcolor='#B3E6B3'>$geta1[email] </td>
</tr>
</table>"
;
echo '<br/>';
?>

Verander dat eens in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
echo '<table border="0" cellpadding="5" width="100%">
<tr>
<td width="10%" class="TextListe" bgcolor="#B3E6B3">'
.$geta1['state'].' </td>
<td width="15%" class="TextListe" bgcolor="#B3E6B3">'
.$geta1['email'].' </td>
</tr>
</table>'
;
echo '<br/>';
?>

Let op de " en ' en naar de manier van weergeven van de data uit de query.Heb niet alleen regels herschreven.

Henry V op 09/06/2012 13:29:18:
@Obelix: De foutafhandeling is gemaakt met deze tut: http://www.phphulp.nl/php/tutorial/overig/beginnersfouten-tegengaan/763/

Op welke regel staat die foutafhandeling dan?
Op regel 14 staat de query en op regel 25 ga je met een while-lus fetchen.

Henry V op 09/06/2012 13:29:18:
Hoe kan ik $_POST controleren met isset?

Lees wat onderwerpen/basistut op bv dit forum of gebruik Google...:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
if(isset($_POST['waarde']))
{
 // er is een $_POST-waarde
}
else
{
 // er is geen $_POST-waarde
}


Henry V op 09/06/2012 13:29:18:
cs inline is nu omdat ik eerst wil hebben dat het werkt, daarna zal dat veranderen via een .css

Je hebt tijd over? Je moet dus straks alle code nogmaals doorlopen om aan te passen. Is dubbel op werk. Lijkt me zonde van de tijd. Overigens zie ik class="TextListe" staan; je doet dus al wel wat met css!?

Henry V op 09/06/2012 13:29:18:
Wat is het verschil tussen array en assoc?

Zoek even op internet. De manier waarop je het nu gebruikt is niet zoals array bedoelt is, maar zoals assoc wordt gehanteerd.
Gewijzigd op 09/06/2012 13:58:37 door Obelix Idefix
 
- SanThe -

- SanThe -

09/06/2012 14:23:57
Quote Anchor link
$user = $_POST['user'];
En dan stop je $user onbeveiligd in de query => lek dus => sql-injection.

En dan ga je kijken of $user nul is.
if($user == 0 ){

Zeer onlogisch lijkt mij.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.