Versio

reactie verwijderen

Overzicht Reageren

Reshadd farid
Redacteur

reshadd farid

22/02/2012 19:42:40
Quote Anchor link
hallo wederom een vraag,

ik heb nooit met php functies gewerkt dus ik vraag me af wat ik nu doe of dit zo kan enof het goed is of ik het anders moet doen.. ?

mijn functie:

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
<?php

function removeMessage(){

$dQuery = "DELETE * FROM tickets WHERE ticket_id='".$row['ticket_id']."'";

$delete = mysql_query($dQuery);
    
    if($delete === false){
        echo"kan bericht niet verwijderen";
    }
    
}

?>


en de rest van de pagina waar een button in komt ( kijk even of ik dat ook goed doe )

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
<?php

        include("connect.php");        

$result = mysql_query("

                      SELECT *
                      FROM gebruiker
                      INNER JOIN tickets
                      ON gebruiker.gebruiker_id = tickets.gebruiker_id
                      WHERE gebruiker.naam = '"
.$_SESSION['myusername']."'
                      
                      "
); // or die (mysql_error());
                      
                      if($result === false){
                          
                        //  echo mysql_error();
                        echo 'er ging iets fout met het ophalen van de informatie neem contact op met de admin a.u.b.';
                      }

                          
                          else {
                              
                              if (mysql_num_rows($result) == 0){
                                  echo 'er zijn nog geen berichten geplaatst';
                              }

                              
                              else {

$i=0;

while($row = mysql_fetch_assoc($result)) {


  echo 'ticketnr: &nbsp'.$row['ticket_id'].'<br/>';
  echo 'tijdstip: &nbsp'. $row['ticketdatum'].'<br/>';
  echo 'Aanvrager: &nbsp' .$row['naam'].'<br/>';
  echo 'email: &nbsp'. $row['email'].'';
  echo '<br/><br/> Bericht:<br/>'. $row['bericht'];
  echo '<br/><br/>Antwoord:<br/>'. $row['response'].'<br/><br/>';
  echo '<input type="button" value="Verwijder bericht" name="verwijderB onclick="return removeMessage(this)">'; // verwijder knop
  echo '<hr/>';
 
 $i++;

}
    }
                          }


        ?>
 
PHP hulp

PHP hulp

25/05/2012 14:10:57
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Aad B

Aad B

22/02/2012 19:47:18
Quote Anchor link
De function removeMessage() moet een argument binnen krijgen en in de functie verwerkt je dat argument. vb function removeMessage($arg1) Zie http://php.net/manual/en/functions.arguments.php
Gewijzigd op 22/02/2012 19:48:05 door Aad B
 
Erwin H

Erwin H

22/02/2012 19:47:47
Quote Anchor link
echo '<input type="button" value="Verwijder bericht" name="verwijderB onclick="return removeMessage(this)">';
Gebruik nooit spaties, maar altijd underscores in properties (value die geval). Met spaties is het altijd onzeker hoe dat over komt.
En achter de name property ontbreekt een "
 
Wouter J

Wouter J

22/02/2012 19:50:27
Quote Anchor link
In een functie mag je eigenlijk nooit iets echoën (behalve als je met view classes werkt). Je moet altijd iets returnen.
Vaak is het zo dat je als er iets fout gaat false returned en als iets goed gaat true of een waarde.

Om de foutmelding te weten kun je iets gebruiken als exceptions. Meer informatie hierover: http://phptuts.nl/view/35/7/

Verdere tips:
- altijd mysql_real_escape_string om je variabele in een query zetten. Dus ook om sessions
- Gebruik een constante als DEBUG_MODE om te beslissen of je een mysql_error moet tonen. Meer informatie vind je in een tut van jasper PHP over foutafhandeling bij queries
- Waarom die $i=0; en $i++? Als je wilt tellen hoeveel gegevens er uit de DB komen kun je beter de functie mysql_num_rows gebruiken.
- HTML echoën vind ik nooit zo mooi. Je kan beter zoiets maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php while( $row = mysql_fetch_assoc($result) ) : ?>
  Ticketnr: <?php echo $row['ticket_id']; ?><br>
  Tijdstip: <?php echo $row['ticketdatum']; ?><br>
  enz.........................................<br>
<?php endwhile; ?>

Meer informatie: control-structures.alternative-syntax
 
Eddy Erkelens

Eddy Erkelens

22/02/2012 19:50:51
Quote Anchor link
In de functie moet je ook de $var opnemen:

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
<?php
function removeMessage($id)
    {

    $id = intval($id);
    $dQuery = "DELETE FROM tickets WHERE ticket_id = ".$id."";

    $delete = mysql_query($dQuery);
    if($delete === false)
        {

        return false;
        }
    
    else
         {
        return true;
        }
    }

?>


Tevens altijd blijven controleren of het wel een getal is.
Én, tenslotte, een integer moet in sql NIET tussen enkele quotes.

Daarnaast wil je met een javascript-oplossing (de onclick) iets doen.
En dat werkt niet. Je kan wel met Javascript de php-pagina openen (aanroepen), maar dan moet je toch echt het $id meegeven in een link. Bijvoorbeeld verwijder.php?id=3834
Na het uitvoeren van de functie (wat dus niet in een functie hoeft, doe dat op een aparte pagina OF als cms.php?mode=verwijder&id=3843 ) begin je opnieuw met het tonen van de lijst.

Probeer eerst eens wat gegevens mbv van $_GET en $_POST te ontvangen en iets mee te doen.
Je zit nu op de verkeerde weg.
Zo mis je ook het formulier van de input....
En je had DELETE *.. terwijl dat sterretje niet kan. Je verwijderd een regel WEL of NIET, niet half oid.
Gewijzigd op 22/02/2012 19:52:54 door Eddy Erkelens
 
Reshadd farid
Redacteur

reshadd farid

22/02/2012 20:11:58
Quote Anchor link
@wouter

ik heb mede door jou voorbeeld iets geprobeerd ik vraag me af of dit gelukt is. hieronder wat ik gedaan heb

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
<?php

function removeMessage($verwijderen){

$dQuery = "DELETE * FROM tickets WHERE ticket_id='".$row['ticket_id']."'";

$delete = mysql_query($dQuery);
    
    if($delete === false){
    throw new Exception ('FOUT: kan bericht niet verwijderen');
    }

    
    return true;
}


try
{
  removemessage(false);
}

catch (Exception $e)
{

    echo $e;
}

?>


@aadB ik heb hem een argument meegegeven

@erwin maar de value is toch alleen voor het weergeven van een waarde?

Toevoeging op 22/02/2012 20:20:22:

@eddy je verhaal snap ik enigzins wel enigzins niet, wat bedoel je met ik mis het formulier van de input? en hoe zou ik dit anders moeten doen?

( wat ik er dus tot nu van begrijp ) zet dit niet in een functie maar in bijv. verwijder.php

gebruik de onclick om naar verwijder.php te gaan en het uit te voeren.

ga terug naar de pagina waar je kwam.

heb ik het zo goed begrepen?

Toevoeging op 22/02/2012 20:55:47:

ik heb nu dit gemaakt van de button

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
  echo '<input type="button" value="Verwijder bericht" name="verwijderB" onclick="javascript:(window.location=\'verwijderbericht.php\')">';
?>


en heb een pagina genaamd verwijderbericht.php gemaakt, deze ziet er zo uit.

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
<?php
session_start();

include ('connect.php');

    $dQuery = "DELETE FROM tickets WHERE ticket_id = ".$id."";

    $delete = mysql_query($dQuery);
    if($delete === false){
        header('location:errorDelete.php');
     }

     else{
         header('location:admin.php');
     }

?>


ik denk dat mijn query zowiezo niet goed is maar wie kan me hiermee op weg helpen?
 
Wouter J

Wouter J

22/02/2012 23:12:05
Quote Anchor link
Erwin "Gebruik nooit spaties, maar altijd underscores in properties (value die geval). Met spaties is het altijd onzeker hoe dat over komt."
Niet in value. In dingen als class of id attributen heb je gelijk. Maar in values moet je gewoon spaties gebruiken als je spaties wilt.

Bas,

Probeer even logisch na te denken. Als je dit doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$name
= 'bas foo';

function
sayHello()
{

  return 'Hello '.$name;
}


echo sayHello();
?>

Zal je een error krijgen. De variabele $myVar zit in de global scope, maar niet in de functie scope. Om hem daarin te krijgen zul je hem als argument mee moeten geven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$name
= 'bas foo';

function
sayHello( $user )
{

  return 'Hello '.$user;
}


echo sayHello($name); // hello bas foo
?>

Dit werkt wel. Zo moet je het ook met het id doen in je query.

Verder is Exception een class. $e bevat nu dus een object. Om de message te krijgen gebruik je $e->getMessage(); en zo kun je nog veel meer krijgen, als de line, file, enz.

Probeer variabele te typecasten. $id kan nu namelijk ook een string bevatten als je er (int) voorzet zorg je ervoor dat het verplicht een getal moet worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$dQuery
= "DELETE FROM tickets WHERE ticket_id = ".(int) $id:
?>


Zet in je header een spatie tussen de location: en het bestand.

Waarom gebruik je session_start()? Geef de var mee via $_GET of $_POST en gebruik hem zo op die pagina weer.

Verder heb je nu de hele functie weggehaald, dit is jammer omdat je net goed op weg was.
 
Erwin H

Erwin H

22/02/2012 23:33:10
Quote Anchor link
Wouter J op 22/02/2012 23:12:05:
Erwin "Gebruik nooit spaties, maar altijd underscores in properties (value die geval). Met spaties is het altijd onzeker hoe dat over komt."
Niet in value. In dingen als class of id attributen heb je gelijk. Maar in values moet je gewoon spaties gebruiken als je spaties wilt.

Jullie hebben helemaal gelijk natuurlijk.... ik keek een beetje scheef en was in de war met de property name.
 
Reshadd farid
Redacteur

reshadd farid

23/02/2012 11:51:11
Quote Anchor link
ja ik raakte beetje in de war door de reactie van eddy het klonk logisch maar welke manier vind je beter om te gebruiken @wouterJ ?

Toevoeging op 23/02/2012 12:46:21:

ik heb eventjes der weer een function van gemaakt en krijg nu als ik inlog al gelijk bovenin de melding van de FOUT

wat doe ik nu nog fout? hoe pakt hij nu de ticket_id die bij dit bericht hoort? dat snap ik even niet want alle berichten van de gebruiker die ingelogd is worden onder elkaar netjes weergegeven en met een knopje 'verwijder'

even een online voorbeeld:

naam= abilan
wachtwoord = wachtwoord1

link

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
<?php
function removeMessage($id)
    {

    $id = intval($id);
    $dQuery = "DELETE FROM tickets WHERE ticket_id = ".$id."";

    $delete = mysql_query($dQuery);
    if($delete === false)
        {

        throw new Exception ('FOUT: kan bericht niet verwijderen');
        return false;
        }
    
    else
         {
           throw new Exception ('bericht verwijderd');
        return true;
        }
    }


try
{
  removemessage($id);
}

catch (Exception $e)
{

    echo $e->getMessage();
}

?>
Gewijzigd op 23/02/2012 18:12:22 door reshadd farid
 
Wouter J

Wouter J

23/02/2012 19:25:46
Quote Anchor link
Let wel op dat een exception een foutafhandeling is. Dingen als 'bericht verwijderd' is geen fout en hoort dus niet thuis in een exception. Als het goed is gegaan return je bijv. true.

Verder controleer je niet of het formulier is verzonden en waar komt $id vandaan op regel 22?

Even een betere versie van regel 20 - 28:
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
<?php
try
{
  if( $_SERVER['REQUEST_METHOD'] == 'POST' )
  {

    if ( !isset($_POST['id']) || $_POST['id'] == '' )
    {

      throw new Exception('U moet wel een id meegeven');
    }

    else
    {
      if( removeMessage($_POST['id']) === true )
      {

        echo 'Bericht is succesvol verwijderd';
      }
    }
  }
}

catch( Exception $e )
{

  echo $e->getMessage();
}

?>
 
Reshadd farid
Redacteur

reshadd farid

23/02/2012 19:30:34
Quote Anchor link
@wouter heb je het voorbeeldje bekeken met de link die ik gaf in mijn vorige post? er wordt geen id in meegegeven o.i.d. er wordt ook niks ingevuld.. er staat alleen een knop met verwijderen. en dan moet hij de ticket_id pakken van die ticket en dat dus verwijderen dus ik denk dat het niet helpt om
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php  if ( !isset($_POST['id']) || $_POST['id'] == '' )
    {

      throw new Exception('U moet wel een id meegeven');
    }

?>


te gebruiken
Gewijzigd op 24/02/2012 19:01:08 door reshadd farid
 



Overzicht Reageren

Get Adobe Flash player