PHP Update query werkt helaas niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Mohamed nvt

Mohamed nvt

31/08/2016 09:02:20
Quote Anchor link
Obelix en Idefix op 31/08/2016 08:47:44:
Wat zit er in de variabelen op regel 27 / 29?
Echo ze eens.
Waarom maak je die extra variabelen eigenlijk aan?

Hallo,

Die variabelen zijn afkomstig van het formulier en daar zit het gewijzigde data in...
Wanneer ik ze echo, dan gebeurt er niets...
Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd 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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
        $med_name = $row['med_name'];
        $med_production= $row['med_create_date'];
        $med_expire= $row['med_expire_date'];
        
        echo $med_name . $med_production . $med_expire;
        $update_medicines = "UPDATE medicines
                                    SET
                                        med_name = '$med_name',
                                        med_create_date = '$med_production',
                                        med_expire_date ='$med_expire'
                                            WHERE med_id= '"
.$_POST['id']."' ";

$result_update = mysqli_query($connection,$update_medicines);
print_r ($result_update);
if(!$result_update){    
    die ("Query failed" . mysqli_error($connection));    
            }
    }


?>
 
PHP hulp

PHP hulp

19/04/2024 01:48:43
 
Ramon van Dongen

Ramon van Dongen

31/08/2016 10:36:11
Quote Anchor link
Quote:
Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd heb...

Afleren dan... Ik denk dat het daar al fout gaat in dit geval namelijk.

Je checkt of er een POST request is verstuurd en daarna doe je:
$med_name = $row['med_name'];

Waar komt op dat punt opeens $row vandaan? Bedoel je daar niet $_POST['med_name']?
Gewijzigd op 31/08/2016 10:38:51 door Ramon van Dongen
 
Mohamed nvt

Mohamed nvt

31/08/2016 11:14:41
Quote Anchor link
Ramon van Dongen op 31/08/2016 10:36:11:
Quote:
Waarom ik extra variabelen aanmaak,omdat ik het zo geleerd heb...

Afleren dan... Ik denk dat het daar al fout gaat in dit geval namelijk.

Je checkt of er een POST request is verstuurd en daarna doe je:
$med_name = $row['med_name'];

Waar komt op dat punt opeens $row vandaan? Bedoel je daar niet $_POST['med_name']?

Daar heb je helemaal gelijk Ramon!
Ik vind het ook vreemd dat ik het nu pas zie...
Maar nu ben ik even in de war...
Het is toch de bedoeling on de name attribuut van input text, in dit geval "medicine" op te geven of moet ik hier de tabelnaam vanuit DB opgeven?

Dus zo $med_name = $_POST['med_name']; of $med_name = $_POST['medicine'];?

Oh jah mijn PHP redirect werkt lokaal wel en niet op de web server.
Enig idee??? Ik word een beetje gek van de web server nl..
Misschien is mijn website reeds gehackt, want het verwijderen van een record werkt ook niet meer op de web server...en lokaal werkte het wel...
Gewijzigd op 31/08/2016 11:16:45 door Mohamed nvt
 
Ramon van Dongen

Ramon van Dongen

31/08/2016 11:20:27
Quote Anchor link
Hoe het in de name="" van je input attribuut staat, zo komt het (bij een POST method) ook in je $_POST['....'] te staan.

Dus als je input is:
<input type="text" name="med_name">

Dan haal je het op met:
$_POST['med_name']

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$update
= $connection->query("
UPDATE medicines
SET med_name = '"
.mysqli_real_escape_string($connection,$_POST['med_name'])."'
WHERE
med_id = '"
.mysqli_real_escape_string($connection,$_POST['med_id'])."'
"
);
?>




Toevoeging op 31/08/2016 11:21:50:

Welke code gaat er over je redirect?
 
Mohamed nvt

Mohamed nvt

31/08/2016 13:44:45
Quote Anchor link
Hoi Ramon,

Met jouw feedback is het me gelukt om een record te wijzigen.
Het nieuwe probleem waar ik tegen aanloop op de webhosting server is dat PHP redirect niet werkt.
Lokaal werkt de PHP redirect wel, maar op de server van de webhosting "strato" niet.
Betekent dit dat er andere instellingen zijn op de server van Strato? Zo, jah wat voor instellingen en denk je dat ik ze kan/mag aanpassen? of is dit gerelateerd aan FF/IE11?
 
- SanThe -

- SanThe -

31/08/2016 13:58:50
Quote Anchor link
Ramon van Dongen op 31/08/2016 11:20:27:
Welke code gaat er over je redirect?
 
Mohamed nvt

Mohamed nvt

31/08/2016 14:06:23
Quote Anchor link
Voor med_edit.php is het op regel 41
En dezelfde code gebruik ik ook voor mijn andere pagina, maar met andere tekst..

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
<?php include "includes/db-config1.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php

// op basis van een id worden gegevens van de vorige pagina geselecteerd en hieronder in het form weergegeven
if(isset($_GET['id'])){
    $id = $_GET['id'];
    $query = "SELECT * FROM medicines WHERE med_id=$id";
    $result = mysqli_query($connection,$query);
    while($row = mysqli_fetch_assoc($result)){
            $med_id= $row['med_id'];
            $med_name = $row['med_name'];
            $med_production= $row['med_create_date'];
            $med_expire= $row['med_expire_date'];
    }    
}
else {
    echo "No medicine has been chosen";
}

if(!$result){
    die (mysqli_error($connection));    
}

?>

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
        $med_name = $_POST['medicine'];
        $med_production= $_POST['production'];
        $med_expire= $_POST['expire'];
        
        $update_medicines = "UPDATE medicines
                                    SET
                                        med_name = '$med_name',
                                        med_create_date = '$med_production',
                                        med_expire_date ='$med_expire'
                                            WHERE med_id= '"
.$_POST['id']."' ";

$result_update = mysqli_query($connection,$update_medicines);
if($result_update){    

    echo "The selected recored is successfully modified";
    header ("Location: medicines.php");
    exit;
            }
else {
                
die ("Query failed" . mysqli_error($connection));                
                
            }
    }


?>

<?php echo "<div>"; ?>
<?php echo "<h1>Edit page</h1>"; ?>

<form action="" method="post">
<fieldset>
<legend>Medicine edit form</legend>
<input type="hidden" name="id" value="<?php echo $med_id; ?> ">
<label for="medicine">Medicine name:</label><input type="text" name="medicine" id= "medicine" value="<?php if(isset($med_name)) echo $med_name; ?>"> <br>
<label for="production">production Date:</label><input type="text" name="production" id= "production" value="<?php if(isset($med_production)) echo $med_production; ?>"> <br>
<label for="expire">Medicine name:</label><input type="text" name="expire" id= "expire" value="<?php if(isset($med_expire)) echo $med_expire; ?>"> <br>
<input type="submit" name="update_medicine" value="Edit">
</fieldset>
</form>
</div>
<?php include "includes/footer.php"; ?>
 
- SanThe -

- SanThe -

31/08/2016 14:20:19
Quote Anchor link
Er mag geen enkele output zijn voor een header().
Jij hebt al echo gebruikt en dat kan niet.
 
Mohamed nvt

Mohamed nvt

31/08/2016 14:23:22
Quote Anchor link
- SanThe - op 31/08/2016 14:20:19:
Er mag geen enkele output zijn voor een header().
Jij hebt al echo gebruikt en dat kan niet.

Hmm..Oke..
Ik ga nu echo uitschakelen en zal testen of het effect heeft...
Hoe kan ik anders een bericht weergeven plus een paar seconden wachten voordat een PHP redirect plaatsvindt?
 
- SanThe -

- SanThe -

31/08/2016 14:26:11
 
Ramon van Dongen

Ramon van Dongen

31/08/2016 14:42:04
Quote Anchor link
Misschien is het ook wel handig om de tips die je krijgt te gebruiken.

Het voorbeeld heb ik niet voor niets met mysqli_real_escape_string gemaakt, dat is niet omdat ik graag mijn toetsenbord sneller wil verslijten maar omdat je nu echt vatbaar bent voor SQL injectie. Daarnaast gaf je aan dat je extra variabelen aanmaken zo gewend bent, maar probeer het bij dit project toch eens zonder dit te doen.

Ook zou ik het gebruik van die(); wat minder doen.
In het echte leven zeg je ook niet tegen iemand als iets niet lukt: "sterf!"

Quote:
Hoe kan ik anders een bericht weergeven plus een paar seconden wachten voordat een PHP redirect plaatsvindt?

Misschien kun je ook eerst de redirect doen en op die pagina pas de melding weergeven?
Gewijzigd op 31/08/2016 14:42:51 door Ramon van Dongen
 
Mohamed nvt

Mohamed nvt

31/08/2016 14:51:42
Quote Anchor link
- SanThe - op 31/08/2016 14:26:11:

Tnx! voor je feedback.
Overigens, ik was ook even aan het zoeken waarom het lokaal de php header werkt en op de webhosting server niet. Ik kwam deze link tegen:
http://stackoverflow.com/questions/10165247/php-header-not-working-for-server-but-works-perfectly-fine-on-local-host
Daar wordt uitgelegd dat PHP header niet zal werken, als er een fout opgetreden is voor de PHP header.
Ik heb op 3 pagina's nu het volgende aangezet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
?>

En tot mijn verbazing zie dat de website zeurt om een bestand wat ik niet eens heb geupload...
Als je bijv naar http://dev.pc-on-rails.nl/test2/med_edit.php?id=19 dan zult je ook de foutmelding zien...
En nogmaals db-config.php bestaat niet eens op de webhosting server

volledige foutmelding:

Warning: include(includes/db-config.php): failed to open stream: No such file or directory in /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/sidebar.php on line 1 Warning: include(): Failed opening 'includes/db-config.php' for inclusion (include_path='.:/opt/RZphp56/includes') in /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/sidebar.php on line 1


Search

Categories


Category name

Broerte
Mazelen
test01
Warning: Cannot modify header information - headers already sent by (output started at /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/header.php:37) in /mnt/weba/e1/99/51995699/htdocs/dev/test2/med_edit.php on line 45
 
- Ariën  -
Beheerder

- Ariën -

31/08/2016 15:30:26
Quote Anchor link
Wat staat er op de eerste lijnen van sidebar.php?
 
Mohamed nvt

Mohamed nvt

31/08/2016 15:48:10
Quote Anchor link
- Ariën - op 31/08/2016 15:30:26:
Wat staat er op de eerste lijnen van sidebar.php?

Hahaha! Je bent geweldig Ariën!
In de sidebar.php bestand stond idd nog een verwijzing naar "includes/db-config.php".
Dit heb ik nu aangepast.

Wanneer ik nu een item wil invoegen, dan verschijnt volgende foutmelding:

Warning: Cannot modify header information - headers already sent by (output started at /mnt/weba/e1/99/51995699/htdocs/dev/test2/includes/header.php:37) in /mnt/weba/e1/99/51995699/htdocs/dev/test2/med_insert.php on line 32

Code van header.php
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="includes/main.css">
<title></title>

</head>
<body>
<div id="wrapper">
<div id="header">
<div id="menu">
    <ul class="main-nav">
      <li><a href="index.php">Home</a></li>
      
      
      <li class="dropdown">
        <a href="medicines.php">Medicines</a>
        <ul class="drop-nav">
          <li><a href="med_insert.php">Insert medicine</a></li>      
        </ul>
      </li>
      
      
      <li class="dropdown">
        <a href="categories.php">Categories</a>
        <ul class="drop-nav">
          <li><a href="cat_insert.php">Insert category</a></li>      
        </ul>
      </li>
      <li><a href="contact.php">Contact</a></li>
    </ul>

</div>


</div>

Zoals te zien, is er helemaal geen php code

en de code van med_insert.php
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
?>

<?php include "includes/db-config1.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php //echo "<div id='content'><h1>Insert Page</h1>";  ?>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
    if(isset($_POST['submit']) && strlen(trim($_POST['submit'])) > 0){
                    $med_name = $_POST['name'];
                    $med_production= $_POST['production'];
                    $med_expire= $_POST['expire'];
                    //$med_factory= $_POST['factory'];
                    //$med_category= $_POST['category'];    

                    if($med_name =="" || empty($med_name)){
                        echo "This field can't be empty";
            
            
        }
else {
                $query = "INSERT into medicines (med_name,med_create_date,med_expire_date,med_register_date)
                            values ('$med_name','$med_production','$med_expire', NOW()) "
;
                $create_medicines = mysqli_query($connection,$query);
                $last_id = mysqli_insert_id($connection);
                    
                if(!$create_medicines){ // Niet nodig en nooit DIE gebruiken buiten de ontwikkel versie.
                die(mysqli_error($connection));
                }
else {
                    /*echo "<p>New category created successfully and the last inserted ID is: " . $last_id .
                    "<br>You will be automatically redirected to the previous page in 3 seconds...</p>";*/

                    header ("refresh:3;url=medicines.php");
                    exit;
                }
        
            }
    }
}

?>




<?php
echo "<div>";

echo "<form action='' method='post'>";
echo "<fieldset>";
echo "<legend>Insert form</legend>";
echo "<p><label for='name'>Medicine name:</label><input type='text' name='name' id='name'></p>";
echo "<p><label for='production'>Medicine production date:</label><input type='text' name='production' id='production'></p>";
echo "<p><label for='expire'>Medicine expire date:</label><input type='text' name='expire' id='expire'></p>";
echo "<p><label for='factory'>Delivered by factory:</label><input type='text' name='factory' id='factory'></p>";
echo "<p><label for='category'>belongs to category:</label><input type='text' name='category' id='category'></p>";
echo "<input type='submit' name='submit' value='Insert'";
echo "</fieldset>";
echo "</form>";
echo "</div>" ;

?>


<?php include "includes/footer.php"; ?>

En, idd op regel 32 heb ik PHP header gebruikt...

Ik zoek nog even verder om te kijken en ik zou het vinden als jullie nog willen meedenken!

Alvast bedankt!
 
Ben van Velzen

Ben van Velzen

31/08/2016 15:51:37
Quote Anchor link
Ongeacht of het PHP code is, output is output, en output mag niet voordat je headers verstuurt. Als je headers wilt kunnen gebruiken zul je eerst je acties moeten uitvoeren, waarna je je sidebar.php include't.
 
Mohamed nvt

Mohamed nvt

31/08/2016 16:26:55
Quote Anchor link
Ben van Velzen op 31/08/2016 15:51:37:
Ongeacht of het PHP code is, output is output, en output mag niet voordat je headers verstuurt. Als je headers wilt kunnen gebruiken zul je eerst je acties moeten uitvoeren, waarna je je sidebar.php include't.


Hallo Ben,

Dus als ik je goed begrijp, moet ik eerst al mijn acties uitvoeren, zoals query/inserten van gegevens in formulieren en daarna mag ik header.php/footer.php includen?
 
Ramon van Dongen

Ramon van Dongen

31/08/2016 16:30:13
Quote Anchor link
Correct!

1) DB connectie
2) Inserten/updaten van gegevens
3) Ophalen van gegevens of redirect naar andere pagina
4) Weergeven HTML / output
 
Mohamed nvt

Mohamed nvt

31/08/2016 22:20:33
Quote Anchor link
Ramon van Dongen op 31/08/2016 16:30:13:
Correct!

1) DB connectie
2) Inserten/updaten van gegevens
3) Ophalen van gegevens of redirect naar andere pagina
4) Weergeven HTML / output

Hoi Ramon,
Deze constructie heb ik nu ook, echter voor PHP header heb ik nog een echo die wat tekst laat zien samen met een HTML tag. En klopt het dat wanneer ik deze HTML tag verwijder dan zou de PHP header kunnen werken?

Anders zet ik te realiseren dat je PHP header niet kunt gebruiken, wat ik me eigenlijk niet kan voorstellen, het is niet voor niets gemaakt lijkt me! En dus je bent eigenlijk gewezen op PHP header alternatieven zoals wellicht javascript redirect...
 
Ben van Velzen

Ben van Velzen

31/08/2016 22:26:33
Quote Anchor link
Die constructie heb je dus niet, dat omschrijf je net, en dat blijkt ook niet uit je broncode.
Je mag *geen*, en dus ook echt *geen* output hebben verstuurd voor je header(), setcookie() of session_start() gebruikt. Nog geen spatie. Nog geen null byte. Wat je nu doet is dit:
1. Verbind met database
2. Verstuur een hele lap HTML
3. Verwerken, inserten, updaten gegevens
4. Nog weer wat HTML

Als je dit omwerkt naar de omschrijving van Ramon kun je niet alleen header() gebruiken, je hebt ook meteen veel meer controle over je script. Je kunt immers veel flexibeler omgaan met je HTML.
Gewijzigd op 31/08/2016 22:27:49 door Ben van Velzen
 
Mohamed nvt

Mohamed nvt

31/08/2016 22:38:14
Quote Anchor link
Hallo Ben,

Ik weet niet of je mijn code heb gezien, maar voor pagine med_insert.php heb ik de volgorde als volgt:
1. DB-connectie
2. includen header.php
3. includen sidebar.php
4. gegevens worden uit een formulier gehaald
5. deze gegevens worden verwerkt in de DB
6. Wanneer de query gelukt is, dan vindt er een PHP header functie plaats
7. HTML formulier wordt weergegeven
8. includen footer.php

Als er een betere manier is om de code te herstructureren, dan hoor ik dat graag.
Tnx!

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
<?php include "includes/db-config1.php"; ?>
<?php include "includes/header.php"; ?>
<?php include "includes/sidebar.php"; ?>
<?php //echo "<div id='content'><h1>Insert Page</h1>";  ?>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
    if(isset($_POST['submit']) && strlen(trim($_POST['submit'])) > 0){
                    $med_name = $_POST['name'];
                    $med_production= $_POST['production'];
                    $med_expire= $_POST['expire'];
                    //$med_factory= $_POST['factory'];
                    //$med_category= $_POST['category'];    

                    if($med_name =="" || empty($med_name)){
                        echo "This field can't be empty";
            
            
        }
else {
                $query = "INSERT into medicines (med_name,med_create_date,med_expire_date,med_register_date)
                            values ('$med_name','$med_production','$med_expire', NOW()) "
;
                $create_medicines = mysqli_query($connection,$query);
                $last_id = mysqli_insert_id($connection);
                    
                if(!$create_medicines){ // Niet nodig en nooit DIE gebruiken buiten de ontwikkel versie.
                die(mysqli_error($connection));
                }
else {
                    /*echo "<p>New category created successfully and the last inserted ID is: " . $last_id .
                    "<br>You will be automatically redirected to the previous page in 3 seconds...</p>";*/

                    header ("refresh:3;url=medicines.php");
                    exit;
                }
        
            }
    }
}

?>




<?php
echo "<div>";

echo "<form action='' method='post'>";
echo "<fieldset>";
echo "<legend>Insert form</legend>";
echo "<p><label for='name'>Medicine name:</label><input type='text' name='name' id='name'></p>";
echo "<p><label for='production'>Medicine production date:</label><input type='text' name='production' id='production'></p>";
echo "<p><label for='expire'>Medicine expire date:</label><input type='text' name='expire' id='expire'></p>";
echo "<p><label for='factory'>Delivered by factory:</label><input type='text' name='factory' id='factory'></p>";
echo "<p><label for='category'>belongs to category:</label><input type='text' name='category' id='category'></p>";
echo "<input type='submit' name='submit' value='Insert'";
echo "</fieldset>";
echo "</form>";
echo "</div>" ;

?>


<?php include "includes/footer.php"; ?>
 

Pagina: « vorige 1 2 3 volgende »



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.