Nö. Du sagst:
wenn ^das "" ist (ein leerer String ist)
Umgekehrt (so wie Du es möchtest) sollte es heißen:
Du kannst aber auch mit empty() arbeiten:
Nö. Du sagst:
wenn ^das "" ist (ein leerer String ist)
Umgekehrt (so wie Du es möchtest) sollte es heißen:
Du kannst aber auch mit empty() arbeiten:
Es muss heißen: $mysqli->error
(also keine Klammern)
siehe: http://php.net/manual/de/mysqli.quickstart.statements.php
Die Query stimmt wieder nicht =)
So hier sollte es aussehen:
$sql = "
SELECT
`AnlagenNr`
FROM
(
SELECT
`AnlagenNr`, `ServiceDatum`
FROM
`tblServiceDaten`
WHERE
`ServiceDatum` BETWEEN '2013-01-01' AND '2013-12-31'
ORDER BY
`ServiceDatum` DESC
) AS Sortiert
GROUP BY
`AnlagenNr`
HAVING
`AnlagenNr` NOT IN
(
SELECT
`AnlagenNr`
FROM
`tblServiceDaten`
WHERE
`ServiceDatum` NOT BETWEEN '2013-01-01' AND '2013-12-31'
)
";
Alles anzeigen
Du musst einen Fehler bekommen.
ZitatParse error: syntax error, unexpected ')' in ...
IM Bsp was Du gepostest hast -> Zeile 33 (Du hast die Klammer von der Query ausgeschlossen)
Dass Du keinen Fehler bekommst, könnte daran liegen, dass Du 'display_errors', aber nicht 'error_reporting' aktiv hast.
Versuch mal anstatt:
ini_set('display_errors', true);
das hier:
ini_set('error_reporting', -1);
ini_set('display_errors', -1);
EDIT: das sind noch mehr Fehler.
zB
Zeile 42
Kann gefixt werden durch
EDIT2:
und noch ein copy/paste -Fehler in der query (Zeile 32)
sollte heißen:
https://www.youtube.com/watch?v=-YPbtTvDAZQ
Schon interessant das Thema. Auch einfach mal googlen.
(fast)Alles ist möglich.
Der mMn einfachste Weg ist, wenn Du Dir aufschreibst, was Du vorhast,
und dann den Satz auseinander nimmst als wäre es eine Sql-Anweisung.
Hier wird es allerdings ein wenig speziell.
Nun würe ich gerne alle Anlagen Nummern ausgeben -> SELECT `AnlageNr`
bei der das aktuellste Einsatzdatum -> ORDER BY `Einsaetze` DESC
im Jahre 2013 war -> WHERE `Einsaetze` BETWEEN '2013-01-01' AND '2013-12-31'
und nicht in 2014 oder früher als 2013 vorkommt. -> HAVING `AnlageNr` NOT IN ~*gekürzt*(`Einsaetze` NOT BETWEEN '2013-01-01' AND '2013-12-31')
SELECT -- wähle
`AnlageNr` -- das
FROM -- von
( -- sub querty um "das aktuellste Einsatzdatum" zu bekommen
SELECT -- wähle
`AnlageNr`, `Einsaetze` -- das
FROM -- von
tabellen_name -- hier
WHERE -- wo
`Einsaetze` BETWEEN '2013-01-01' AND '2013-12-31' -- `Einsaetze` (inklusive)zwischen ... liegt
ORDER BY -- sortiere nach
`Einsaetze` DESC -- `Einsaetze` absteigend ("das aktuellste Einsatzdatum")
) AS Sortiert
GROUP BY -- gruppiere -
`AnlageNr` -- `AnlageNr` um `AnlageNr` nur einmal im ergebnis zu bekommen
HAVING -- ~wobei -
`AnlageNr` NOT IN -- die `AnlageNr` nicht in *
(
SELECT
`AnlageNr`
FROM
tabellen_name
WHERE
`Einsaetze` NOT BETWEEN '2013-01-01' AND '2013-12-31'
) -- * vorkommt
Alles anzeigen
Die Having Anweisung sorgt hier dafür, dass Du nur die `AnlageNr` bekommst,
die wirklich nur in 2013 vorkommen.
Existiert also eine `AnlageNr` auch in 2011, dann wird diese nicht ausgegeben.
Beides: HTML und PHP (Formular erstellen/anzeigen und Formular empfangen/auswerten).
Wie beides funktioniert schreib ich jetzt nicht, denn das steht schon geschrieben =)
Siehe: http://www.php-kurs.com/formularauswertung-mit-php.htm
Kurz: action="Wunschbox01.php" sorgt dafür, dass beim Ansenden des Formulars die Datei Wunschbox01.php aufgerufen/ausgeführt wird.
Der Container muss sein. Denn Der Bro muss ja die Grenze kennen, ab wo ein Scrollbalken anzuzeigen wäre.
Es sei denn, die Tabelle geht auf die gesamte Breite der Page - dann kannst (aber solltest wohl besser nicht) Du <body> als Container nutzen.
Also Bro bekommt Container und die Aufgabe einen Scrollbalken anzubieten, sobald der Inhalt (table) aus Container herausragt.
BTW - responsive_tables.js (lange nix mehr dran gemacht - gab glaub ich nen bug mit dem on/off -button)
Ja, denn da ist noch eine Bedingung:
Das hier könnte funktionieren.
(Kennst Du Dich denn mit Javascript aus?)
var topCard = 1;
var facingUp = true;
function flipCard(n, force=false) { // <- new: , force=false
if (force || topCard === n) return; // <- new: force ||
// Replace the contents of the current back-face with the contents
// of the element that should rotate into view.
var curBackFace = $('.' + (facingUp ? 'face2' : 'face1'));
var nextContent = $('.store' + n).html();
var nextContent = $('.store li:nth-child(' + n + ')').html();
curBackFace.html(nextContent);
// Rotate the content
$('.card').toggleClass('flipped');
topCard = n;
facingUp = !facingUp;
}
$('#flip1').on('click', function(){ flipCard(1); });
$('#flip2').on('click', function(){ flipCard(2); });
$('#flip3').on('click', function(){ flipCard(3); });
$('#flip4').on('click', function(){ flipCard(4); });
$('#flip5').on('click', function(){ flipCard(6); });
$(document).ready(function(){
// Add the appropriate content to the initial "front side"
var frontFace = $('.face1');
var frontContent = $('.store li:first-child').html();
frontFace.html(frontContent);
flipCard(1, true); // <- new: , true
});
Alles anzeigen
Sehe gerade, dass Der Eintrag ja direkt in das php File geschrieben wird.
Das kann gefährlich werden.
Warum:
Du weiß sicherlich, dass man mitten im HTML code PHP nutzen kann. Dabei öffnet man mit
<?php
und schließt mit
?>
Das heißt, dass ein Eintrag (Variable $kommentar) mit dem Text:
Auf Deiner Seite ausgeführt wird.
Man kann (und sollte sowieso) sämtliche Benutzereingaben behandeln (Stichwort htmlspecialchars() oder htmlentities() ),
aber ich würde trotzdem davon abraten PHP Dateien mit Benutzereingaben zu beschreiben.
Was Du schon mal machen kannst:
Das hier:
mit dem hier ersetzen:
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$kommentar = htmlspecialchars($_POST['kommentar']);
(htmlspecialchars() siehe: http://php.net/manual/de/function.htmlspecialchars.php)
Zitathtmlspecialchars — Wandelt Sonderzeichen in HTML-Codes um
Dadurch wird zB das Zeichen < zu <
Und am Bsp von oben:
<?php exit; ?> wird zu <?php exit; ?>gt;
INFO: im Browser werden diese Zeichen wieder normal angezeigt. Er wandelt die HTML-Codes in Benutzerfreundliche Zeichen um.
Wenn Du Dir aber den Quellcode ansiehst (Rechtsklick "Quelltext anzeigen"), dann siehst Du das, was der Browser als "Rohdaten" bekommt.
Ich will Dich jetzt nicht noch mehr verwirren. Du kannst die Variante nutzen.
Aber Du musst darauf achten, dass Du keine Benutzereingaben vergisst zu maskieren.
Etwas ungewöhnlich den ganzen HTML-Kram mit in die Datei zu schreiben. =)
// str_replace(search, replace, subject)
$ersetzen = str_replace("<!--Begin-->", $eintrag, $inhalt);
<!--Beginn... wird gesucht. Und (nur) wenn vorhanden mit $eintrag ersetzt.
Es wird wohl kein <!--Beginn... in der Datei stehen.
(Wozu eigentlich?)
Man kann das glaub ich umstellen. Hab ich aber nie probiert.
Evtl kannst Du im Editor die Seite per Klick im Browser öffnen. Kommt dann wieder auf den Editor an.
Ich hoffe Du weißt was das Script macht. Sonst macht es keinen Sinn es zu erklären =)
Im JS wird onclick flipCard(n) ausgeführt.
Das heißt: wenn Du auf eine neue Seite verweist (Browser lädt), dann führst Du die Funktion per onload aus und übergibst das erste Menü (wahrscheinlich 1).
probier mal:
Wenn Du die Datei in den Browser ziehst, dann wird sicherlich sowas wie "c:/xampp/htdocs/..." in der url stehen.
Das funktioniert nicht. Denn dann wird die Datei nicht auf dem (simulierten) Server ausgeführt.
Dein Server "fängt" also im Verzeichnis "htdocs" an.
Das liegt daran, dass Bei dem ersten Link ein Link dahinter steckt ![]()
Klingt komisch ...
mit href="#" (heißt glaub ich Sprungmarker? keine Ahnung ...) bleibt der Browser ja auf der Seite - die Seite wird nicht neu geladen.
Bei einem "echten" Link lädt der Browser die neue Seite.
Du müsstest die Animation also auch beim Laden, oder besser gesagt NACH dem Laden der Seite anstoßen (onload).
Das kannst Du gleich mit über die Datenbank erledigen.
Den PHP Code lässt Du so wie er ist (ohne die neuen IFs) und legst in der DB/Tabelle einen neuen Datensatz an:
tabelle web_leistungen:
l_id -- am besten der erste Eintrag in der Tabelle
l_titel -- Diese Seite ist leider nicht verfügbar
l_titel_url ... usw
l_header ... l_header_titel ... l_inhalt ...
Und damit Deine Funktion IMMER ein Ergebnis liefert - auch wenn es kein passendes Ergebnis für den gesuchten l_titel_url gibt -
hängst Du an die WHERE-Bedingung einfach ein OR `l_id` = 1
$stmt = $mysqli->prepare("
SELECT
`l_id`,
`l_titel`,
`l_titel_url`,
`l_header`,
`l_header_titel`,
`l_inhalt`
FROM
`web_leistungen`
WHERE
`l_titel_url` = ? -- gib mir den passenden datensatz zu dem titel ?
OR `l_id` = 1 -- oder immer den datensatz mit der id 1
LIMIT 1 -- und immer nur ein einziges ergebis
");
Alles anzeigen
Das Stellt sicher, dass Deine Funktion immer ein Ergebnis liefert (es wird kein "PHP NOTICE undefined index ..." geben),
und dass sie immer EIN Ergebnis ausspuckt.
EDIT:
Du kannst zwecks dem explode() noch eine Prüfung einbauen:
$seite = explode("/", $_SERVER['REQUEST_URI']);
if(issset($seite[2])) // wenn offset 2 in $seite gesetzt ist
{
// dann nutze es
$bereich = $seite[2];
}
else
{
// sonst nutze 1 (was dann wieder dem datensatz id 1 für die seite "Diese Seite ist leider nicht verfügbar" entspricht)
$bereich = 1;
}
$object = leistung($mysqli, $bereich);
Alles anzeigen
Wenn Die url keinen Bereich/Titel hergab, dann ist $seite[2] ja nicht gesetzt und Du würdest wohl den Wert NULL in die Sql-Abfrage schicken.
Und als Tip: die IF als Kurzschreibweise:
das Prinzip:
() ? : ;
DAS = WENN ? DANN : SONST;
am Bsp:
$var = isset($var) ? $var+1 : 1
wenn $var gesetzt ist, dann $var+1, sonst 1
Etwas spezieller:
$var = ( /*bedingung*/ )
? /*bedingung ist wahr*/
: /*bedingung ist nicht wahr*/ ;
$var = (isset($var) and $var !== false and $xyz === true)
? $var + 1 / 4 * (123.3 + 2)
: 0 ;
Hier also Dein Code:
Habe dann noch unter Sicherheit eben ein Paßwort für alles eingegeben (auch den XAMPP-Ordner -> oder ist das der Fehler?),
Du meinst bestimmt:
Zitat
Security Konsole MySQL | XAMPP Verzeichnis Schutz
...
XAMPP VERZEICHNIS SCHUTZ (.htaccess)
zu finden unter http://localhost/security/index.php
Das ist ok.
~Kurze Erklärung:
Bei "normaler" Installation von xampp findest Du unter c:/xampp/htdocs/
eine Datei index.php.
Der Inhalt:
<?php
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
$uri = 'https://';
} else {
$uri = 'http://';
}
$uri .= $_SERVER['HTTP_HOST'];
header('Location: '.$uri.'/xampp/');
exit;
?>
Something is wrong with the XAMPP installation :-(
Alles anzeigen
Wenn Du diese im Browser ausführst ( localhost/index.php ) dann solltest Du auf localhost/xampp/ weitergeleitet werden.
Sollte etwas "nicht stimmen", bekommst Du den text "Something is wrong with the XAMPP installation :-(" angezeigt.
Der Ordner htdocs ist das Verzeichnis, in dem PHP ausgeführt werden kann.
Gehst Du einen Ordner zurück (c:/xampp/bsp_datei.php), dann wird kein PHP ausgefürht.
Sieh mal nach, ob die Datei index.php im Ordner c:/xampp/htdocs/ existiert und rufe im Browser localhost/index.php auf (xampp apache natürlich starten)
Nimm die is_admin() und nutze sie für den Moment als Dummy.
Wenn Du dann einen Login eingebaut hat, kannst Du in der is_admin() die richtige Prüfung einbauen.
// um den admin zu simulieren definierst Du in der config oder in der index (...) eine Konstante:
define('ADMIN', true);
function is_admin()
{
if( defined('ADMIN') ){
return true;
}
return false;
so oder so ähnlich.
/**
* Fetch rows from the database (SELECT query)
*
* @param $query The query string
* @return bool False on failure / array Database rows on success
*/
public function select($query) {
$rows = array();
$result = $this -> query($query);
if($result === false) {
return false;
}
while ($row = $result -> fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}
Alles anzeigen
Du bekommst also entweder (den Wert) false, oder ein Array mit den gelesenen Zeilen.
$rows = $db -> select("SELECT * FROM `users` WHERE EMail=test@gmail.com");
var_dump($row[0]); // erste zeile
erwartest Du nur ein Ergebnis, dann liegt das auf $row[0]
EDIT:
Nutz mal '
=)
EDIT: ha, angefangen zu schreiben, afk, abgeschickt und The Scout war schon da ![]()
Das einzige was ich sehe ist, dass Du in der ersten Abfrage einen Integer (Zahl) übergibst,
und beim zweiten einen String der die Zahl 1 enthält.
Trotzdem sollte das Ergebnis das Gleiche sein.
Setz mal vor dem Ausführen der ersten Query
da wird bestimmt ein Fehler gemeldet.
Ja, genau - guckt Dir das in Ruhe an wenn Du Zeit hast.
Mit mysqli machst Du ja schon mal nix falsch (die "alte" Variante mysql wird ja nicht mehr empfohlen).
mMn ist mysqli aber , ... naja Wirrwarr.
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.