Hoeveel AND in een UPDATE statement
Ik heb nu dit en het gaat niet goed.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$conn; $selectdb;
$page = intval ($_GET['id']);
$zichtbaar = (isset($_POST['zichtbaar'])) ? 1:0;
$update = mysql_query ("UPDATE tabel SET a_id=".$page." WHERE p_id='".mysql_real_escape_string($_POST['pagina'])."' AND titel='".mysql_real_escape_string($_POST['titel'])."' AND summary='".mysql_real_escape_string($_POST['summary'])."' AND content='".mysql_real_escape_string($_POST['content'])."' AND zichtbaar='".$zichtbaar."'");
$numrow = mysql_num_rows ($update);
if ($update == FALSE) { echo mysql_error(); }
?>
$conn; $selectdb;
$page = intval ($_GET['id']);
$zichtbaar = (isset($_POST['zichtbaar'])) ? 1:0;
$update = mysql_query ("UPDATE tabel SET a_id=".$page." WHERE p_id='".mysql_real_escape_string($_POST['pagina'])."' AND titel='".mysql_real_escape_string($_POST['titel'])."' AND summary='".mysql_real_escape_string($_POST['summary'])."' AND content='".mysql_real_escape_string($_POST['content'])."' AND zichtbaar='".$zichtbaar."'");
$numrow = mysql_num_rows ($update);
if ($update == FALSE) { echo mysql_error(); }
?>
Fouten aangepast!
Gewijzigd op 15/05/2012 20:32:32 door Chris PHP
- bouw foutafhandeling in
- ligt het aan de AND's of aan je query?
- weet je zeker dat je query goed is?
- heb je wel eens 1 keer door je code gescannt? Dus regel voor regel woord voor woord nagaan wat er nou precies gebeurd?
- gebruik eens wat meer enters, dat maakt het overzichtelijk
- regel 2 is onnodig
Ik zou al mijn bezittingen erop willen wedden dat je met deze code minimaal
Edit:
Door die niet zo nette manier van scripten had ik even iets over het hoofd gezien.
Gewijzigd op 15/05/2012 19:51:26 door Wouter J
Chris NVT op 15/05/2012 19:43:44:
Ik heb nu dit en het gaat niet goed.
Bedankt dat je dit deelt, dan zal er warschijnlijk wel iets mis zijn.
verder nog meer erover te vertellen? Errors, wat gebeurt er etc...
Logischer zou zijn:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$update = "UPDATE table SET foo = '".mysql_real_escape_string($_POST['foo'])."',
bar = '".mysql_real_escape_string($_POST['bart'])."'
WHERE
id = '".mysql_real_escape_string($_GET['id'])."' ";
?>
$update = "UPDATE table SET foo = '".mysql_real_escape_string($_POST['foo'])."',
bar = '".mysql_real_escape_string($_POST['bart'])."'
WHERE
id = '".mysql_real_escape_string($_GET['id'])."' ";
?>
Gewijzigd op 15/05/2012 20:01:50 door Bart V B
- Er zit een foutafhandeling in zie regel 10
- Dat is mijn vraag ik kan zo geen fouten vinden als je idd zoveel AND's mag gebruiken
- Wat kan hier fout aan zijn? de velden zijn juist benaamt.
- Ik heb alles goed doorgelezen en 3x op spelfouten gecontroleerd. Ook geeft Dreamweaver geen syntax errors aan.
- Sorry ik heb een breed scherm met hoge resolutie, past precies op 1 regel bij mij :D
- regel 2 maakt een connectie, ik include een config.php file waar deze gedifineerd worden. Zonder werkt na mijn weten niet.
isset($_POST['send']) is niet echt de manier om te controleren of een formulier wordt verzonden.
Daar hebben we
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
// Het formulier is verzonden.
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST'){
// Het formulier is verzonden.
}
?>
voor
@Bart, jou voorbeeld doet voor mij niet veel, aangezien ik veel meer velden moet updaten. Als het anders kan graag een voorbeeld met meerdere velden.
Toevoeging op 15/05/2012 19:57:44:
@Mark,
Ik zie wat je bedoeld, laat werken mis je welleens echter met de aanpassing $update = mysql_query ("statement hier"); werkt het nog steeds niet.
De 'send' is een type="hidden" en werkt goed moet ik zeggen, wat is de meerwaarden om jou optie te gebruiken?
Quote:
- Er zit een foutafhandeling in zie regel 10
2 kromme dingen:
1) eerst formulier variabelen gebruiken en dan pas kijken of er uberhaupt wel een formulier is verzonden? Lijkt me een vreemde gang van zaken.
2) Foutafhandeling op systeem dingen is ook handig. Is de query, ehh juist, wel juist verzonden? Krijg ik errors (zet dus de error_reporting aan)? Enz?
Quote:
- Wat kan hier fout aan zijn? de velden zijn juist benaamt.
- Ik heb alles goed doorgelezen en 3x op spelfouten gecontroleerd. Ook geeft Dreamweaver geen syntax errors aan.
- Ik heb alles goed doorgelezen en 3x op spelfouten gecontroleerd. Ook geeft Dreamweaver geen syntax errors aan.
Dan mis je toch nog echt heel veel PHP kennis om zo'n script te maken. Want deze fout moet je na 1 keer goed doorlezen al meteen hebben gezien.
Quote:
- Sorry ik heb een breed scherm met hoge resolutie, past precies op 1 regel bij mij :D
Het gaat er niet om dat het op 1 regel past of niet maar om de net heid. Wat vind je netter, jou code of deze hieronder?
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
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
<?php
$page = intval($_GET['id']);
$zichtbaar = (isset($_POST['zichtbaar'])
? 1
: 0
);
$update = "
UPDATE
tabel
SET
a_id = ".$page."
WHERE
p_id = '".mysql_real_escape_string($_POST['pagina'])."'
AND
titel = '".mysql_real_escape_string($_POST['titel'])."'
AND
summary = '".mysql_real_escape_string($_POST['summary'])."'
AND
content = '".mysql_real_escape_string($_POST['content'])."'
AND
zichtbaar = '".$zichtbaar."'
";
$numrow = mysql_num_rows($update);
if (isset($_POST['send'])) {
if ($numrow == 0) {
echo "Sorry er is iets fout gegaan tijdens het bewerken";
}
}
?>
$page = intval($_GET['id']);
$zichtbaar = (isset($_POST['zichtbaar'])
? 1
: 0
);
$update = "
UPDATE
tabel
SET
a_id = ".$page."
WHERE
p_id = '".mysql_real_escape_string($_POST['pagina'])."'
AND
titel = '".mysql_real_escape_string($_POST['titel'])."'
AND
summary = '".mysql_real_escape_string($_POST['summary'])."'
AND
content = '".mysql_real_escape_string($_POST['content'])."'
AND
zichtbaar = '".$zichtbaar."'
";
$numrow = mysql_num_rows($update);
if (isset($_POST['send'])) {
if ($numrow == 0) {
echo "Sorry er is iets fout gegaan tijdens het bewerken";
}
}
?>
Quote:
De 'send' is een type="hidden" en werkt goed moet ik zeggen, wat is de meerwaarden om jou optie te gebruiken?
Dat die methode altijd goed werkt en jou methode niet overal.
Quote:
ik krijg een errors, ik heb er nu achter regel 10 mysql_error() gezet echter geeft die geen melding
>> Ik krijg een errors
Je krijgt inderdaad 1 error iets van:
mysql_num_rows() expects parameter 1 to be a query resource, string given
>> (...) achter regel 10 (...)
Wat heeft die daar ook te zoeken?
Gewijzigd op 15/05/2012 20:02:59 door Wouter J
- Mark - op 15/05/2012 19:51:58:
De query wordt nergens uitgevoerd dus er zal inderdaad niet veel gebeuren.
Inderdaad.
Hier is $update gewoon een tekst:
$numrow = mysql_num_rows ($update);
even buiten die 'kromme' dingen om, voordat ik de hele foutafhandeling correct en zuiver maak, wil ik eerst een werkende update query hebben.
Als je het hebt over de $update = mysql_query ("statement hier") zonder de mysql_query ja klopt dat was ik even vergeten, is aangepast en werkt ook niet.
Ik persoonlijk vind mijn manier duidelijker, echter dit is aanwensel en persoonlijke voorkeur. Is niet echt belangrijk voor de werking van het script.
Toevoeging op 15/05/2012 20:04:43:
- SanThe - op 15/05/2012 19:58:34:
Inderdaad.
Hier is $update gewoon een tekst:
$numrow = mysql_num_rows ($update);
- Mark - op 15/05/2012 19:51:58:
De query wordt nergens uitgevoerd dus er zal inderdaad niet veel gebeuren.
Inderdaad.
Hier is $update gewoon een tekst:
$numrow = mysql_num_rows ($update);
Dat is inmiddels aangepast, maar ook dan werkt het niet.
Quote:
even buiten die 'kromme' dingen om, voordat ik de hele foutafhandeling correct en zuiver maak, wil ik eerst een werkende update query hebben.
Verkeerde werkwijze. Ga jij ook eerst een huis bouwen en dan pas aan de fundering beginnen? Nee, je begint eerst met de fundering en dan ga je bezig met het huis.
Zo werkt een script ook. Een script zal niemand in 1 keer vlekkeloos scripten, het is mijn in elk geval nog nooit gelukt. Alleen om je fouten te ontdekken moet je gaan debuggen zoals dat heet en daarvoor heb je foutmeldingen en goede foutafhandeling nodig. Dus zonder goede foutafhandeling en met kromme dingen zul je nooit de update query werkende krijgen.
Quote:
Ik persoonlijk vind mijn manier duidelijker, echter dit is aanwensel en persoonlijke voorkeur. Is niet echt belangrijk voor de werking van het script.
Het is niet persoonlijke voorkeur maar correctheid om snel te kunnen debuggen. In jou code kan je niet zien dat je 2 if statements hebt, in elk geval dat kost veel meer tijd. En die 2 }}, je zou niet weten waar die vandaan komen en wat er in deze statements gebeurd. Hierdoor ga je op den duur je eigen code niet meer begrijpen.
Chris NVT op 15/05/2012 20:03:58:
voordat ik de hele foutafhandeling correct en zuiver maak, wil ik eerst een werkende update query hebben.
En als je het nou eens om zou draaien: zou het door (correcte) foutafhandeling niet zo zijn dat je de fout zou kunnen vinden en daarmee je query werkend krijgt.....
mysql_error() geeft geen melding, hoe kom ik er dan achter waar het fout gaat? Zelfs met een or die (mysql_error()) achter de query krijg ik geen melding van MySQL.
Chris NVT op 15/05/2012 20:13:29:
mysql_error() geeft geen melding, hoe kom ik er dan achter waar het fout gaat? Zelfs met een or die (mysql_error()) achter de query krijg ik geen melding van MySQL.
Hoe implem,enteer je het dan? Je plaatst mysql_error(), niet echter je query, maar kijkt wat mysql_query() teruggeeft. Indien 'false', dan toon je mysql_error().
Toevoeging op 15/05/2012 20:19:16:
@Aar,
Ongeacht waar ik mysql_error() plaats, deze geeft niets. Ik heb hem nu direct achter de $update query staan, zo dus $update = mysql_query ("statement") or die (mysql_error());
Maar ik krijg geen meldingen.
Gewijzigd op 15/05/2012 20:19:50 door Chris PHP
- Aar -:
Je plaatst mysql_error(), niet achter je query, maar kijkt wat mysql_query() teruggeeft. Indien 'false', dan toon je mysql_error().
Sarcasme mag je wel voor je houden hoor.
Ik heb zoals 3x gezegd de wijzigingen m.b.t. error reporting aangepast blijkbaar zijn er meer mensen die moeite hebben met lezen.
Kan er iemand gewoon ee straight-to-the-point antwoord geven AUB?
P.S. als ik doodleuk wat , neezet komt mysql_error() wel met een melding dat mijn syntax niet correct is.
Gewijzigd op 15/05/2012 20:36:38 door Chris PHP
Quote:
Sarcasme mag je wel voor je houden hoor.
Helaas was dit geen sarcasme.. Aar zegt 'niet achter je query' vervolgens reageer jij 'Ik heb hem nu direct achter de $update query staan' dan lijkt het me dat er ergens iets mis gaat.
Straight-to-the-point answer: http://github.com/WouterJ/SQL-boilerplate/tree/mysql
Ik had het op dat moment op 3 verschillende plaatsen gezet omdat ik niet kon begrijpen dat er geen mysql_error() melding kreeg. Dus idd ook achter de query evenals een losse foutafhandeling.
Echter als ik doodleuk wat , neerzet in de statement komt mysql_error() wel met een melding dat de syntax niet klopt.
Leuk linkje echter staat nergens een update statement, geen straight-to-the-point antwoord dus.
Gewijzigd op 15/05/2012 20:41:01 door Chris PHP
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql ="SELECT dit, dat FROM iets";
$result = mysql_query($sql);
if($result) {
// query is gelukt, toon een leuke bevestigingsmelding
} else {
// Jammer, de query is niet uitgevoerd, echo hier een mysql_error().
}
?>
$sql ="SELECT dit, dat FROM iets";
$result = mysql_query($sql);
if($result) {
// query is gelukt, toon een leuke bevestigingsmelding
} else {
// Jammer, de query is niet uitgevoerd, echo hier een mysql_error().
}
?>
Gewijzigd op 15/05/2012 20:52:00 door - Ariën -
Waarom is deze foutafhandeling niet correct dan? Hij geeft een error in de syntax.