reactie verwijderen
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:
en de rest van de pagina waar een button in komt ( kijk even of ik dat ook goed doe )
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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";
}
}
?>
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)
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
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:  '.$row['ticket_id'].'<br/>';
echo 'tijdstip:  '. $row['ticketdatum'].'<br/>';
echo 'Aanvrager:  ' .$row['naam'].'<br/>';
echo 'email:  '. $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++;
}
}
}
?>
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:  '.$row['ticket_id'].'<br/>';
echo 'tijdstip:  '. $row['ticketdatum'].'<br/>';
echo 'Aanvrager:  ' .$row['naam'].'<br/>';
echo 'email:  '. $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++;
}
}
}
?>
Gesponsorde koppelingen:
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
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 "
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 "
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:
Meer informatie: control-structures.alternative-syntax
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)
1
2
3
4
5
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; ?>
Ticketnr: <?php echo $row['ticket_id']; ?><br>
Tijdstip: <?php echo $row['ticketdatum']; ?><br>
enz.........................................<br>
<?php endwhile; ?>
Meer informatie: control-structures.alternative-syntax
In de functie moet je ook de $var opnemen:
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.
Code (php)
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
@wouter
ik heb mede door jou voorbeeld iets geprobeerd ik vraag me af of dit gelukt is. hieronder wat ik gedaan heb
@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
en heb een pagina genaamd verwijderbericht.php gemaakt, deze ziet er zo uit.
ik denk dat mijn query zowiezo niet goed is maar wie kan me hiermee op weg helpen?
ik heb mede door jou voorbeeld iets geprobeerd ik vraag me af of dit gelukt is. hieronder wat ik gedaan heb
Code (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
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;
}
?>
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)
1
2
3
2
3
<?php
echo '<input type="button" value="Verwijder bericht" name="verwijderB" onclick="javascript:(window.location=\'verwijderbericht.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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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');
}
?>
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?
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:
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:
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:
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.
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)
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)
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:
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.
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.
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.
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
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)
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
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();
}
?>
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
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:
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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();
}
?>
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();
}
?>
@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
te gebruiken
Code (php)
te gebruiken
Gewijzigd op 24/02/2012 19:01:08 door reshadd farid



